五子棋游戏
在VC++环境创建MFC单文档应用程序Fivechess,其他选项默认。进行如下操作,并运行。
1.制作棋盘
(1)在”FivechessView.h”头文件中定义一个用于显示棋盘的自定义公有函数。如下图:
(2)在FivechessView.cpp中实现上述函数,如下图:
(3)在CFivechessView类的OnDraw()函数中调用画棋盘函数。如下图:
2.约束下棋过程。本例中使用鼠标左键和右键来区别下“黑棋”还是“白棋”,用左“黑”右“白”来表示两个不同的人在下棋。
(1)为CFivechessView类添加消息处理函数WM_LBUTTONDOWNWM_RBUTTONDOWN,并写入如下代码:
和
(2)到目前为止,这个“五子棋”游戏有两个缺陷:①没有遵守轮流下棋规则:如鼠标左键或右键可以持续下棋;②没有遵守一个格子只可以下一次棋的规则:如已经有黑色棋子的格子,还能持续放入白色或黑色的棋子。
第1个缺陷解决方案:使用一个变量,初始化为0,判断该变量,当变量值为0时,可以允许接受鼠标左键单击的消息函数中的绘制处理,绘制完毕,该变量变为1;当变量值为1时,可以允许接收鼠标右键单击的消息函数中的绘制处理,绘制完毕,该变量又变为0。具体操作如下:
a.在”FivechessView.h”头文件中定义一个公有的整型变量RightORLeft 。
b.在CFivechessView类的构造函数中将变量RightORLeft初始化为0,如下图:
c.修改鼠标左键和右键的消息处理函数,在画棋子之前先判断现在是轮到哪方下棋。
第2个缺陷解决方案:可以使用一个向量或数组记录已经放置好的棋子的中心位置,如果新下的棋子在该向量或数组中找到系统已经记录的该点,则该次棋不能下,只能选择其他方格下。具体操作如下:
a.在”FivechessView.h”头文件中加入3行公有代码,并包含#include b.为CFivechessView类新增两个自定义函数bool isLocation(CPoint cp)和void Location(CPoint cp)。代码如下: c. 修改鼠标左键和右键的消息处理函数,注意“鼠标状态变量RightORLeft”的位置有所改变。 (3)判断输赢 五子棋游戏规则是这样的:若某一方(黑棋或白棋)在同一行、同一列或同一斜线上具有连续5个同色棋子,则拥有该颜色棋子的那方就取得胜利。因此,可以使用一个整型二维数组来记录当前棋局的情况。二维数组的值定义为: 0:表示该位置没有棋子。 1:表示该位置已经放置了黑色棋子。 2:表示该位置已经放置了白色棋子。 二维数组的空间大小可以设置为20×20,因为棋盘为20行20列,方格总数目为400个。(总长1000,每个方格占50,1000/50=20) 具体操作过程如下: a.在”FivechessView.h”头文件中定义一个公有的整型数组chessArr[20][20]。 b.在CFivechessView类的构造函数中将整型数组初始化为0,代码如下: c. 为 CFivechessView 类新增一个判断是否获胜的函数 bool CFivechessView::isWin(CPoint cp),先在”FivechessView.h”头文件中添加该函数的定义: 然后在FivechessView.cpp中输入如下代码: 注意:该函数代码较为复杂,请细心检查。 d.现在只需在鼠标消息处理函数适当位置插入判断是否赢棋函数即可,即每下一步棋子,都会以该棋子为基准,作出判断。鼠标左键右键消息修改如下: 到此为止,五子棋游戏就开发完毕,可以试试自己开发的游戏了! 因篇幅问题不能全部显示,请点此查看更多更全内容