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

发布者:智慧启迪最新更新时间:2013-10-26 来源: 21ic关键字:ARM  WinSock  游戏平台 手机看文章 扫描二维码
随时随地手机看文章
游戏不仅能开发人的智力,使人头脑反应灵敏,还能满足人的精神需求(如冒险、创造力、情感等),极具娱乐性和趣味性,深受人们的喜爱。随着消费类电子产业的蓬勃发展,越来越多的嵌入式电子产品走进了千家万户,催生出了诸如GBA(Game Boy Advance)、PSP(Play-Station Portabk)以及最近才在我国上市的iPad等一大批专业的并且销量惊人的明星级移动娱乐游戏设备。

然而上述游戏平台通常造价昂贵,且不具有开放性。例如备受推崇的PSP,开发授权问题和昂贵的专用开发套件(软硬件)使得PSP游戏的开发门槛很高。这在很大程度上限制了这些游戏平台的普及。如果利用通用的处理器和常用的嵌入式操作系统(如WinCE、Linux等)构建一种基于以太网或者无线以太网的便携式的游戏机。则可以吸引大量熟悉C/C++嵌入式编程的工程师或发烧友制作出各种精彩的游戏,这必将极大地推动这种游戏平台的普及。而且将平台进行功能裁剪和批量生产后成本较低,对于中低收入人群来说将是极佳选择,市场潜力无穷。

本文详述了这种游戏平台的硬件构建、互联对战游戏开发框架和流程,以及从Win32到WinCE进行代码移植的整个开发过程,并记录了开发过程中积累的经验,具有很高的借鉴价值。

1 硬件平台

硬件平台架构如图1所示。

S3C2410是Samsung公司推出的16/32位RISC处理器,为手持设备和一般类型应用提供了低价格、低功耗、高性能小型微控制器的解决方案。

S3C2410采用了ARM920T内核,0.18μm工艺的CMOS标准宏单元和存储器单元。它的低功耗、精简和出色的全静态设计特别适用于对低成本和功耗敏感的应用。ARM920T实现了MMU,AMBA BUS和Harvard高速缓冲体系结构。这一结构具有独立的16 kB的指令Cache和16 kB数据Cache,每个都由8字长的行构成。

2 套接字编程

2.1 WinSock基础

WinSock是Windows Sockets的缩写,是Windows环境下广泛应用的、开放的、支持多种协议的网络编程接口规范。这里主要使用TCP/IP协议族实现通信。

基于TCP/IP的套接字有流式套接字(SOCK_STREAM)、数据报式套接字(SOCK_DGRAM)、原始式套接字(SOCK_RAW)3种类型,如图2所示。

TCP协议是面向连接的网络协议,它的连接步骤较多,而且当检测到数据包丢失或错误时,会要求发送端重新发送,这样一来就不可避免地引起了传输延时。

UDP协议面向无连接服务,每个分组都携带有完整的目的地址,操作简单,且无传输延迟,比较适合要求不高的游戏通信。它的通信时序如图3所示。

2.2 应用程序接口函数

1)加载套接字库AfxSocketlnit()

布尔型,参数缺省值为NULL,在程序结束前自动调用WSACleanup清除套接字。

2)创建套接字socket()

用于创建指定类型的套接字,流式(TCP协议)SOCK_STREAM或数据报式(UDP协议)SOCK_DGRAM。[page]

3)绑定本地地址bind()

将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。

4)接收recvfrom()

在套接字指定的已连接的数据报或流套接字上接收输入数据。

5)发送sendto()

在套接字指定的已连接的数据报或流套接字上发送输出数据。

3 Win32下五子棋程序设计

3.1 游戏设计思路

游戏开始前有一系列引导步骤,让用户选择游戏模式,并作相应的初始连接,如图4所示。这些引导步骤可通过添加一系列对话框资源来实现。完成之后进入选择的游戏模式。

对于单人五子棋游戏,即人机对战,只需要一个应用程序。当用户鼠标左击棋盘时,程序先在相应位置处画棋子,然后执行电脑方策略,实现对战。

对于双人五子棋游戏,则需要先运行一个服务器端程序,然后两个用户分别运行一个客户端程序,并与此服务器相连。游戏进行过程中,由服务器执行游戏策略,客户端程序只负责采集鼠标信息和显示棋子。我们让用户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),沿东西、南北、东南西北、东北西南四个方向扫描五个沿途点的状态值,若发现五个相同状态相连,则该状态(用户方或电脑方)的棋手获胜,游戏结束。[page]

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类的成员来实现功能。[page]

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)运行游戏

利用同步软件Microsoft AcfiveSync将开发的WinCE5.0下游戏程序传到ARM平台中,即可在上面运行。

5.2 ARM板与ARM板连接

与上述过程类同。

6 结论

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

关键字:ARM  WinSock  游戏平台 引用地址:基于ARM和WinSock的多人对战游戏平台设计

上一篇:ARM9微控制器的软硬件平台设计
下一篇:基于CMSIS标准的Cortex-M3的应用软件开发

推荐阅读最新更新时间:2024-03-16 13:29

多工业应用理想选择,研华NXP i.MX8 ARM核心模块问市
NXP i.MX 8 系列 SOC 是 NXP 的首款 64 位 ARMv8处理器,最大支持 6 个 Cortex™-A 内核和 2 个 Cortex™-M4 内核。新颖强悍的硬件设计,i.MX 8 系列产品能够提供高性能的图像处理能力和显示性能,为此研华全新推出两款产品,分别是i.MX8M ROM-5720 SMARC 模块和i.MX8 QuadMax ROM-7720 Qseven 模块,为AI、机械视觉、医疗成像、图像处理等工业应用提供理想选择。 ROM-5720是一款搭载 NXP ARM® CortexTM-A53 i.MX8M 处理器的 SMARC 2.0 核心模块,功耗低,显示性能出众,支持 HDMI 2.0
[嵌入式]
多工业应用理想选择,研华NXP i.MX8 <font color='red'>ARM</font>核心模块问市
一文教你如何区别ARM Cortex系列处理器
众所周知,英国的ARM公司是嵌入式微处理器世界当中的佼佼者。ARM一直以来都是自己研发微处理器内核架构,然后将这些架构的知识产权授权给各个芯片厂商,精简的CPU架构,高效的处理能力以及成功的商业模式让ARM公司获得了巨大的成功,使它迅速占据了32位嵌入式微处理器的大部分市场份额。 目前,随着对嵌入式系统的要求越来越高,作为其核心的嵌入式微处理器的综合性能也受到日益严峻的考验,现在一个高端智能手机的处理能力几乎可以和几年前的笔记本电脑相当。为了迎合市场的需求,ARM公司也在加紧研发他们最新的 ARM架构,Cortex系列就是这样的产品。那么我们今天就不妨好好了解一下ARM Cortex系列处理器知识点汇总。 ARM Cort
[单片机]
一文教你如何区别<font color='red'>ARM</font> Cortex系列处理器
ARM+Linux嵌入式系统的BootLoader设计
由Boot Loader和固化在固件(firmware)中的Boot代码(可选)共同组成一个嵌入式系统的引导加载程序。它的作用和功能就像固化到计算机内主板上的一个ROM芯片程序BIOS(basIC input output system)。但是它一般不配置像BIOS那样的固件程序,这是因为要考虑经济方面的原因,因此必须自己完成这方面的工作。Boot Loader可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。它的实现严重地依赖于硬件,特别是在嵌入式系统中,即使基于同一个CPU的Boot Loader,对于不同的板子,也有很大的不同。   1
[单片机]
<font color='red'>ARM</font>+Linux嵌入式系统的BootLoader设计
交叉编译并移植opencv3.0.0到arm
问题 项目需求,交叉编译opencv,并移植到arm中。 在opencv2.0以上的版本编译都要借助于cmake工具生成Makefile 2.0一下版本才是使用configure生成Makefile 请确保宿主机已经安装cmake和cmake-gui工具,如果请自行安装 sudo apt-get install cmake cmake-qt-gui cmake-curses-gui 开发环境 开宿主机:Fedora9.0 交叉编译器:友善之臂arm-linux-gcc4.4.3 自动化编译工具: cmake version 2.8.12.2 编译 下载opencv源代码 项目官网:http://opencv.org
[单片机]
交叉编译并移植opencv3.0.0到<font color='red'>arm</font>板
英特尔挑战ARM智慧手机市场主导地位
    经过多年的整军经武,英特尔公司(Intel)即将瞄准手机市场展开出击。 在未来几个星期内,第一批支援英特尔 处理器 的 智慧型手机 将会上市,准备好与采用ARM公司IP架构的手机设备展开一场激烈的市占率争夺战。     英特尔为了这一刻的来临已经花了多年的时间准备了。 元件采购业务相关领域将仔细研究其于第二季的财报结果,以确认产品的表现如何,以及该公司是否能够打入这个炙手可热但竞争激烈的领域。 尽管采用ARM架构的设备已在手机市场占有主导地位,但随着PC发展达到高峰,带动对于行动设备领域的市场需求攀升,也就不难理解为什英特尔会将未来的下注在这些产品的成功上市。     但可别急着为英
[手机便携]
富士通发布基于ARM Cortex-M3的FM3系列52款32bit的MCU
   富士通半导体(上海)有限公司宣布发布52款采用ARM® Cortex™-M3内核的32bit RISC FM3系列产品,包括MB9A310系列的MB9AF316NBGL以及 MB9A110系列的MB9AF116NBGL等产品。目前,该系列产品已经开始提供样品。   MB9A310和MB9A110系列是高性价比、低功耗产品,主要应用于家电变频器控制、打印机马达控制、复印机等设备。   富士通FM3  系列产品基于长期的以ARM® 为内核的ASIC产品生产以及广受市场认可的32bit FR产品的设计经验再次推出了52款FM3 ARM® Cortex™-M3产品,更加丰富了富士通FM3产品家族,包括高性能、基本产品两大系列96款
[工业控制]
从 2017 Arm 技术研讨会看两大技术趋势
  “ 我们正目睹着网络攻击在关键的基础设施领域、医疗健康服务领域轮番上演,大笔赎金将我们压榨到喘不过气。而家用电子设备是黑客作案的一个入口,作为一个行业,我们正站在一个十字路口,一条路是令人惊慌失措且代价不菲的猫鼠游戏,飞速的技术不断带来破坏同时又不断地进行修补。另一边,则是一条被诸多共同信仰照亮的全新道路。 我们在不断拓宽这个互联世界的同时,必须唤起信任 任何一家公司都要遵守与用户达成的社会契约 安全是行业的集体责任,既是机遇,又是挑战 先进的安全智能应该分布到整个物联网行业 安全必须是设计的首要考量因素,同时还要提供持久的防护 我们必须建立安全体系,解决人类的潜在风险 ”
[嵌入式]
从 2017 <font color='red'>Arm</font> 技术研讨会看两大技术趋势
基于ARM核的ADμC7O26硬件系统开发及其在医疗仪器中的应用
0 引言 随着人们生活水平的不断提高,人们对于自身健康的关注也提升到一个前所未有的高度。在今天,越来越多的高科技手段开始运用到医疗仪器的设计当中。心电图、脑电图等生理参数检测设备,各类型的监护仪器,超声波、X射线成影设备,核磁共振仪器,以及各式各样的物理治疗仪都开始在各地医院广泛使用,并且医学仪器正在向着组合式、多功能、智能化和微型化方向发展。现代的医学仪器一般都广泛采用了嵌入式微处理器来增强仪器的智能化程度,提高其稳定性和数据处理的精确性,使医学信号的采集、处理、通信一体化,并具有自诊断、自校验等一系列优点。其中ARM(Advanced RISC Machines)嵌入式微型主板作为中央处理模块,凭借自身体积小巧、功能强大、
[单片机]
基于<font color='red'>ARM</font>核的ADμC7O26硬件系统开发及其在医疗仪器中的应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved