基于ARM的多人对战游戏平台

对于单人五子棋游戏,即人机对战,只需要一个应用程序。当用户鼠标左击棋盘时,程序先在相应位置处画棋子,然后执行电脑方策略,实现对战。
对于双人五子棋游戏,则需要先运行一个服务器端程序,然后两个用户分别运行一个客户端程序,并与此服务器相连。游戏进行过程中,由服务器执行游戏策略,客户端程序只负责采集鼠标信息和显示棋子。我们让用户A在游戏平台A上运行服务器端程序,紧接着运行客户端程序,并与服务器建立Socket连接;然后告诉用户B服务器的IP地址,让其在平台B上运行客户端程序,并与服务器建立Socket连接;连接成功后就可以开始游戏了。
3.2 单人游戏
建立MFC工程,选择创建单文档类型的应用程序。添加对话框资源用于选择游戏模式,并在View类构造函数中DoModal()。
进入单人模式后的程序开发流程如图5所示。

对于某些步骤需要作详细说明:

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();
在对话框上画两个按钮控件:“连接用户”和“开始游戏”。
评论