资源描述
跨平台多人在线游戏平台设计摘要:英特网于90年代成为发展最快的传播媒介,是当今世界上最大的信息网络。在传统桌面平台因特网用户数量稳步上升的同时,使用手持设备登录英特网的用户正在以10年内5倍增长的速度快速上升。英特网终将成为连接传统桌面平台与新兴手持设备平台的纽带。本课题以英特网为桥梁、以基于Java的跨平台技术为基础、以跨平台多人在线游戏系统为形式,构造一个通用的三层结构的跨平台多人网络游戏平台结构,并且对其在其它领域(比如,跨平台数据查询系统,跨平台电子商务)的应用做出一定的探索。本文阐述了跨平台多人在线游戏平台开发中所涉及的关键技术,解决了跨平台网络通信及对于资源受限的手持设备中所存在的开发难点,确立了跨平台系统中网络通信的解决方案。随着国内无线网络建设的步伐加速、设备制造商对设备性能的提升跨平台多人在线游戏平台将因其平台选择的自由性拥有大量的用户,本课题所提出的跨平台无线网络通信的结构也将会有着广阔应用。关键词:英特网;在线游戏;跨平台;Java;手持设备Design of Cross-platform Multi-player Online Game PlatformAbstract: In 1990s, Internet has become the very medium that is developing most rapidly. Nowadays Internet is the biggest information network in the world. The number of the Internet users with traditional desktops is ascending. In the meantime, the number of users with handsets has achieved quintuple increase. The Internet will become the link which connects traditional desktops and new emerging handsets. This project tries to construct a general three-layer cross-platform network game platform structure which uses the Internet as a bridge, the cross-platform technique based on Java as foundation and the cross-platform online game system as a form, and tries to make survey into the application of it in other realms(for example, cross-platform data search system, cross-platform electronic commerce).The article expatiated upon the key technique involved in the development of a cross-platform online game platform. It has proposed some solution to the difficulties caused by the cross-platform network communication and the limitation of resource of the handsets, established the solution to network correspondence in the cross-platform system. As the development of the domestic wireless network accelerates and the equipment manufacturers promote the capability of these equipments, the cross-platform online game platform will have a large number of users because of its flexibility of platform selection, so the cross-platform wireless network correspondence structure proposed by this author will apply widely.Keywords:Internet; Online-game; Cross-platform; Java; Handset目录1绪论11.1国内外研究现状11.2研究背景和意义22技术背景42.1跨平台技术背景42.1.1.Net简介42.1.2Java简介52.2无线通信技术背景62.2.1GPRS与传统网络连接的性能比较62.2.2GPRS与新兴无线网络连接的性能比较72.3Java ME技术背景72.3.1Java ME与Java SE的关系72.3.2Java ME的结构82.4Servlet技术简要介绍92.5JavaBean技术简要介绍102.6Applet技术简要介绍102.7MySQL简要介绍103本课题基本内容123.1系统基本构架123.1.1客户表现层133.1.2服务逻辑处理层143.1.3后台数据层143.1.4网络连接层和数据连接层143.2系统所实现的游戏153.2.1系统操作流程153.2.2游戏流程163.2.3游戏通信方式183.3手持移动设备端开发183.3.1高级界面编写183.3.2低级界面编写193.4游戏的实现193.4.1游戏逻辑193.4.2游戏界面203.4.3界面与逻辑分离204关键技术研究及实现254.1Java ME中关键编程技术254.1.1MIDlet生命周期254.1.2游戏绘图264.1.3多线程编程284.1.4手持移动设备客户端程序优化294.2手持移动设备与游戏服务器通信的技术与实现334.2.1手持移动设备网络连接的限制334.2.2手持移动设备与服务器的通信方式334.3服务器端关键技术404.3.1Servlet414.3.2JavaBean474.4跨平台客户端实现484.4.1快速构造基于Applet客户端484.4.2快速实现Application客户端494.5本系统在其它领域的可扩展性504.5.1对游戏进行扩充504.5.2对平台进行扩充504.5.3对功能进行扩充514.5.4同时进行多种扩展514.6平台系统发布524.6.1服务器架设524.6.2软件发布525结论与进一步研究方向535.1本课题工作总结535.2本课题进一步研究方向54致谢55参考文献56附录57iv跨平台多人在线游戏平台设计581 绪论网络游戏是依托软件、计算机及互联网技术发展起来的数字娱乐及新兴休闲方式。网游产业作为一个新兴的高技术产业,已经成为同影视、音乐等并驾齐驱的全球最重要的娱乐产业之一,已经显露出巨大的商业价值,成为新的经济增长点。2003年全球网络游戏产业规模达到70多亿美元,占整个游戏市场规模的 24.7%1。与网络游戏蓬勃发展相对应的是手机用户的飞速增长。截止2007年4月,国内移动电话普及率已经达到了35.3 部/百人2。与英特网和手机用户快速增长的情况形成鲜明对比的是,同时运作于传统桌面平台和新兴手持移动设备平台的网络游戏踪迹难觅。本课题所研究的跨平台多人在线游戏平台便是针对这一市场领域和技术领域,形成一种新的网络游戏运作方式与开发方式。1.1 国内外研究现状我国网络游戏产业2000年开始起步,2001年我国网游用户不足400万,2002年就超过800万;2003年达到1380万;2004年完成2025万,同比增长了47%,占互联网用户量21.5%;2000年我国网络游戏市场规模仅为0.38亿元,2003年达到24.3亿元,2004 年我国网游产业规模达到35亿元,同比增长了43.9%。预计到2007年我国互联网用户将达1.4亿,网游用户达4200万,网游产业市场将达到100 亿元,市场前景很好。目前网络游戏产业已成为网络经济及文化娱乐业的重要支撑,同时正带动着相关产业的发展,如:对批发和零售渠道、信息产业及通信运营业的发展、新型信息服务业、国家税收的提高等都有较大的促进作用,我国仅2004年网游就对通信运营业业务收入直接贡献150.7亿人民币,对信息产业直接贡献 63.7亿人民币,对媒体及传统出版业贡献35.8亿人民币1。而在手机游戏方面,近年来手机的性能大大增强并普及使用,手机已成为个人化的移动计算终端,这为手机游戏市场的发展提供了有利条件。据IDC预计,2006年全球手机游戏市场的总值将达170亿美元。目前,市面上的手机游戏绝大部分由游戏开发商提供,普通大众由于缺乏专业的程序开发技能而难以参与手机游戏的开发,只能被动地接受开发商、运营商提供的应用,基于手机的移动游戏市场也因缺乏广泛参与而难以获得更快的发展3。 同时在世界范围内,根据ITU的研究表明3Internet用户和手机用户同时在快速增长,特别是手机用户的增长速度甚至超越了Internet用户的增长速度。从1992年到2001年间,Internet用户和手机用户逐年增长,从未有过下滑的趋势。在1996年的时候,Internet用户不足50,000,000, 手机用户不足100,000,000;到2001年,全球已有Internet用户500, 000,000, 手机用户950,000,000。近年来Internet用户和手机用户的用户增长更是迅速,光2000年到2001年间,Internet用户就增长了100,000,000,手机用户更是增长了200,000,000。在游戏的平台方面,根据IGDA的调查研究4可知占有市场最大份额的是基于网络的PC平台游戏达到了50,000,000以上的用户。在无线通信的游戏方面市场占有率仍然不大,但是增长迅速,在未来五年内将10倍增长。与以上情况形成对比的是:目前市场上暂时尚未发现商业运营的跨平台多人在线游戏。造成这一情况的原因归结为以下几点:1. 移动运营商与网络游戏制造商各自为营,没有达成统一的利益目标。2. 国内移动网络滞后。传统的GPRS提供的带宽十分有限,制约了网络游戏的开发和运行。3. 市场上手机型号繁杂。移动设备游戏和应用的开发过程如不采用跨平台技术,开发成本将大大增加。4. 我国目前的网络游戏市场60% 以上被韩国、日本、美国等国家的产品所占据,中国的网络游戏企业大多数为运营商,缺乏自身的核心技术5。1.2 研究背景和意义近年来,移动通信中的无线网络连接与传统有线网络连接的性能差距正在减小。日、美等发达国家已经成功运营了3G网络6。3G的主要特征是可提供移动宽带多媒体业务,其中高速移动环境下支持144kbit/s 速率,步行和慢速移动环境下支持384kbit/s速率,室内环境支持2Mbit/s速率的数据传输。中国国内在香港等发达地区也已有商业化的3G网络。中国国内其它地区也在加紧面向3G的过渡工作,以更好地召开2008年北京奥运会和2010年上海世博会。网络速度这一手持移动设备网络通信瓶颈的解决将带动移动通信设备功能向多元化、网络化发展,其中必然包括网络游戏。网速的提升必然使手持移动通信设备用户渴望得到与桌面平台一样或者接近于桌面平台的游戏感官。在无线网络通信技术得到发展的同时,手持设备运行环境也在更新换代。MIDP 1.0已经普遍被MIDP 2.0取代。近日,当MIDP 3.0 规范正在制定时MIDP 2.1已经出台。MIDP 2.1规范最终定稿于2006年5月26日。新的MIDP 2.1中对MIDP 2.0作出了若干改进,强制要求硬件商加入了一些功能。Sun公司于2007年2月最新推出的Wireless Tool Kits 2.5(以下简称WTK 2.5)已经支持了最新的MIDP 2.1规范。MIDP 2.1可以被看成是MIDP 3.0出台之前的小试牛刀,也预示着新的MIDP规范下的应用将有一定程度的飞跃。本课题希望能够抓住时代的步伐,在国内无线网络和手持通信设备都将更新换代的时期率先进行跨平台多人在线游戏系统的尝试。本课题旨在架起传统网络游戏和最新的手机游戏的桥梁。以跨平台的形式,将不同平台的游戏玩家联系起来,增大游戏的覆盖面,提高游戏的影响力。通过网络途径使不同地域的游戏玩家互动,在单一的游戏内容中加入沟通的乐趣,加深玩家在游戏中的认同感。在游戏成型后,从中提取出一种新的游戏构架,推广开来,使游戏有新的不同的创作方式和娱乐方式。并且提倡一种绿色游戏的概念,游戏的开发采用开源工具,游戏免费发布,游戏的内容健康积极向上,以休闲益智类型为主。并对成形的三层结构的跨平台多人网络游戏结构进行概括总结,提取出适用其它领域的统一框架。本课题中的游戏的实现基于本平台所实现的三层系统结构。通过对相应功能模块的扩展,本课题的应用将不只局限于游戏应用,更能作为一个多平台的数据库信息系统,实现信息查询、电子商务等功能。希望本课题能对今后的网络游戏开发,特别是跨平台网络游戏的开发起到抛砖引玉的作用。2 技术背景本课题是一个综合性质的软件项目,涵盖内容十分广泛。其中包括了跨平台技术、无线通信技术、Java ME技术、Servlet技术、JavaBean技术、Applet技术以及MySQL技术。以下小节将对这些技术做一简单介绍与总结。2.1 跨平台技术背景当前主流的跨平台环境为微软的.Net和Sun公司的Java。2.1.1 .Net简介Microsoft .Net7既是软件编写方法,又是一套开发实现这些方法的软件的工具。为.Net 编译的应用程序不是被直接编译成本机代码,而是被编译成一种称为 Microsoft 中间语言 (MSIL) 的中间语言。当首次运行一个应用程序时,公共语言运行库实时编译器在程序执行前将 MSIL 代码编译成本机代码。公共语言运行库不是一个简单的JIT编译器,它还负责提供内存回收、异常处理、安全服务、运行时类型安全检查等底层执行服务。由于公共语言运行库在管理执行方面的作用,因此有时将以.Net Framework 为目标的程序称为“托管”应用程序。.Net Framework是一组类,它们用于构建在公共语言运行库上运行的应用程序。这些类库为包括数据访问、安全性、文件IO、XML操作、消息传送、类反射、XML Web Service、ASP.Net 和 Microsoft Windows 服务在内的各种任务提供强大的支持。为了帮助创建兼容 .Net Framework 的语言,Microsoft 设计了公共语言规范 (CLS)。每种语言要使用 .Net Framework 和公共语言运行库,以及与用其他语言编写的组件进行互操作,就必须提供 CLS 所描述的功能。如果一种语言实现了必需的功能,那么它就被称为兼容 .Net。每种兼容 .Net 的语言都支持相同的数据类型,使用相同的 .Net Framework 类,编译为相同的 MSIL,并且使用相同的公共语言运行库管理执行过程。因此,各种兼容 .Net 的语言之间没有优劣之别。开发人员可以自由地为特定的组件选择最好的语言同时又不损失该平台的能力和自由度。另外,使用一种语言编写的组件也能够很容易地与用另外一种语言编写的组件进行互操作。例如,您可以用 C# 编写一个从用 Visual Basic 编写的基类继承而来的类。CLS 已经被提交给 ECMA 进行标准化,以鼓励更多语言开发人员为更多语言创建兼容 .Net 的版本。在撰写本文时有 20 多种兼容 .Net 的语言正在开发中。图 2.1 .Net Framework结构体系图由图2.1可以看到,.Net的目标是“多种语言共享一种平台。即多种语言可以运行在统一的.Net Framework之上,以此达到跨平台的目标。不过遗憾的是,微软官方至今还没有推出适合Windows以外操作系统的.Net Framework。2.1.2 Java简介Java既是一种编程语言,又是一个平台。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码称为字节码可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。可以把Java字节码看作运行在Java虚拟机(Java VM)上的机器代码指令。每种Java解释器,不管是Java开发工具还是可以运行Java小应用程序的Web浏览器,都是一种Java VM的实例。JavaVM也可以由硬件实现。Java字节码使“编写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。平台是程序运行的硬件或软件环境。Java平台与大多数其它平台不同之处在于它是运行于其它基于硬件平台的纯软件平台。大多数其它平台是硬件和操作系统的结合。Java平台由两部分组成: 1. Java虚拟机(Java VM) 2. Java应用程序接口(Java API) 我们已经介绍了Java VM,它是Java平台的基础,可以移植到各种基于硬件的平台上。Java API是软件组件的集合,它们提供了很多有用的功能,如图形用户界面(GUI)。Java API被分组为相关组件的库(包)。图2.2描述了一个运行在Java平台上的Java程序,如应用程序(application)或小应用程序(Applet)。如图2.2中显示的,JavaAPI和VM把Java程序从硬件依赖中分离了出来。图 2.2 Java平台体系结构作为一种独立于平台的环境,Java比本地代码慢一些。然而,智能的编译器、很好地调制过的解释器和即时字节码编译器可以在不牺牲可移植性的条件下使Java的表现接近本地代码。由此可见Java 的理想目标是“在多种平台上使用一种语言。即使用Java语言编写的程序能够在所有支持JVM的操作系统中运行。2.2 无线通信技术背景传统的GSM网络仅能支持9.6Kbit/s速率的数据传输业务,这远远不能满足用户对高速无线数据业务的需求。GPRS(General Packet Radio Service,通用分组无线业务)是构架在传统GSM网络之上的一种标准化的分组交换数据业务,它可以提供高达115kbit/s速率的分组数据业务,从而使得包括图片、话音和视频的多媒体业务在无线网络中的传输成为现实。GPRS采用分组交换技术、在通信的过程中不需要建立和保持电路,符合数据通信突发性的特点,并且呼叫建立时间很短。GPRS不再根据用户实际的数据流量来计费,这样就允许用户始终在线,享受方便快捷的服务。因此,GPRS被认为是第二代移动通信系统向第三代移动通信演进的重要一步。2.2.1 GPRS与传统网络连接的性能比较尽管相对GSM网络,GPRS已经有了长足的进步,但是和有线网络相比还是存在一定的差距。表2-1给出了理想状态下GPRS、Modem和Lan的通信性能。表2-2的各项性能参数是从大量的模拟测试中得出的结果。比较而言,在实际应用当中,Lan的性能通常接近于它的理想状态,而由于GPRS的性能受许多环境因素的影响,例如小区内的用户数,应用的类型以及可用的网络资源等,所以GPRS的性能很难达到理想的情况。表 2-1 理想状态下GPRS、Modern和LAN的通信性能GPRSModenLan带宽115kbit/s50kbit/s10Mbit/s延迟(ms)1001001表 2-2 模拟真实状态下GPRS、Modern和LAN的通信性能GPRSModenLan带宽50kbit/s30kbit/s8Mbit/s延迟(ms)20015052.2.2 GPRS与新兴无线网络连接的性能比较值得欣慰的是,无线网络连接也在进步中。虽然GPRS与传统网络连接相比带宽有限、延迟严重,但是即将到来的3G网络技术将会改变这一现状。表 2-3 比较了GPRS与新兴无线网络连接的性能。表 2-3 GPRS与新兴无线网络连接的性能比较下行网速峰值平均下载速度GPRS115kbps30-40kbpsEDGE473kbps100-130kbpsUMTS-WCDMA2Mbps220-320kbpsUMTS-HSDPA14Mbps550-1100kbps尽管国内的3G 标准还在制定中,近期不会投入商用。但是,中国联通和中国移动都已经相继开始了EDGE的测试。EDGE被认为是2.5G(GPRS)向3G过渡的技术,普遍称其为2.75G技术。上海移动在今年6月开始进行EDGE的公开测试,不久的将来将正式商用。2.3 Java ME Java从1.5版本开始改变了版本号的命名,将Java 1.5称为Java 5。同时将J2ME命名为Java ME,J2SE命名为Java SE,J2EE命名为Java EE。本文遵照Sun公司对于Java的新命名规则。技术背景Java ME是Sun公司针对嵌入式、消费类电子产品推出的开发平台,与Java SE和Java EE共同组成Java技术的三个重要的分支。Java ME实际上是一系列规范的集合,由JCP组织指定相关的Java Specification Request(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK测试以确保兼容性。目前阶段,Java ME最流行的应用是游戏软件。因为与需要昂贵的专用设备和开发工具的竞争对手(如索尼和任天堂)相比,Java ME程序可以在PC机上开发和仿真运行,然后很容易地部署到目标机上,从而使其开发、测试和发布变得容易和廉价。2.3.1 Java ME与Java SE的关系Java ME可以看作是Java SE的一个子集8。它包含了Java SE中的一些核心关键内容,同时针对嵌入式设备进行了扩展。它和Java SE的关系可以概括为图2.3中所示关系。 Java SEJavaME图 2.3 Java SE与Java ME关系图2.3.2 Java ME的结构与Java SE和Java EE相比,Java ME总体的运行环境和目标更加多样化,但其中每一种产品的用途却更为单一,而且资源限制也更加严格。为了在达到标准化和兼容性的同时尽量满足不同方面的需求,如图2.4,Java ME的架构分为Configuration、Profile和Optional Packages(可选包)。它们的组合取舍形成了具体的运行环境9。 图 2.4 Java ME结构Configuration主要是对设备纵向的分类,分类依据包括存储和处理能力,其中定义了虚拟机特性和基本的类库。已经标准化的Configuration有Connected Limited Device Configuration(CLDC)和Connected Device Configuration(CDC)。 Profile建立在Configuration基础之上,一起构成了完整的运行环境10。它对设备横向分类,针对特定领域细分市场,内容主要包括特定用途的类库和API。CLDC上已经标准化的Profile有Mobile Information Device Profile ( MIDP)和Information Module Profile(IMP),而CDC上标准化的Profile有Foundation Profile(FP)、Personal Basis Profile(PBP)和Personal Profile(PP)。 可选包独立于前面两者提供附加的、模块化的和更为多样化的功能。目前标准化的可选包包括数据库访问、多媒体、蓝牙等等11。 2.4 Servlet技术简要介绍Servlet是使用Java Servlet 应用程序设计接口(API)及相关类和方法的 Java 程序12。除了 Java Servlet API,Servlet 还可以使用用以扩展和添加到 API 的 Java 类软件包。Servlet 在启用 Java 的 Web 服务器上或应用服务器上运行并扩展了该服务器的能力。Java Servlet对于Web服务器就好像Java Applet对于Web浏览器。Servlet装入Web服务器并在Web服务器内执行,而Applet装入Web浏览器并在Web浏览器内执行。Servlet 通过创建一个框架来扩展服务器的能力,以提供在 Web 上进行请求和响应服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet 建立起服务器返回给客户机的响应。当启动Web服务器或客户机第一次请求服务时,可以自动装入 Servlet。装入后,Servlet 继续运行直到其它客户机发出请求。Servlet 的功能涉及范围很广。例如,Servlet 可完成如下功能: 1. 创建并返回一个包含基于客户请求性质的动态内容的完整的 HTML页面。 2. 创建可嵌入到现有 HTML 页面中的一部分 HTML 页面(HTML 片段)。 3. 与其它服务器资源(包括数据库和基于 Java 的应用程序)进行通信。 4. 用多个客户机处理连接,接收多个客户机的输入,并将结果广播到多个客户机上。例如,Servlet 可以是多参与者的游戏服务器。 5. 当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至Applet的新连接,并将该连接保持在打开状态。当允许客户机和服务器简单、高效地执行会话的情况下,Applet也可以启动客户浏览器和服务器之间的连接。可以通过定制协议或标准(如 IIOP)进行通信。 6. 对特殊的处理采用 MIME 类型过滤数据。 7. 将定制的处理提供给所有服务器的标准例行程序。例如,Servlet 可以修改如何认证用户。2.5 JavaBean技术简要介绍JavaBean 是一种Java语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBeans 通过提供符合一致性设计模式的公共方法将内部域暴露称为属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 属性。用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用Java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、Applet程序或者应用来使用这些对象。用户可以认为JavaBean提供了一种随时随地的复制和粘贴的功能,而不用关心任何改变。2.6 Applet技术简要介绍Applet可以翻译为小应用程序,Java Applet就是用Java语言编写的这样的一些小应用程序,它们可以直接嵌入到网页或者其他特定的容器中,并能够产生特殊的效果。Applet必须运行于某个特定的“容器”,这个容器可以是浏览器本身,也可以是通过各种插件,或者包括支持Applet的手持移动设备在内的其他各种程序来运行。与一般的Java应用程序不同,Applet不是通过main方法来运行的。在运行时Applet通常会与用户进行互动,显示动态的画面,并且还会遵循严格的安全检查,阻止潜在的不安全因素(例如根据安全策略,限制Applet对客户端文件系统的访问)。在Java Applet中,可以实现图形绘制,字体和颜色控制,动画和声音的插入,人机交互及网络交流等功能。Applet还提供了名为抽象窗口工具箱(Abstract Window Toolkit,AWT)的窗口环境开发工具。 AWT利用用户计算机的GUI元素,可以建立标准的图形用户界面,如窗口、按钮、滚动条等等。2.7 MySQL简要介绍MySQL,出自瑞典小公司MySQL公司的开放源码的数据库软件,目前对数据库老牌厂商Oracle, IBM, Microsoft 以及 Sybase等公司产生威胁。 2004年7月,MySQL公司在成立8年后首次召开全球用户大会。该公司的合作创办者之一大卫米科斯(David Axmark)称,目前MySQL软件的官方日下载数量已经达到29000份,而其全球总用户数量已经达到了惊人的400万。目前MySQL实行的是双重的用户许可证制度。对于那些下载免费版本的用户,必需将自己所进行的任何代码修改公布于众;或者通过付费的方式来使得这些更改成为私有产权。公司的利润来源也很清晰:产品技术服务,认证课程以及付费用户。 MySQL产品尚有一些不稳定等因素,但是,因为其开放性,被人形容是总值高达120亿美元的数据库市场上的“通配符”,它几乎可以运用在任何需要数据库的地方。 MySQL公司目前在同时开发两个版本的软件,4.1版以及5.0版。4.1版本的代码已经发布并有望在8个月后公布最终代码。而5.0版本的最后产品将在6个月后发布。 MySQL 4.1版本中增加了不少新的性能,包括对主键的更高速度的缓存,对子查询的更好的支持,以及应网络约会网站所要求的,基于地理信息的查询。 而其同步开发的5.0版本则把目标对准了企业用户,对于4.1版本中的所有新特性,5.0版本悉数收入囊中,并且独具以下特点:对外键的良好支持;系统自动报错机制以及对存储过程的充分支持。 MySQL是一整套低成本的,基于SQL的客户/服务器(C/S)模式的关系数据库管理系统。它是一个开放源代码项目,可以在绝大多数的情况下免费使用,这使得它在开源社区中被广泛的使用。3 本课题基本内容在对本课题所涉及的技术背景加以研究归纳之后,确立了本系统的基本构架,并针对其基本构架进行各个模块的细化研究。本课题主要的目的是构建一个跨平台多人在线游戏平台。用户可以在其熟悉的平台上进入游戏,与不同平台的用户进行游戏。在进行游戏时,用户不必关心对方是什么平台甚至可以认为是和自己一样的平台。跨平台多人在线游戏平台将为用户提供一个跨越平台、跨越地域的多人游戏平台。在整个平台中,性能处于最低位置的平台是手持移动设备。作为整个平台中的性能瓶颈,对手持移动设备的开发中的相关事宜应作为整个系统设计的参考,所有的设计都需要以满足手持移动设备的性能条件为前提和基础。3.1 系统基本构架本课题的结构大体上分为三层分别为:客户表现层,服务逻辑处理层,后台数据层。整个系统的结构和系统中三个层次的关系如图3.1所示。图 3.1 系统基本构架3.1.1 客户表现层客户表现层为用户提供最终的游戏表现功能。用户通过对所持客户端可以进行一切游戏输入同时以图像、文字形式获得游戏的反馈信息。客户表现层是唯一和用户有直接接触的层面。由于跨平台技术的应用,客户表现层可选用的平台只有以下两点限制:1. 支持JVM2. 支持HTTP协议的网络连接客户表现层可能依托于基于Symbian操作系统的智能手机,Linux操作系统的PDA,Windows操作系统的个人桌面电脑,Solaris操作系统的个人电脑。跨平台技术的使用使得用户对于操作系统的选择有了最大限度的自由度,实现了客户端的平台无关性。用户同时也可以随意选择网络连接方法通过手机的GPRS连接、通过无线接入点、通络ADSL拨号上网或者通过路由器接入网络。由于系统采用HTTP连接作为网络通信协议,只要满足网页浏览的网络条件的客户端都可以应用本系统。3.1.2 服务逻辑处理层服务逻辑处理层以Tomcat为容器、配合Servlet和JavaBean共同组成。Tomcat充当游戏连接服务器。JavaBean作为逻辑处理组件,完成所有Servlet转交信息的逻辑处理。整个服务逻辑处理层中的逻辑操作都被封装于相应的JavaBean中。Servlet作为通信协议处理组件,接收客户表现层所发出的游戏信息,整理之后将游戏信息交给JavaBean处理;当玩家请求游戏信息时,Servlet负责从JavaBean中调出相应数据反馈给用户。服务逻辑处理层位于本系统三层结构的中间,同时与客户表现层和后台数据层通信。它的设计是否优良关系到整个系统的可扩充性和稳定性。它与客户表现层之间存在一个网络连接层,与后台数据层之间存在一个数据连接层。这两个层次的处理详见3.1.4小节。3.1.3 后台数据层后台数据层担任了数据的持久存储工作。通过MySQL数据库与JavaBean连接,可以对JavaBean的存储功能进行扩充,以满足存储游戏玩家基本信息的需求、方便进行用户权限的确认。3.1.4 网络连接层和数据连接层网络连接层和数据连接层分别存在于客户表现层与服务逻辑处理层之间和服务逻辑处理层和后台数据层之间。对他们进行封装之后,并入了服务逻辑处理层。网络连接层中用户网络连接方式的不同被Tomcat封装。用户可能通过不同的网络连接进行游戏:手持移动设备可能通过无线网络连接,也可以通过无线接入点;桌面平台可以通过路由器或者拨号上网。Tomcat可以接受所有支持HTTP协议的网络连接,而不必关心网络连接是如何建立。网络连接层的封装使得用户连接方法得到最大自由。数据连接层封装了JavaBean与MySQL通信的所有事务。在JavaBean中只要采用标准的Sql语言编写数据库命令,通过数据连接层转发到具体的关系数据库中就能够得到正确的处理。这使得在需要更换数据库的情况下,服务逻辑处理层的代码根本不需要或者很少需要改动。例如,当游戏规模上升,MySQL无法满足系统需要而改用Oracle数据库时,可以很快完成修改工作,而不会使游戏运营停止过长的时间。网络连接层使得用户有更大的网络连接方式选择的余地,提高了跨平台性。数据连接层使得整个系统拥有更好的可扩充性。这两个层次被整合在了服务逻辑处理层中,实现了服务逻辑处理层的高内聚,降低了平台结构的复杂性。3.2 系统所实现的游戏针对手持移动设备客户端的程序编写为本系统特色之一。对于手持移动设备的支持将本系统的跨平台特性发挥到了极致。对于手持移动设备的编程主要采用Java ME技术。由于手持移动设备资源受限,网络连接带宽低、延迟高的特点,设计及实现时需要充分考虑手持移动设备的特性13。对于本系统中实现游戏的选择需要考虑以下几点:1. 游戏的输入必须方便。由于手持移动设备的输入方法有别于PC机和家用游戏机,复杂频繁的游戏操作往往使用户无法接受。2. 游戏的画面必须简单。由于手持移动设备资源有限,实现过于复杂的画面可能耗尽硬件资源。3. 游戏的人数不能过多。由于手持移动设备的网络连接带宽低、延时高,用户需要等待至少5-10秒才能更新游戏数据。再加上用户的考虑时间,可能每一个游戏动作的更新会使得其它用户都要等待更长的时间。如果游戏人数过多,那么每一次的游戏等待时间将会达到1分钟左右,这将使用户失去游戏的兴趣。综合考虑之后,本课题决定选取的游戏为输入方便、画面简单、游戏人数为2人的五子棋。3.2.1 系统操作流程系统操作流程中包括了玩家登录,帐号注册,选择游戏房间等操作。图 3.2 系统操作流程系统操作流程进行步骤如下:1. 开始系统操作2. 玩家检查是否有帐号。如有,则转至6,反之转至33. 玩家进行注册操作4. 玩家选择房间5. 转入游戏流程6. 玩家进行登录7. 检测登录是否成功。如登录成功则转至4,否则转至68. 游戏结束之后选择是否继续游戏。如需继续游戏,转至5,否则转至99. 操作流程结束3.2.2 游戏流程本系统处于游戏状态时的游戏流程如图3.3所示。图 3.3 游戏流程按照流程中的编号,具体过程如下:1. 开始游戏2. 判断本轮游戏是否为本人处于活动状态3. 玩家进行下子的操作4. 如下子成功,则转到5;如不成功则转到35. 发送数据并且将当前游戏状态设置为等待6. 判断是否有玩家胜利。如有胜者产生则转至11;如没有胜者则转至27. 从游戏服务器接收游戏信息8. 判断游戏信息是否有更新。如有,则转至10,否则转至99. 将更新进程等待10秒后转至710. 更新游戏数据并且将当前游戏状态设置为活动11. 显示游戏结果12. 游戏结束进行游戏的两个玩家中,同一时刻拥有活动权限的只有一人,而另一人则处在等待状态。活动的游戏者可进行下子的操作,等待的玩家则每隔一定时间从服务器上更新游戏信息。当活动玩家完成下子的操作之后,则活动玩家与等待玩家的角色互换。3.2.3 游戏通信方式由于本课题采用无状态的HTTP协议,所以本系统的网络通信方式不同与一般的网络游戏。(1) 信息的发送当产生需要发送的信息时,系统将信息封装成类序列化后作为doPost方法的请求发送至游戏服务器。游戏服务器将其还原为游戏信息后由JavaBean处理并等待该信息被其它玩家接收。(2) 信息的接收需要接受更新数据的客户端每隔一定的时间向游戏服务器发出请求。如果存在符合条件的游戏信息则服务器将该游戏信息转为流,并将其置于doPost方法的应答中发送回请求的客户端。具体的有关本系统的网络通信的内容请参见本文第四章相关部分。3.3 手持移动设备端开发由于手持移动设备型号繁杂,各个厂商没有定义统一的按键标准、屏幕大小、屏幕发色数等硬件规格。针对单一的手机型号进行开发将不利于Java ME程序的通用。所以在选择开发环境时需要采用中立的、标准的开发环境。Sun公司发布的WTK严格遵守MIDP规范且立场中立,故选择了最新的WTK2.5作为本系统手持移动设备的开发环境。3.3.1 高级界面编写MIDP中支持类似于Windows可视化编程的高级界面编程。通过对各种高级界面资源的组合排列可以方便地得到满足用户需求的高级界面。高级界面可以带来更高的编程效率,但是同时也削弱了界面的可自定义程度。被安排至显示界面的高级界面部件并不能进行精确的定制,只能通过布局控制进行调整。Sun公司为了得到最大兼容性采取了这样的设定,以至于同样的高级界面在不同的手机上往往会显示出不同的形态。高级界面的以上特性使得它不适合作为游戏的主要界面,而更适合处理数据收集等操作比如用户登录界面。MIDP没有Windows编程中多窗口的概念。由于手持移动设备显示屏幕的尺寸限制,MIDP同时只能有一个窗口被显示。MIDP的屏幕切换通过displayable对象来完成。每个MIDlet(类似Windows中Main函数)拥有一个控制显示的displayable对象。当需要显示相应的窗体时,需要调用displayable的setCurrent()方法。由于手持移动设备资源有限,所有可视化的部件都应设计为滞后初始化,直到调用setCurrent()来显示该部件。3.3.2 低级界面编写MIDP 1.0中低级界面主要操作全部针对Canvas。Canvas作为画布,对画布进行绘制后显示。但是以Canvas作为游戏开发的主要工具存在着多个弊端:1. Canvas同时只能接受一个按键信息。2. Canvas默认不支持双缓存技术。3. Canvas不支持针对游戏开发的Spirt、Layer和LayerManger等特性。MIDP 2.0针对以上缺点对Canvas类进行了扩充,衍生出了一个专门用于游戏开发的GameCanvas类。通过对新增的GameCanvas的应用,制作更加流畅的游戏已经成为现实。3.4 游戏的实现作为系统表现层的重要一部分,游戏的显示和逻辑的编写也很重要。除了能够正常显示,游戏逻辑正确以外,游戏的编写需要有很好的扩充性。本课题的目标为建立一个统一的跨平台多人在线游戏系统。作为一个平台,其中包含的游戏需要随着时间的转移进行添加。面对这种可能引起变化的情况,本系统中的游戏的设计完全采用了面向对象的方法,将需要实现的游戏封装为类。3.4.1 游戏逻辑本系统首先实现的游戏是五子棋。针对五子棋的判断不外乎对玩家下子之后对棋盘的更新和对胜负的判断。(1) 更新棋盘数据在玩家通过其特定平台对游戏进行下子的操作之后,经过游戏界面的转换得出玩家对棋盘所做变动被传递至游戏逻辑进行处理。在ChessLogic类中,public boolean update(ChessAction chessAction)方法处理对棋盘的更新工作。public boolean update(ChessAction chessAction)方法首先检验玩家预想的点是否已经存在棋子。如果已经被占有,那么返回false;如果仍然空留,那么将棋盘数据写入,并且返回true。(2) 判断胜负在每一次更新成功之后,需要对玩家所下的棋子进行判断。如果玩家所下棋子造成了水平、垂直、左上至右下、右上至左下中的任意方向有代表玩家颜色的五子连成一线的情况,那么可以判断该玩家胜利。public int checkWinner()方法处理胜负的判断。如黑子胜利,那么返回1;如果白子胜利,那么返回2;如果还未分出胜负,则返回0。3.4.2 游戏界面游戏逻辑进行游戏数据的逻辑处理,而游戏界面则负责游戏信息的采集和可视化反馈。针对不同的平台,游戏的显示方法有着很大的不同。在手持移动设备的编程中,主要针对GameCanvas进行编程,而在Applet或者Java SE中,则是针对Canvas或者JPanel进行编程。游戏界面的类中,存在一个多线程机制,以一定的频率对游戏画面进行重绘。为了减小系统的消耗,重绘机制只在玩家有输入或者从服务器中更新了数据之后才被执行。3.4.3 界面与逻辑分离正如上文所提及的那样,本系统中不仅游戏独立于系统框架,而且还实现了游戏显示和游戏逻辑的分离。分离是出于更好的实现跨平台性考虑。以下列举了系统在不同平台环境中运行的情况。图 3.4运行于defaultcolorphone环境中的移动设备客户端图 3.5运行于defaultgrayphone环境中的移动设备客户端图3.4和图3.5展示了移动设备客户端在WTK中模拟运行的运行情况。在不同的模拟器配置下,程序可以正常运行。图 3.6 运行于Nokia 6630真实硬件环境中的移动设备客户端图3.6展示了在真实情况下程序运行于Nokia 6630的运行情况的截图。在真实情况下,界面的显示和模拟情况下的情况有所不同,但是程序的逻辑依然正确。这种Java ME中为了适应不同硬件而产生的显示的差异是不可避免也是可以接受的。图 3.7 本系统Applet界面图3.7展示了开发环境中通过小程序查看器查看本系统Applet客户端的运行情况。图 3.8 运行于IE7中的Applet客户端图3.8展示了在实际情况下通过IE7运行Applet客户端的情况。图 3.9 运行于Opera的Applet客户端图 3.10 运行于Firefox中的Applet客户端由于IE7只能运行于Winodws操作系统,图3.9和图3.10分别验证了Applet客户端在Opera和Firefox这两个非IE核心且多平台的浏览器中的运行情况。可见,界面和逻辑的分离对于跨平台应用来说必不可少。为了达到最大的跨平台性,在本系统中尽可能多地采用了界面和逻辑分离的技术。4 关键技术研究及实现在介绍本课题的基本内容之后,本章节将详细介绍其中的关键技术。这些关键技术使得本课题所构想的基本结构得以实现。以下所论述的内容皆为本课题的核心内容。4.1 Java ME中关键编程技术由于Java ME针对资源受限设备进行开发,所以其开发方法不同于以往的基于桌面平台的程序编写。本课题Java ME中的关键技术包括界面的编写,针对游戏开发的编程,手持移动设备的网络编程和多线程编程。4.1.1 MIDlet生命周期在MIDP中定义了一种新的应用程序模型MIDlet。它是被Application Management Software(AMS)管理的。AMS负责MIDlet的安装、下载、运行和删除等操作。在被AMS管理的同时,MIDlet可以和应用管理软件通信通知应用管理软件自己状态的变化。MIDlet有三个状态,分别是pause,active和destroyed。在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态,也就是所说的运行状态。在active状态调用destroyApp(boolean unconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。图 4.1 MIDlet生命周期4.1.2 游戏绘图与高级界面相比,低级界面在带来更高自由度的同时也意味着对其操作的复杂程度超过了高级界面。(1) 使用相对坐标在高级界面中,对于添加到屏幕中的元素只能以一定的添加顺序和类似锚点的定义来对界面做比较弱的控制。程序员无法明确定义某一部件在屏幕中的具体位置。所有的位置完全由手持设备在运行时根据自身特点自行设置。这一特点保证了高级界面有很好的跨平台性能,同时也可能会在不同手持设备中有着不同的用户界面。完全使用高级界面是不适合游戏开发的。低级界面可以明确地定义元素的位置。比如可以明确地在屏幕的(200,300)处画点。但是当该程序运行于屏幕分辨率只有176x208的手持设备时,该点由于已经超出设备显示范围而使得用户无法看见绘图效果。低级界面在带来更高自由度的同时牺牲了跨平台性。为了使得程序在更多的平台上正常运作,本课题的手持设备编程中使用了相对坐标。在绘制棋盘时,首先得到运行时屏幕的高度与宽度。当画布被初始化并被显示时,可以使用getWidth()和getHeight()方法得到当前设备屏幕的宽度与高度。之后可根据公式得到用来绘制棋盘的棋盘左上角作为参考点的坐标。图 4.2中例举了使用相对坐标绘图的方法。图 4.2 使用相对坐标绘图在绘制棋盘的时候,只要调用将以上公式得到的参考
展开阅读全文