摘要:

基于c语言以及esayx库的五子棋游戏

操作说明:

将图片保存为test.jpg,并放在程序根目录下。

使用左键下黑棋,使用右键下白棋,中键进行棋子的覆盖并实现悔棋。

源代码:

/**************************************************************
** 文 件 名:wuziqi.cpp
** 功    能:扫雷
** 作    者:褚禹江
** 创建日期:2018.05.20
** 修改日期:2018.06.22
**************************************************************/
#include <stdio.h>
#include <conio.h>
#include <graphics.h>
#include <string.h>

/**************************************************************/
void init_system();               //初始化系统
void close_system();               //关闭系统
void init_game();                  //初始化游戏界面

void m_white();                    //白棋
void m_black();                    //黑棋

void m_play();                     //下棋
int  m_win();                      //判断胜负

void m_replay();                   //重玩

void draw_bine();                  //覆盖棋  悔棋
/**************************************************************/
int m_bine[22][22] ;               //定义棋子数组
int m_w = 15,m_h = 15,m_wh = 25;   //定义行列数,每格像素数
int m_x0 = 25,m_y0 = 25;           //初始棋子位置
int m_x9 = 375,m_y9 = 375;         //最终棋子位置
int flag;

#define LIGHTBROWN RGB(255,211,155)//覆盖棋颜色

/**************************************************************/
/**************************************************************/
void main()
{
    init_system();

m_play();

close_system();
}

/*************************************************************/
void init_system()  //初始化系统
{
    init_game();
}

void init_game()    //初始化游戏界面
{
    IMAGE img;
    loadimage(&img, "test.jpg");//导入test图片用作棋盘
    int w, h;
    w = img.getwidth();
    h = img.getheight();
    initgraph(w+150,h);
    putimage( 0, 0, &img);

setlinecolor(WHITE);
    setfillcolor(BLACK);
    fillrectangle(w, 0, w+130, 60);
    settextstyle(20,0,"楷体");
    outtextxy(w+10,5 ,"黑方:玩家一");
    outtextxy(w+10,30 ,"白方:玩家二");
}

void close_system()  //关闭系统
{
    closegraph();
}

/*********************************************/
void m_white()  //将画笔变为白色
{
    setlinecolor(WHITE);
    setfillcolor(WHITE);
}

void m_black()  //将画笔变为黑色
{
    setlinecolor(BLACK);
    setfillcolor(BLACK);
}

void draw_bine(int x,int y)//将背景覆盖实现悔棋
{
    setcolor(LIGHTBROWN);
    circle(x,y,11);
    setfillcolor(LIGHTBROWN);
    floodfill(x,y,LIGHTBROWN);
    setcolor(BLACK);
    line(x-11-1,y-1,x+11-1,y-1);
    line(x-1,y-11-1,x-1,y+11-1);   
}

/**********************************************/
void m_play()  //下棋
{
    MOUSEMSG m_mouse;
    int i,j;
    while(1)
    {
        flag = 0;
        m_mouse = GetMouseMsg();
        switch(m_mouse.uMsg)
        {
            int a,b;
            case WM_LBUTTONDOWN:  //左键下黑棋
               {
                    if(m_mouse.x > m_x0-m_wh/2 && m_mouse.x < m_x9+m_wh/2&&
                     m_mouse.y > m_y0-m_wh/2 && m_mouse.y < m_y9+m_wh/2)  //判断是否在棋盘内
                  {
                      for(i = 0 ; i <= 15 ; i++)
                      {
                          for(j = 0 ; j <= 15 ; j++)
                          {
                              if(m_mouse.x >= m_x0-m_wh/2   +i*m_wh &&
                                 m_mouse.x <= m_x0+m_wh/2   +i*m_wh &&
                                 m_mouse.y >= m_y0-m_wh/2   +j*m_wh &&
                                 m_mouse.y <= m_y0+m_wh/2   +j*m_wh)      //纠正棋子位置,使其落在两线交叉点
                              {
                                  a = i + 1;
                                  b = j + 1;
                                  m_mouse.x = a*m_wh;
                                  m_mouse.y = b*m_wh;
                                  break;
                              }
                          }
                      }                  
                      if(m_bine[a][b] != 0)  //如果此处有棋子则不能下棋
                        continue;
                      m_bine[a][b] = 1;
                      m_black();
                      fillcircle(m_mouse.x,m_mouse.y,10);
                  }
                  flag = m_win();
                  if(flag == 1)  //判断是否胜利
                  {
                      outtextxy(400,250 ,"按任意键");
                      outtextxy(400,270 ,"再来一盘");
                      getch();
                      m_replay();
                  }
                  else
                    m_win();
               }
              break;
            case WM_RBUTTONDOWN :   //右键下白棋
               {
                    if(m_mouse.x > m_x0-m_wh/2 && m_mouse.x < m_x9+m_wh/2&&
                     m_mouse.y > m_y0-m_wh/2 && m_mouse.y < m_y9+m_wh/2)  //判断是否在棋盘内
                  {
                      for(i = 0 ; i <= 15 ; i++)
                      {
                          for(j = 0 ; j <= 15 ; j++)
                          {
                              if(m_mouse.x >= m_x0-m_wh/2   +i*m_wh &&
                                 m_mouse.x <= m_x0+m_wh/2   +i*m_wh &&
                                 m_mouse.y >= m_y0-m_wh/2   +j*m_wh &&
                                 m_mouse.y <= m_y0+m_wh/2   +j*m_wh)      //纠正棋子位置,使其落在两线交叉点
                              {
                                  a = i + 1;
                                  b = j + 1;
                                  m_mouse.x = a*m_wh;
                                  m_mouse.y = b*m_wh;
                                  break;
                              }
                          }
                      }
                      if(m_bine[a][b] != 0)  //如果此处有棋子则不能下棋
                        continue;
                      m_bine[a][b] = 2;
                      m_white();
                      fillcircle(m_mouse.x,m_mouse.y,10);
                  }
                  flag = m_win();
                  if(m_win() == 1)  //判断是否胜利
                  {
                      outtextxy(400,250 ,"按任意键");
                      outtextxy(400,270 ,"再来一盘");
                      getch();
                      m_replay();
                  }
                  else
                    m_win();
               }
                break;
            case WM_MBUTTONDOWN:
                {
                    if(m_mouse.x > m_x0-m_wh/2 && m_mouse.x < m_x9+m_wh/2&&
                     m_mouse.y > m_y0-m_wh/2 && m_mouse.y < m_y9+m_wh/2)  //判断是否在棋盘内
                  {
                      for(i = 0 ; i <= 15 ; i++)
                      {
                          for(j = 0 ; j <= 15 ; j++)
                          {
                              if(m_mouse.x >= m_x0-m_wh/2   +i*m_wh &&
                                 m_mouse.x <= m_x0+m_wh/2   +i*m_wh &&
                                 m_mouse.y >= m_y0-m_wh/2   +j*m_wh &&
                                 m_mouse.y <= m_y0+m_wh/2   +j*m_wh)      //纠正棋子位置,使其落在两线交叉点
                              {
                                  a = i + 1;
                                  b = j + 1;
                                  m_mouse.x = a*m_wh;
                                  m_mouse.y = b*m_wh;
                                  break;
                              }
                          }
                      }
                      if(m_bine[a][b] == 0) 
                        continue;
                      m_bine[a][b] = 0;  //将本存在棋的数组赋0
                      draw_bine(m_mouse.x,m_mouse.y);
                  }
               }
              break;
        }
    }
}

void m_replay()//重新游戏
{
    memset(m_bine,0,sizeof(m_bine));//初始化数组
    init_game();
}

int m_win()  //判断是否胜利
{
    int i,j;
    for(i = 1 ; i <= 15 ; i++)
    {
        for(j = 1 ; j <= 15 ; j++)
            {
                if(m_bine[i][j] == 1 && m_bine[i+1][j] == 1 && m_bine[i+2][j] == 1 &&
                   m_bine[i+3][j] == 1 && m_bine[i+4][j] == 1)
                {
                    settextcolor(WHITE);
                    outtextxy(400,200 ,"the black win");
                    return 1;
                }
                else if(m_bine[i][j] == 1 && m_bine[i+1][j+1] == 1 && m_bine[i+2][j+2] == 1 &&
                        m_bine[i+3][j+3] == 1 && m_bine[i+4][j+4] == 1)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200 ,"the black win");
                    return 1;
                }
                else if(m_bine[i][j+1] == 1 && m_bine[i][j+2] == 1 && m_bine[i][j+3] == 1 &&
                        m_bine[i][j] == 1 && m_bine[i][j+4] == 1)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200,"the black win");
                    return 1;
                }        
                else if(i >= 3 && m_bine[i][j] == 1 && m_bine[i+1][j-1] == 1 && m_bine[i+2][j-2] == 1 &&
                        m_bine[i+3][j-3] == 1 && m_bine[i+4][j-4] == 1)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200 ,"the black win");
                    return 1;
                }
                else if(j >= 3 && m_bine[i][j] == 1 && m_bine[i+1][j-1] == 1 && m_bine[i+2][j-2] == 1 &&
                        m_bine[i+3][j-3] == 1 && m_bine[i+4][j-4] == 1)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200 ,"the black win");
                    return 1;
                }
                else if(m_bine[i][j] == 2 && m_bine[i+1][j] == 2 && m_bine[i+2][j] == 2 &&
                        m_bine[i+3][j] == 2 && m_bine[i+4][j] == 2)
                {
                    settextcolor(WHITE);
                    outtextxy(400,200 ,"the  white win");
                    return 1;
                }
                else if(m_bine[i][j] == 2 && m_bine[i+1][j+1] == 2 && m_bine[i+2][j+2] == 2 && 
                        m_bine[i+3][j+3] == 2 && m_bine[i+4][j+4] == 2)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200 ,"the white win");
                    return 1;
                }
                else if(m_bine[i][j+1] == 2 && m_bine[i][j+2] == 2 && m_bine[i][j+3] == 2 && 
                        m_bine[i][j] == 2 && m_bine[i][j+4] == 2)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200,"the white win");
                    return 1;
                }    
                else if(i >= 3 && j > 3 && m_bine[i][j] == 2 && m_bine[i+1][j-1] == 2 && m_bine[i+2][j-2] == 2 && 
                        m_bine[i+3][j-3] == 2 && m_bine[i+4][j-4] == 2)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200 ,"the white win");
                    return 1;
                }
                else if(j >= 3 && m_bine[i][j] == 2 && m_bine[i+1][j-1] == 2 && m_bine[i+2][j-2] == 2 && 
                        m_bine[i+3][j-3] == 2 && m_bine[i+4][j-4] == 2)
                {
                    settextcolor(WHITE);
                    outtextxy(400 ,200 ,"the white win");
                    return 1;
                }
            }
    }
    return 0;
}

/**********************************************/

总结:

这是第一次写博客,实际上不太会写,最早了解到CSDN是在18年的年初吧,当时就想写,但是不仅没有什么能拿得出手的东西,也没有什么经验。现在放了暑假看到很多同学都在写博客,而且很有深度,觉得自己不能在荒废下去,也要开始努力了。后期的计划是尽可能一周写一次博客,以技术为主,并总结一周的进步。希望各位大佬看到的,不管是博客格式方面的,还是技术方面的能多加指正。

c语言实现简单的五子棋游戏相关推荐

  1. 简单五子棋游戏c语言简单,C语言制作简单的五子棋游戏

    原标题:C语言制作简单的五子棋游戏 C语言制作简单的五子棋游戏 学习C语言的人很多,但是用C语言很少,而用来为自己所用,来做游戏的人就更少了,很多人都是跟着学校学习,学校讲到哪就坐到哪,但是以后却还是 ...

  2. 五子棋下法C#语言,C#实现简单的五子棋游戏

    最近利用业余时间写了一个简单的五子棋游戏,没有利用深层次的面向对象技术,自学一年,代码和程序设计有不妥之处,还望大神指出,先看下实现的功能,三个button按钮,黑棋和白棋选择先出,和重置. 其他的不 ...

  3. VUE+Canvas实现简单的五子棋游戏

    之前的canvas小游戏系列欢迎大家戳: <VUE实现一个Flappy Bird~~~> <VUE+Canvas实现上吊火柴人猜单词游戏> <VUE+Canvas 实现桌 ...

  4. 小球弹跳c语言实现实验报告,C语言实现简单弹跳球游戏

    本文实例为大家分享了C语言实现弹跳球游戏的具体代码,供大家参考,具体内容如下 #include #include int main() { // 球的坐标 int pos_x,pos_y; //球坐标 ...

  5. 用74l138实现一个一位全减器_用pygame实现一个简单的五子棋游戏

    准备 python基础相关准备: pygame的基础知识,参考目光博客的"用Python和Pygame写游戏-从入门到精通" 安装python 3.8.0 在python官网下载, ...

  6. c语言编简单博弈小游戏,[2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏.doc...

    [2018年最新整理]实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏 实验二:利用α-β搜索过程的博弈树搜索算法编写一字棋游戏 一.实验目的与要求 (1)了解极大极小算法的原理和使用方法,并 ...

  7. 【C语言】简单的飞机游戏

    目录 0.游戏展示 1.生成一个简单的可移动飞机 1.1打印飞机 1.2移动飞机 1.3 getch函数 2.发射子弹

  8. C语言实现简单的五子棋代码

    #define _CRT_SECURE_NO_WARNINGS // VS2013添加这个宏,关闭C4996报错 #include <stdio.h>#define N 16 // 定义棋 ...

  9. 【C语言】简单三子棋游戏/井字棋游戏

    基本实现思路: 写出棋盘界面 通过二维数组来编辑棋子 玩家下棋/电脑下棋(随机) 输赢/平局的判断 在程序中,新建出两个源文件:"test.c" 和 "game.c&qu ...

最新文章

  1. 解耦的故事(一)-tmfc的开关(转)
  2. 分布式协调组件ZooKeeper的技术理论剖析-综合组件环境实战
  3. using(别名)和range based for
  4. P4093-[HEOI2016/TJOI2016]序列【CDQ分治,树状数组】
  5. 人到了中年在职场中就应该保持内敛的心态
  6. oracle忽略损坏表空间,Oracle表空间文件损坏后的排查及解决
  7. aria-hidden读屏
  8. 《Python 学习手册4th》 第十六章 函数基础
  9. spring源码:idea搭建源码环境
  10. Ubuntu18.04下隐藏桌面硬盘图标
  11. SSM框架介绍以及功能原理
  12. java经典错误语句_【Java】Java代码经典错误清单
  13. TeamViewer远程控制
  14. 答案原文翻译及解析《避凶就吉精明鬼,千变万化心不变》是指什么意思?
  15. 软碟通UltraISO Premium Edition_v9.7.5.3716,轻松编辑光盘镜像文件,将文件/文件夹制作成ISO文件
  16. 程序员如何用高逼格科学把妹法则
  17. java实验三正式报告
  18. 计算机网络工程职业学院,湖南网络工程职业学院理工学院
  19. python语言程序设计 陈东_程序设计导论python语言实践学习笔记2
  20. SWFObject参数,SWFObject使用方法

热门文章

  1. 在php中将Unicode字符转成中文
  2. AlexNet神经网络结构
  3. CSS选择器优先级(特异性)
  4. uni-app,文本实现展开、收起全文
  5. UITextField默认输入法不是简体拼音的问题的解决方法
  6. ES6学习笔记2:字符串的repeat()方法
  7. 利用向量组证明矩阵的秩不等式
  8. oracle--游标
  9. 层压结构及参数(PCB板层厚度)收集
  10. python 概率分布函数_如何在Python中实现这五类强大的概率分布