源代码:

/**************************************************************
** 文 件 名: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;
}

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

操作说明:

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

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

感想:该程序运用了C语言和esayx库的相关代码,实现了黑白棋的交错落子和悔棋功能,出现五子可以自动进行游戏胜负结算,并且可以快速进入下一句的游戏。

Leo-io 的C语言实现简单五子棋游戏观后感的更多相关文章

  1. 用Java写的简单五子棋游戏(原创五子连珠算法)

    源码jar包(已安装jdk环境可直接运行) 下载地址:http://download.csdn.net/detail/eguid_1/9532912 五子连珠算法为自创算法,对于五子棋该算法性能足以. ...

  2. C++的简单“五子棋”游戏,只是核心代码,资源代码未添加

    ChessBoard.h #ifndef __CHESS_BOARD_H__ #define __CHESS_BOARD_H__ #include "DataStruct.h" # ...

  3. 用c语言实现简单的五子棋

    用c语言实现简单的五子棋 这个小游戏是从零开始的实现的,框架灵感来自于小游戏<走迷宫>. 游戏代码配置: 二维数组+简单逻辑+getch读取键盘+windows函数(刷屏,改颜色,改窗口大 ...

  4. 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

    使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...

  5. 李洪强漫谈iOS开发[C语言-042]-简单计算器

    李洪强漫谈iOS开发[C语言-042]-简单计算器

  6. 谁说C语言很简单?

    前两天,Neo写了一篇<语言的歧义>其使用C语言讨论了一些语言的歧义.大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西. 是的,C语言并不简单,让我们来看看 ...

  7. Linux 用C语言实现简单的shell(2)

    不知不觉两周没有发文了,因为“一万美金的福特奖学金答辩”,ACM比赛,网络论文阅读和网络大作业一大堆事把时间冲散了,所以先写一篇博文补上之前一坑. 之前发了一篇关于linux 用C语言实现简单shel ...

  8. Java语言实现简单FTP软件------>FTP软件主界面的实现(四)

    首先看一下该软件的整体代码框架                        1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; im ...

  9. Java语言实现简单FTP软件------>源码放送(十三)

    Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件----- ...

随机推荐

  1. Selenium运用-漫画批量下载

    今天我们要爬去的网站是http://comic.sfacg.com/.漫画网站一般都是通过JavaScript和AJAX来动态加载漫画的,这也就意味着想通过原来爬取静态网站的方式去下载漫画是不可能的, ...

  2. springMvc 核心配置

    <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.spr ...

  3. 洛谷P2173 [ZJOI2012]网络(10棵lct与瞎jb暴力)

    有一个无向图G,每个点有个权值,每条边有一个颜色.这个无向图满足以下两个条件: 对于任意节点连出去的边中,相同颜色的边不超过两条. 图中不存在同色的环,同色的环指相同颜色的边构成的环. 在这个图上,你 ...

  4. C#中使用Redis学习二 在.NET4.5中使用redis hash操作

    上一篇>> 摘要 上一篇讲述了安装redis客户端和服务器端,也大体地介绍了一下redis.本篇着重讲解.NET4.0 和 .NET4.5中如何使用redis和C# redis操作哈希表. ...

  5. vmware开发包之vSphere Management SDK

    vSphere Management SDK关于vmware管理等相关功能的.net和java的代码示例. 在其5.5的解压包中 eam:esx agent management表示esx虚机生产环境 ...

  6. Python 串口通信 GUI 开发

    在项目中遇到树莓派串口通信问题.由于本人一直从事.net 开发,希望将树莓派系统换成Win10 IOT版.但是在测试过程中出现无法找到串口的问题.最终也没有解决.最终按照领导要求,linux (了解不 ...

  7. 把windows电脑变成路由器使用

    实用小技巧1 把windows电脑变成路由器使用 适用对象: windows7.windows8的笔记本电脑或者有无线网卡的台式电脑 网络要求: CMCC-EDU和家里拨号上网的都可以,但是电信的校园 ...

  8. ML.NET---.NET下的机器学习引擎(简介)

    ML.NET 是一个跨平台的开源机器学习框架,它可以使 .NET 开发人员更容易的开展机器学习工作. ML.NET 允许 .NET 开发人员开发自己的模型,即使没有机器学习的开发经验,也可以很容易的将 ...

  9. C# Redis辅助类封装与简单聊天室的实现思路说明

    虽然redis api的功能比较齐全,但个人觉得为了更好的方便学习和使用,还是很有必有做一个类似DBHelper的帮助类 辅助类主要功能(代码会在最后放出来) 1. 事件监听: 重新配置广播时(主从同 ...

  10. 快速排序 java实现 (原理-优化) 三路快排

    一.基本的快速排序 在数组中选取一个元素为基点,然后想办法把这个基点元素移动到它在排好序后的最终位置,使得新数组中在这个基点之前的元素都小于这个基点,而之后的元素都大于这个基点,然后再对前后两部分数组 ...