对于某些步骤需要作详细说明:
3)判断游戏是否结束
在Doc类中定义私有性质的成员变量int state[15][10];,用于记录棋盘上每一格的状态:无棋(值为0)、用户方棋(值为1)、电脑方棋(值为2),初始值是0。游戏过程中,某一方落棋后立即给state数组对应成员赋值,下标可由鼠标左键消息响应函数的CPoint point参数转换而来。
对于棋盘上每一个坐标点(i,j),沿东西、南北、东南西北、东北西南四个方向扫描五个沿途点的状态值,若发现五个相同状态相连,则该状态(用户方或电脑方)的棋手获胜,游戏结束。
4)电脑方下棋策略
对于棋盘上每一个坐标点(i,j),扫描它的状态值state[i][j],一经发现不为0,就以此点为起点,沿东、南、西、北、东南、西南、东北、西北8个方向搜索5个棋位。
事先定义针对每个点、每个方向的8个整型数组(初始值赋为0):
对于坐标点(i,j),搜索过程中若遇到具有相同状态的点(m,n),则对应方向数组的[i][j]成员的值增加,遇到不同状态点则减小。保存8个中绝对值最大的。
上述操作完后,比较所有点存的值,绝对值最大的说明以该点起始的某个方向己方棋子相连较多,或者对方棋子相连较多,最适合落子。
3.3 双人游戏
从游戏开始到结束,客户端与服务器的交互过程如图6所示。
3.3.1 服务器端程序
创建基于对话框的MFC工程。
在App类的BOOL InitInstance()中加载套接字库:AfxSocketInit();
在Dlg类的BOOL OnInitDialog()中初始化套接字,包括新建和绑定套接字:socket()、bind();
在对话框上画两个按钮控件:“连接用户”和“开始游戏”。
开发流程如图7所示。
上一页 [1] [2] [3] [4] 下一页