微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于ARM的多人对战游戏平台

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

时间:12-04 来源:互联网 点击:

点(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)开辟线程

  如果让服务器一直recvfrom(),则主线程将一直执行此函数,造成消息拥堵,从而导致其他事件难以响应,因此选择开辟新线程在后台接收客户端信息,合理分配系统资源。

  开辟线程的过程如下:

  ①定义要传送给线程的全局性质的结构体RECVPARAM,成员为Dlg类指针类型变量。

  ②定义RECVPARAM结构体变量pRecvParam,并把当前工程的Dlg类指针赋给其成员;创建线程,把pRecvParam传递给线程;然后关闭线程。

  ③在线程回调函数中接收传递来的变量pRecvParam,然后就可以调用Dlg类的成员来实现功能。

  2)信息格式

  ①客户端连接信息

  格式随意的字符串,目的是让服务器端接收到数据,从而发现客户端IP地址。我们发的是“0000”。

  ②客户端下棋信息

  信息格式:用户标识(1位)、落子横坐标(2位)、落子纵坐标(2位)。

  其中,用户标识位1代表先手(白方),0代表后手(黑方)。

  ③服务器端发送信息

  指导客户端画棋子以及显示状态。

  信息格式:用户标识(1位)、落子横坐标(2位)、落子纵坐标(2位)、游戏状态(1位)。

  其中,前5位与从客户端接收的相同:游戏状态位1表示游戏结束,0表示游戏未结束。

  3.3.2 客户端程序

  创建基于单文档的MFC工程。

  在App类的BOOL InitInstance()中加载套接字库:AfxSocketInit();

  添加对话框资源CDlgMode,用于选择游戏模式:

  添加对话框资源CDlgLink,用于连接服务器;并在其上画一个IP地址控件,用于填写服务器IP;在确定按钮的响应函数中初始化套接字socket()、bind(),并向服务器发送连接请求sendto();

  在View类构造函数中将模式选择对话框DoModal(),选择进入双人模式,之后的程序开发流程如图8所示。

  4 代码移植

  4.1 WindowsCE简介

  Windows CE是基于Win32 API重新开发的新型信息设备平台,具有模块化、结构化和基于Win32应用程序接口以及与处理器无关等特点。大量用户对于Windows操作方式和编程的熟悉,是Windows CE作为嵌入式操作系统迅速发展的最大的优势,也是选择的原因。

  4.2 代码移植

  安装WinCE5.0的标准SDK,在VS2008开发环境下创建智能设备的MFC工程,选择基于对话框或单文档的应用程序,并选择刚刚安装的标准SDK平台。工程创建完成后,将在Win32下开发的代码按同样的方式转移过来,然后编译,修改错误。

  WinCE是Unicode环境,尽管WinCE支持ASCII功能来进行文件交换,但是WinCE的本地文件格式是Unicode。所以,要将字符串转换为UmcMe才能使用。另外就是代码移植过程中丢三落四的粗心错误。以下列举代码移植过程中遇到的问题及解决方法:

  1)某些函数发生变化,不再识别ASCII码字符或字符串,例如MessageBox,其字符串参数必须经_T(“”)转换成Unicode;另外Cstring类不要轻易使用;

  2)某些功能使用不同函数,例如整型转字符串型,由函数itoa变为_itoa_s;

  3)智能设备项目中没有IP地址控件,用编辑框代替,多了些字符串拼接、转换的工作;

  4)不要忘了使客户端与服务器端的端口号保持一致。

  5 硬件调试及结果

  5.1 PC与arm板连接

  1)平台连接

  通过网线相连,然后指定网关地址和IP地址。指定方法如下:本地连接一>点右键看属性—>双击“Internet协议(TCP/IP)”一>使用下面的IP地址,自己填写即可。特别注意,当两台机器直接用网线相连而不使用路由器时,必须同一个网关才可实现数据交换。可通过ping命令测试网络是否连通。

  2)运行游戏

利用同步

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top