新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于ARM和WinSock的多人对战游戏平台设计

基于ARM和WinSock的多人对战游戏平台设计

作者:时间:2011-07-15来源:网络收藏

i.JPG


对于某些步骤需要作详细说明:
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所示。

j.JPG



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与板连接
1)连接
通过网线相连,然后指定网关地址和IP地址。指定方法如下:本地连接一>点右键看属性—>双击“Internet协议(TCP/IP)”一>使用下面的IP地址,自己填写即可。特别注意,当两台机器直接用网线相连而不使用路由器时,必须同一个网关才可实现数据交换。可通过ping命令测试网络是否连通。
2)运行游戏
利用同步软件Microsoft AcfiveSync将开发的WinCE5.0下游戏程序传到平台中,即可在上面运行。
5.2 板与ARM板连接
与上述过程类同。

6 结论
经实际操作验证,这种游戏开发方式(多线程)使得资源占用率很低,S3C2410处理器完全可以胜任,整个游戏运行流畅。游戏平台可以通过有线方式互联,也可以通过无线方式互联,操作简单,使用方便。而且这种游戏平台具有很高的开放性,利用上述的开发框架可以轻易开发出更多更好玩的游戏。


上一页 1 2 3 4 下一页

评论


相关推荐

技术专区

关闭