电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者维修技术家电维修单元电路介绍其它电路基于ARM和WinSock的多人对战游戏平台设计

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

09-08 11:42:43 | http://www.5idzw.com | 其它电路 | 人气:895
标签:电路设计,http://www.5idzw.com 基于ARM和WinSock的多人对战游戏平台设计,http://www.5idzw.com

    摘要:具有多机互联对战功能的开放式便携游戏机具有广阔的应用价值和深远的发展空间。以SAMSUNG公司基于ARM920T的处理器S3C2410为核心,嵌入WinCE 5.0操作系统,在VS2008开发环境下创建智能设备MFC工程,并将在Win32环境下开发的单人/双人五子棋游戏进行代码移植,最终在ARM开发板上成功运行游戏。游戏开发基于Windows Sockets网络鳊程,能够实现ARM板与PC、ARM板与ARM板之间的游戏对战,可利用以太网接口互联,也可以通过无线局域网互联。该文以五子棋游戏为例,详述了硬件构建、游戏开发及移植的整个过程,极具借鉴价值。
    关键词:ARM处理器;WinCE5.0操作系统;网络鳊程;代码移植

    游戏不仅能开发人的智力,使人头脑反应灵敏,还能满足人的精神需求(如冒险、创造力、情感等),极具娱乐性和趣味性,深受人们的喜爱。随着消费类电子产业的蓬勃发展,越来越多的嵌入式电子产品走进了千家万户,催生出了诸如GBA(Game Boy Advance)、PSP(Play-Station Portabk)以及最近才在我国上市的iPad等一大批专业的并且销量惊人的明星级移动娱乐游戏设备。
    然而上述游戏平台通常造价昂贵,且不具有开放性。例如备受推崇的PSP,开发授权问题和昂贵的专用开发套件(软硬件)使得PSP游戏的开发门槛很高。这在很大程度上限制了这些游戏平台的普及。如果利用通用的处理器和常用的嵌入式操作系统(如WinCE、Linux等)构建一种基于以太网或者无线以太网的便携式的游戏机。则可以吸引大量熟悉C/C++嵌入式编程的工程师或发烧友制作出各种精彩的游戏,这必将极大地推动这种游戏平台的普及。而且将平台进行功能裁剪和批量生产后成本较低,对于中低收入人群来说将是极佳选择,市场潜力无穷。
    本文详述了这种游戏平台的硬件构建、互联对战游戏开发框架和流程,以及从Win32到WinCE进行代码移植的整个开发过程,并记录了开发过程中积累的经验,具有很高的借鉴价值。

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

a.JPG


    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所示。

b.JPG


    TCP协议是面向连接的网络协议,它的连接步骤较多,而且当检测到数据包丢失或错误时,会要求发送端重新发送,这样一来就不可避免地引起了传输延时。
    UDP协议面向无连接服务,每个分组都携带有完整的目的地址,操作简单,且无传输延迟,比较适合要求不高的游戏通信。它的通信时序如图3所示。

c.JPG

www.5idzw.com
2.2 应用程序接口函数
    1)加载套接字库AfxSocketlnit()
    布尔型,参数缺省值为NULL,在程序结束前自动调用WSACleanup清除套接字。
    2)创建套接字socket()
    用于创建指定类型的套接字,流式(TCP协议)SOCK_STREAM或数据报式(UDP协议)SOCK_DGRAM。
    3)绑定本地地址bind()
    将套接字地址(包括本地主机地址和本地端口地址)与所创建的套接字号联系起来,即将名字赋予套接字,以指定本地半相关。
    4)接收recvfrom()
    在套接字指定的已连接的数据报或流套接字上接收输入数据。
    5)发送sendto()
    在套接字指定的已连接的数据报或流套接字上发送输出数据。

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

d.JPG


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

e.JPG

www.5idzw.com
    对于某些步骤需要作详细说明:
f.JPG
    3)判断游戏是否结束
    在Doc类中定义私有性质的成员变量int state[15][10];,用于记录棋盘上每一格的状态:无棋(值为0)、用户方棋(值为1)、电脑方棋(值为2),初始值是0。游戏过程中,某一方落棋后立即给state数组对应成员赋值,下标可由鼠标左键消息响应函数的CPoint point参数转换而来。
    对于棋盘上每一个坐标点(i,j),沿东西、南北、东南西北、东北西南四个方向扫描五个沿途点的状态值,若发现五个相同状态相连,则该状态(用户方或电脑方)的棋手获胜,游戏结束。

[1] [2]  下一页

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