基于J2ME的益智游戏设计说明

上传人:无*** 文档编号:99899588 上传时间:2022-06-01 格式:DOC 页数:57 大小:1,007KB
收藏 版权申诉 举报 下载
基于J2ME的益智游戏设计说明_第1页
第1页 / 共57页
基于J2ME的益智游戏设计说明_第2页
第2页 / 共57页
基于J2ME的益智游戏设计说明_第3页
第3页 / 共57页
资源描述:

《基于J2ME的益智游戏设计说明》由会员分享,可在线阅读,更多相关《基于J2ME的益智游戏设计说明(57页珍藏版)》请在装配图网上搜索。

1、毕业论文题 目:基于J2ME的益智游戏设计院:专业年级:姓 名:学 号:指导教师:原 创 性 声 明本人重声明:本人所呈交的毕业论文,是在指导老师的指导下独立进行研究所取得的成果。毕业论文中凡引用他人已经发表或未发表的成果、数据、观点等,均已明确注明出处。除文中已经注明引用的容外,不包含任何其他个人或集体已经发表或撰写过的科研成果。对本文的研究成果做出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律责任由本人承担。论文作者签名: 日 期:关于毕业论文使用授权的声明本人在指导老师指导下所完成的论文及相关的资料包括图纸、试验记录、原始数据、实物照片、图片、录音带、设计手稿等,知识产权归

2、属学院。本人完全了解学院有关保存、使用毕业论文的规定,同意学校保存或向国家有关部门或机构送交论文的纸质版和电子版,允许论文被查阅和借阅;本人授权学院可以将本毕业论文的全部或部分容编入有关数据库进行检索,可以采用任何复制手段保存和汇编本毕业论文。如果发表相关成果,一定征得指导教师同意,且第一署位为学院。本人离校后使用毕业论文或与该论文直接相关的学术论文或成果时,第一署位仍然为学院。论文作者签名: 日 期:指导老师签名: 日 期:49 / 57基于J2ME的益智游戏设计摘 要由于手机已经成为大众生活的必需品,适用于手机的应用程序,尤其是游戏,越来越受到人们的关注和喜爱。益智游戏是指那些通过一定的逻

3、辑推理或是数学,物理,化学知识,甚至是游戏设计者设定的原理来完成一定任务的小游戏。一般会比较有意思,需要适当的思考。益智游戏的游戏目标要清晰地呈现给玩家,让玩家明白自己要干什么。游戏的逻辑要浅显易懂,这样才能让玩家容易接受。手机游戏的通用性是指游戏在不同的手机本台上显示的基本相同,游戏操作流程、操作方法基本相同。基于J2ME框架的游戏较好的解决了游戏的通用性即同一款游戏可以适用于采用不同平台,相同开发标准的手机。通过学习J2ME框架和Emini物理引擎,然后在传统的J2ME游戏框架基础上整合了物理引擎。通过学习游戏开发的相关理论知识如游戏资源的管理、游戏动画的设计和实现原理、游戏前景和背景音乐

4、的管理方法、游戏状态管理、物理引擎的使用方法等,根据以上开发方法,设计了游戏的框架,开发了让子弹飞这款益智游戏。然后,针对游戏的需求分析制订了详细的测试计划对游戏进行了单元测试和系统测试。本论文从游戏开发的生命周期入手,介绍了系统开发的背景、应用到的技术、游戏的设计目标、功能需求、操作流程、游戏的概要设计、详细设计及实现方法,然后介绍了游戏的测试。最后对本课题做了总结和展望。关键词:益智游戏,物理引擎,让子弹飞,JAVA METhe Design of Puzzle Game Based On J2MEAbstractAs mobile phones have become the neces

5、sities of public life apply to mobile phone applications, especially games, more and more attention and love. Puzzle game by logical reasoning or mathematics, physics, chemistry knowledge, and even a small game of the principle set by the game designers to complete certain tasks. Generally would be

6、more interesting, appropriate thinking. Puzzle game the game objectives to be clearly presented to the players, the players understand they have to do. The logic of the game is easy to understand, so as to allow players to accept easily. The versatility of the mobile game is basically the same game

7、in this stage of the cell phone display, game flow, methods of operation is basically the same. Based on the J2ME framework of the game better solution to the versatility of the game with a game can be applied using different platforms, the mobile phone of the same development standards.Learn J2ME f

8、ramework and the Emini physics engine, and then in the traditional J2ME game framework based on integrated physics engine. Theoretical knowledge by learning game development, such as the management of game resources, game animation design and realization of the principle of game the foreground and b

9、ackground music management methods, game state management, the physics engine to use, etc., according to the above development methods, design of the game the framework was developed to let the bullets fly this puzzle game. Then, based on needs of the game I developed a detailed test plan to conduct

10、 unit testing and system testing of the game.Of this thesis is to start from the game development life cycle, system development background, applied to technology, game design goals, functional requirements, operating procedures, a summary of the game design, detailed design and implementation, and

11、then introduces the testing of the game . Finally, this paper makes a summary and outlook.Keywords: Puzzle Game, Physics Engine, Let the Bullet Fly, JAVA ME目录1 绪论11.1项目开发背景、应用现状及意义11.2 论文的组织安排21.3小结22 相关技术与工具介绍32.1 J2ME简介32.1.1 J2ME在Java体系中的地位32.1.2 J2ME技术框架32.1.3 MIDLET 应用程序简介52.2 Emini Physics Eng

12、ine 简介62.2.1 Emini Physics Engine的基本概念62.2.2 Emini Physics Engine所有包的层次结构简介72.2.3 Emini Physics Engine的数学知识72.3 开发平台与运行环境简介82.4小结83 需求分析93.1 游戏规则简介93.2 游戏设计目标93.3 游戏的功能需求分析93.4 小结124 系统总体设计134.1 功能设计134.1.1 游戏框架设计134.1.2 功能模块设计144.2 数据库设计154.2.1 数据库概念结构设计154.2.2 数据库逻辑结构设计164.3 接口设计174.4 小结185 系统详细设计

13、与实现195.1 功能模块详细设计195.1.1 物理模拟模块195.1.2 资源管理225.1.3 游戏状态管理225.1.4 动画管理225.1.5 声音管理245.2 游戏的实现265.2.1 游戏框架的组织265.2.2. 游戏数据访问层实现285.2.3 业务逻辑层实现305.2.4. 游戏视图层的实现325.2.5 游戏控制层的实现355.3 小结366 测试376.1 系统测试计划376.1.1 测试目的376.1.2 测试环境376.1.3 功能测试376.2 具体测试386.3 小结407 结束语417.1 总结417.2 展望41附录42参考文献48致491 绪 论1.1项

14、目开发背景、应用现状及意义当前移动互联网游戏产业发展迅猛,随着手机游戏产品持续丰富,手机游戏玩家迅速增长,20XX中国手机游戏活跃玩家突破698万户。易观国际预测,20XX手机游戏活跃玩家将达到948万户1。艾媒市场咨询研究显示,20XX中国手机产量超过8亿,预计20XX将保持10.4%的增长速度,超过8.9亿部2。可见手机游戏的市场将是巨大的。在游戏产业迅猛发展的同时,社会各界也应该看到游戏产业所带来的负面影响。中国网络游戏玩家已经从3260万迅猛增加到7598万,其中超过八成是青少年。这其中还有很多是成瘾少年。一方面,青少年意志力薄弱、自我控制力较弱;另一方面,一些低劣的网络游戏中充斥着很

15、多不健康的因素。面对这样的情况,一些专家开始担忧游戏中的、暴力、邪魔和反社会行为等不良成分会对青少年造成不良影响,并可能使青少年因沉迷游戏而影响学习。与此同时,一些专家认为良好的游戏例如益智游戏可以帮助学生在娱乐中学习,在潜移默化中达到学习知识的目的。结合手机的普遍性,从而本人提出了手机益智类游戏这样一个论题。然而,手机设备有几百种,没有统一的标准。各个手机制造商都有各自的实现方式,这种平台间的差异给手机应用程序的开发和移植造成了很大的限制。JAVA凭借其优秀的跨平台特性为移动开发者提供了较好的解决方案,提高了第三方所开发的程序的通用性。因此,JAVA也获得了巨大的发展。手机游戏产业已经发展的

16、如火如荼,据JuniperResearch的研究显示,20XX欧洲的Java游戏产值达到了97亿美元,其中,Java手机游戏占到653。综上所述,JAVA在手机移动应用的开发领域具有很大的潜力。尤其JAVA ME框架提高了移动应用的通用性,为开发者提供了便利。研究和实现手机益智类游戏有着重要意义:首先,由于游戏产业还不够成熟,游戏设计人员整体素质不高,游戏题材繁杂,游戏容不健康等原因造成了一些游戏中存在大量的消极容,不利于游戏玩家的身心健康。所以,一种以绿色健康为特色的游戏正迫切为人们所需要,益智游戏则很好的满足了这种需求。其次,本课题主要是设计和开发基于J2ME的手机益智游戏让子弹飞,一方面

17、有利于游戏玩家的身心健康,有助于让玩家养成勤动手、爱思考的习惯,另一方面还能通过游戏的设计和开发检验四年来的学习效果,积累开发经验,为以后的学习和工作打下坚实的基础。本文是对物理引擎和一般J2ME游戏框架整合的一次探索。如果没有物理引擎,游戏中的一些物理效果就只能通过硬编码的方式写入到程序中、增加了模块之间的耦合性,降低了软件的可扩展性,为以后软件的扩展和维护增加了难度。所以,本文对两者的整合对以后的研究具有一定的借鉴意义。1.2 论文的组织安排绪论主要介绍了手机益智类游戏开发背景、应用现状以及开发意义,论文的组织安排。相关技术与工具简介主要说明了本游戏在设计过程中用到的关键技术和开发工具,为

18、项目的设计做技术支持。需求分析主要是根据游戏的策略和游戏规则得出系统的功能需求。总体设计是在系统需求分析的基础上,对系统的架构、系统的功能、接口进行设计进而得出一个系统的总体框架。系统的详细设计和实现主要从功能模块的详细设计和系统架构层次的实现做了详细说明。系统测试介绍了测试计划并从功能方面进行测试。最后对本游戏的应用展望未来。1.3小结本章首先简单地介绍手机移动游戏的开发背景、手机游戏的市场状况、用户数量、社会对游戏的反映。进而发现了当前一些游戏的弊端,因此提出了绿色健康的益智游戏这个论题。最后,叙述了本游戏的开发意义和论文的组织安排。2 相关技术与工具介绍2.1 J2ME简介2.1.1 J

19、2ME在Java体系中的地位JAVA是一门优秀的编程语言,具有面向对象、与平台无关、安全、稳定、和多线程等特点,是目前软件设计中最为流行的编程语言之一。目前主要包括Java平台标准版、Java平台企业版、Java平台微型版和Java卡平台。Java SE的目标是个人计算机和服务器的应用;Java EE的目标是企业计算机和服务器的应用;Java ME的目标是便携式计算机和嵌入式设备的应用45。如图2-1所示:J2SEJ2EEJ2MEJava Card图2-1 四种Java平台Java ME实际上是一系列规的集合,由Java Community Process制定并发布相关的Java规请求,各个厂

20、商按照规在自己的产品上进行实现,但是必须要通过TCK测试来确保兼容性。2.1.2 J2ME技术框架由于移动设备这个概念涵盖了广泛的领域,包括智能手机、普通手机、掌上电脑、传呼机等,他们都具有各个不同的硬件配置,而这些硬件特性如存大小、浮点运算能力等都严重限制了手机应用程序的可移植性。为了方便应用程序的开发,迫切需要定义一个规来统一这些嵌入式设备。但是,这个规同样需要灵活性和较高的适应性,这样才能使规更有意义。因此,J2ME定义了一种灵活的层次规结构来规各种移动设备,不同层次的规相互协作来提供一个完整的移动Java平台。J2ME定义的移动平台分为四层:主机操作系统、配置、简表和厂商可选包,如图2

21、-2所示。因为Java应用程序是独立于操作系统的,因此,Java ME规仅包括三层:配置、简表和厂商可选包。厂商可选包简表配置JVM主机操作系统图2-2 Java 应用运行环境配置是针对某一类设备的最小Java平台,它包括满足该类设备的虚拟机,运行的最小子集和针对该类设备的核心库的最小子集。目前J2ME可用的配置有两种:CDC和CLDCConnected Limited Device Configuration, 连接有限设备配置。从库文件的角度来分析CDC和CLDC可知,CLDC是CDC的子集。CDC应用于相对存量较大、更强处理器的移动设备而CLDC则主要针对那些资源有限的嵌入式设备如手机都

22、属于这一大类。简表是架构在配置之上的规,因此每种简表都会声明它是基于哪种配置。简表针对不同的移动设备定义了各种高级API,这些高级API通常对于其它硬件设备不相关的扩充类库。SUN公司定义了两种可用的参考J2ME简表:基础简表和MIDP。基础简表主要用于CDC配置,因此其虚拟机几乎等同于标准的虚拟机。MIDP和性能较低的CLDC配置一起为开发移动设备应用程序提供了完整的Java平台。本文设计和开发的益智类游戏就是使用的MIDP。厂商可选包是由厂商提供给程序开发人员一组与其它规或API没有任何依存性的类库,开发人员可以利用这一类库可以开发出具有特定的功能应用程序。例如,有些产商会提供简单的数据库

23、管理系统,那么他们就会提供JDBCJava Database Connectivity,Java数据库连接。综上,J2ME的体系结构如图2-3所示:CLDCMIDPKVMHost Operation SystemsPersonal ProfileFoundation ProfileCDCCVMCard VMJava Card API图2-3J2ME体系结构2.1.3 MIDLET 应用程序简介MIDlet是在支持MIDP规的移动信息设备上运行的应用程序。MIDlet的生命周期包括三个基本状态:暂停状态Paused、激活状态Active和销毁状态Destroyed。这三种状态间的转换是应用程序管

24、理器通过调用MIDlet的三个回调方法startApp、pauseApp和destroyApp来实现的。如图2-4所示:图2-4 MIDlet生命周期转换图当MIDlet被执行时,应用程序管理器首先调用MIDlet的构造函数创建一个MIDlet实例,并将该MIDlet的状态置为暂停。然后应用程序管理器将它转换到激活状态并调用startApp方法。当MIDlet的startApp方法成功执行以后,MIDlet的生命周期就展开了。MIDlet的生命周期完全由应用程序管理器调用对应的回调函数实现。当MIDlet想对自身生命周期产生影响,就必须通过三个状态改变方法:notifyPaused、notif

25、yDestoryed和resumeRequest。这三个方法分别通知应用程序管理器转换到暂停状态、销毁状态或者激活状态。但是,这种状态的改变不一定成功。2.2Emini Physics Engine 简介2.2.1 Emini Physics Engine的基本概念物理引擎通过为刚性物体赋予真实的物理属性的方式来实现运动、旋转和碰撞反应的模拟。通过物理引擎,程序员可以在游戏中实现对现实世界的一些物理效果的模拟。比如:重力下降、摩擦力、弹性碰撞、非弹性碰撞、快速物体的碰撞等物理现象的模拟。为了实现一些物理效果,本人使用了Emini Physics EngineVersion 1.3.3 。Emi

26、ni Physics Engine是一个二维物理引擎库,使用这个引擎可以创建逼真的物理模拟。它可以完成碰撞的检测和处理,可以创建自定义的形状,处理摩擦力、重力等现实世界中的常见外力。Emini物理引擎的常见概念如下:Body: 刚体,物理模拟中的基本元素,物理模拟中的所有相互作用的对象都是以Body的形式存在。它的静态属性有形状、重量、摩擦系数、弹性系数等和状态属性:位置、速度等。Shape: 形状,每一个刚体都有一个形状。形状定义了刚体的边界和物理属性,一个形状可以用于多个刚体且形状可以为凸多边形或者圆形。 World:世界,包括物理系统中所有的刚体、形状、外力和模拟物理系统的参数。 Ext

27、ernal Forces:外力。所有不是来自物理模拟系统的且作用于系统部刚体的力都属于外力。例如:重力。可以通过实现External Forces接口,方便的加入外力。 Contact: 接触。刚体和刚体之间真实的接触被抽象为两种情况,第一种是一个刚体的一角和另一个刚体相交,抽象为点在平面上;第二种情况是两个刚体的平面重合,抽象为两个点在重合的平面上。 Collisions:碰撞。物理引擎首先检测所有刚体的碰撞。根据牛顿力学原理处理碰撞后的反应。 ShapeSet: 形状集合。每一个世界对象都会维护一个ShapeSet类型的对象,该对象包含所属世界的所有刚体的Shape类型。2.2.2Emin

28、i Physics Engine所有包的层次结构简介Emini物理引擎的大部分实现类都是Object类的子类,这种实现方式提高了程序的运行效率,简化了类层次且易于理解。包的层次结构如图2-5所示:图2-5 Emini物理引擎包的层次结构2.2.3Emini Physics Engine的数学知识由于CLDC1.0不支持浮点数运算,为了在运算中尽量准确,Emini物理引擎使用FixPoint数据类型表示浮点数据。在使用FixPoint类型时,单精度数可表示的最小的数为。双精度数可表示的最小的数是。FixPoint数据类型的数据在存中仍然是以整型数据或者长整型数据存储,只是在使用的时候将数据乘以对

29、应位所表示的权重,就是所用的数据。按照这种方法就能最大限度的减小误差。例如,一个FixPoint类型的数据如4096表示的是十进数据1。使用Fixpoint的单精度类型存储浮点数据0.5时,就是使用0.5乘以4096。最后结果是2048。那么存中存储的就是2048,用2048表示0.5。由于一个FixPoint类型的单精度数用12位的整型数据表示,所以只能截取该类型数据的高四位0110来表示一个FixPoint类型的数据是如何转化为浮点型数据的。表2-1 FixPoint 代表的数0110表示的数210.50.250110= 2*0+1*1+0.5*1+0.25*0 = 1.52.3 开发平台

30、与运行环境简介 JDKJDK是Java开发工具包,Java应用程序的基础。本文中所用的JDK版本为JDK 1.6。 Eclipse开发平台Eclipse是一个开放源代码的、基于Java的可扩展开发平台。Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。在Eclipse中几乎每样东西都是插件,实际上正是运行在Eclipse平台上的种种插件提供我们开发程序的各种功能。同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。WTJ是一个用于J2ME开发的Eclipse插件。它使Eclipse可以更有效地开发移动设备的Java应用程序。本系统的开发工具首选开

31、源工具Eclipse3.6.2 Helios 和WTJ1.1.2作为J2ME开发工具。 运行环境本系统开发时在如下环境中运行良好:操作系统:Microsoft Windows XP Professional Service Pack 3。运行环境:J2ME SDK 3.0。附加工具:QuickTime 7。同时也可以在存1.5M以上,应用程序限制大小大于800K、屏幕分辨率为240*320、支持混音的Nokia真机上运行。2.4小结本章主要是介绍了J2ME技术的基本框架组成、MIDlet程序的基本形式和Emini物理引擎的基本概念、框架结构和使用方法。最后介绍了开发工具、开发平台和运行环境。3

32、 需求分析需求分析和系统设计是软件开发的基础,决定着软件开发的成功与否6。需求分析就是基于用户的需求并且结合现有技术能力通过分析游戏策略和规则进而得出系统的拟实现的功能需求。需求分析的结果影响着整个系统的成败。3.1 游戏规则简介鹅城之战以后,鹅城人民过了一段没有马匪的好日子。但是,好景不长,一股马匪霸占了鹅城,无恶不作。鹅城人民生活在水深火热之中。牧之不得不重新出山,赶走马匪,夺回镇长之位,保护鹅城人民。玩家开始游戏以后,可以控制游戏中的主角牧之,通过点击触摸屏发射子弹,子弹会在空中飞行,飞行的过程中会击中在飞行路线上的马匪。如果马匪被全部消灭,且主角没有死亡,则闯关成功。玩家经过不断挑战各

33、种关卡,最终夺回镇长之位。但是,闯关过程中玩家还要小心不要被木箱、铁球砸中。如果被砸中就会导致主角死亡,玩家闯关失败。每当玩家通过一关后系统就会保存玩家通过此关时消耗的子弹数量和这一关玩家可以使用的最大子弹数。系统在玩家游戏过程中还会适当的给予玩家奖励如提供更多的子弹,以便平衡游戏的难度,鼓励玩家继续游戏。所以,每一关的最大子弹数可能不同。3.2 游戏设计目标本游戏的主要目的是让玩家体会到益智游戏的乐趣,通过思考子弹的碰撞路径进而让子弹消灭麻匪,消灭完所有马匪后,玩家就可通过这一关。通过本游戏让玩家体会到让子弹飞一会儿的真实感。因此,本游戏要实现部分物理效果,惯性、重力下降、摩擦力、弹性碰撞等

34、。同时,本游戏还要提供玩家数据管理,系统默认为玩家保存和更新关卡信息。玩家也可以删除所通过关卡的信息。3.3 游戏的功能需求分析功能需指系统必须提供的服务。用例图的主要作用是描述参与者和用例之间的关系,帮助开发人员可视化的了解系统的功能。根据游戏的规则和游戏策略,玩家在游戏开始之前可以通过按键选择操作,在游戏开始以后就可以通过触摸屏控制主角发射子弹和发射子弹的位置来进行游戏。玩家的操作有设置播放背景音乐、设置播放音效、关闭音效、关闭背景音乐、点击触摸屏、选择菜单项。玩家用例图如图3-1所示:图3-1 玩家用例图对数据管理用例的描述如下表所示:表3-1 数据管理用例描述用例编号: 102用例名称

35、:数据管理用例概述:玩家通过选项菜单选择删除数据或者查看数据围私有参与者:玩家前置条件:玩家开始游戏后置条件:根据用户操作对数据库数据进行操作。基本事件流:查看数据:玩家在游戏主画布上选择开始游戏选项。系统显示所有已经通过的关卡的数据。删除数据:用户选择清除数据选项。系统删除所有关卡的数据。用例终止其他事件流:当用户没有通过任何一关时,不显示该容。异常事件流:无后置条件:无从系统部角度分析系统的功能需求可能有物理模拟、动画管理、声音管理、资源管理和游戏状态管理功能。下面开始介绍各个功能模块的需求。 物理模拟模块可以模拟常见的物理现象,例如:重力下降即不在地面的物体例如马匪、箱子、球等物体可以做

36、自由落体运动;摩擦力即物体运动一段时间以后可以自动停止;弹性碰撞即子弹击中马匪以后,子弹穿过马匪的身体即子弹不改变运动方向且动能不变;子弹击中墙壁等静止的建筑物或者道具后,子弹原来的运动方向上的速度变为零,然后按照光线反射原理,子弹反弹。子弹的速度大小不变。物理模拟模块的用例图如下图所示:图3-2 物理模拟模块用例图物理模拟模块中的飞行用例的描述如下表所示:表3-2 飞行用例描述用例编号: 109用例名称:飞行用例概述:子弹发射以后按照80像素每秒的速度做匀速飞行。围私有参与者:子弹前置条件:玩家开始游戏后点击触摸屏并且玩家还有子弹后置条件:子弹数减少一个,子弹开始运动。基本事件流:玩家开始游

37、戏后,点击触摸屏。用户还有子弹,绘制一枚子弹并且子弹开始运动。子弹数减少一个。子弹发送碰撞。子弹碰撞数到10次,子弹消失。用例终止。其他事件流:当用户没有通过任何一关时,不显示该容。异常事件流:无后置条件:无 动画管理动画就是根据时间而发生连续变化的图画。在手机游戏中,丰富多彩的动画给游戏增加不少吸引力。动画管理模块负责将游戏中的场景、精灵、道具绘制到画布中。本游戏中的动画管理主要分为两个部分:一部分主要是绘制游戏中的场景,另一部分主要是绘制物理模拟模块中的Body即建筑、精灵和道具。通过动画的绘制操作才能让游戏更真实更具有吸引力。 声音管理在支持混音的手机上根据玩家的输入播放相应的声音。游戏

38、开始后必须要有背景音乐,游戏开始页面和游戏过程中玩家的操作要有提示音乐,英雄发射子弹后要播放发射子弹的声音,英雄打光子弹以后要播放扣动扳机而没有子弹的声音,子弹碰撞墙壁等要有音效并且玩家可以设置是否播放音乐或音效。 资源管理资源管理实现资源的加载和释放。例如:动画管理模块需要图片资源进行绘制操作,资源管理模块就会提供图片。在动画管理模块不需要这个图片时,资源管理模块就将这个图片的引用设为null,这样虚拟机就能回收这块存7。 游戏状态管理判断游戏的状态是继续游戏、玩家胜利或是玩家失败。根据游戏的状态决定游戏的进程。 RMS管理。游戏需要保存玩家通过每一关的信息如:玩家通过的关卡ID、玩家发射的

39、子弹数目、玩家通过此关时共有多少子弹最大子弹数。关卡信息里还要保存关卡ID、关卡奖励的子弹数。系统还可以保存游戏的状态。3.4 小结本章针对让子弹飞这款益智游戏拟实现的功能,分析得出本游戏的操作流程。根据J2ME开发的特点和游戏策略得出该系统的功能需求,最后使用UML对系统进行建模,得出了本系统的用例图。4 系统总体设计4.1 功能设计在需求分析阶段获取了系统拟实现的功能模块后为了将所有的功能模块组装成一个系统,就需要一个模型即框架来组织这些模块。所以,本小节将介绍传统的基于J2ME的游戏框架和在传统框架基础上整合了Emini物理引擎的游戏框架。4.1.1 游戏框架设计一般基于J2ME的手机应

40、用程序都必须是MIDlet的子类,并且子类必须重写父类的startApp、pauseApp和destroyApp。当应用程序运行时首先调用startApp,当应用程序运行时发生暂停时如来或者短信pauseApp可能被调用,这依靠手机的具体实现,MIDlet结束时或者玩家结束MIDlet程序时destroyApp被调用。游戏类型的应用程序还额外需要一个或者几个画布并重写画布类的paint方法以便实现游戏的逻辑处理和绘制游戏中的场景、精灵、道具等游戏元素。同时游戏画布类还要实现Runnable接口,通过run控制游戏的运行,除此之外游戏一般要和用户交互。根据交互的方式不同可以选择要实现Comman

41、dListener接口或者实现触摸屏事件的响应。通过实现commandAction方法响应玩家按键输入。如果游戏还需要响应玩家触摸屏事件或者按钮事件还必须根据系统和玩家的交互需求重写画布类keyPressed、keyRepeated、keyReleased、pointerPressed、pointerDragged或pointerReleased方法8。一般框架的总体实现类图如图4-1所示:图4-1 一般框架的总体类图由于本游戏要实现一些物理效果,所以要集成Emini物理引擎。这就让本游戏的框架与传统的框架有些不同。首先是加入了一个中间的容器。传统框架中游戏中出现的角色比如精灵、怪兽、建筑物等

42、是直接绘制在画布的。而集成了Emini物理引擎的游戏框架,它的游戏场景需要直接在画布中绘制,游戏中的马匪、箱子、主角都是集中在GraphicWord类中。然后由这个GraphicWord类将所有元素绘制到画布中。这种绘制方式屏蔽了底层的绘制细节,提高了绘制的效率,减少了绘制的编码量。只需由所有元素的父类即Body类实现绘制方法。其次,游戏的逻辑控制实现要由画布的paint方法转移到物理引擎的tick方法。tick方法的作用是在物理模拟的每一个周期,处理游戏的物理方面的逻辑请求和物理模拟请求。逻辑请求的一种情况是:子弹击中了马匪,马匪应该死亡即设置马匪的isAlive属性为false,同时子弹的

43、生命值减去1。第二种情况是马匪被道具砸中,本游戏中就认为马匪被砸死,所以要设置马匪的isAlive属性为false。物理请求的情况是指物理模拟的需要,为了实现这个请求,在GraphicWord类的tick部,可以调用父类的tick方法。最后,本系统将游戏分为四个层次。这四个层次依次是数据访问层、业务逻辑层、游戏控制层、游戏视图层。数据访问层有两个模块第一个是对使用RMS存储的数据和对以文件形式存储的游戏资源地管理。业务逻辑层主要是由两个模块组成,一个是声音管理模块另外一个是物理模拟模块。控制层主要是由游戏状态模块组成,同时还要接受视图层传送的用户输入处理后返回处理结果。视图层由动画管理模块组成

44、。4.1.2 功能模块设计根据需求分析得出的系统拟实现的功能,可以进而设计各个模块中所包含的类。 物理模拟模块中涉及到的参与者有主角、马匪,障碍物如箱子、铁球还有主角的武器子弹。根据面向对象的思想,可以抽象出以上所有对象的共性符合Body类的属性。所以,将所有对象的超类定义为Body。又因为主角、马匪和子弹的特殊性,所以定义MySprite类和Bullet类为Body类的子类。Hero和Robber为MySprite类的子类。GraphicWord是Word类的子类,该类作为所有Body类的容器。GraphicShapeSet类管理所有Body类的Shape对象,该类作为将每个精灵的形状和图片

45、连接在一起的桥梁。 动画管理模块主要涉及到如何向用户呈现出精彩的游戏画面。所以本模块主要是由Canvas类的子类StartCanvas、Index、Simulation、EndCanvas等画布类来实现的。 声音管理模块主要是管理背景音乐、前景音效的。所以,要用处理声音播放业务的类Audio和实现背景音乐播放的BackMusic和ForeMusic。由于音乐播放服务具有同步性所以BackMusic和ForeMusic是Thread类的子类。 资源管理模块主要是对游戏中用到的图片、声音文件进行管理。所以,涉及到文件的加载类LoadResource类。 游戏状态管理模块主要是判断游戏的状态即游戏的

46、输赢、对用户输入的处理。主要由Main类完成此功能。 RMS管理即数据库管理功能。为了完成对关卡数据的管理和游戏的保存操作结合RMS存储格式的特殊性,数据库操作的基类为BaseDao,Guan和SaveGame是它的子类。4.2 数据库设计4.2.1 数据库概念结构设计根据需求分析可以得到游戏数据库概念模型9即E-R图,如图4-2所示:图 4-2 E-R图 其中各个实体的属性如下:关卡实体的属性包括:关卡奖励、关卡ID、默认子弹数量,主键是关卡ID。玩家实体的属性包括:最大子弹数、消耗的子弹数、关卡ID,主键是关卡ID。保存的游戏实体的属性包括:关卡ID、地图信息、消耗的子弹数,主键是关卡ID

47、。保存的游戏是指,玩家正在玩一个游戏,因为某种原因接、查看短信等游戏中断了,系统自动保存玩家现在的游戏状态。4.2.2 数据库逻辑结构设计 RMS原理MIDP提供了一种特殊的数据持久化机制RMSRecords Managements System,记录管理系统。RMS本质上就是一个小型数据库管理系统,它以一种简单的、类似于普通数据的表格的形式组织信息,并将信息持久化存储,以供应用程序在重新启动以后继续使用。但RMS存储的不是字段而是字节数组,所以在数据存储之前就需要编程者设计数据的格式。一个Records Stores存储的数据,如表4-1所示:表4-1 Records Store 存储数据R

48、ecord ID数 据1字节数组2字节数组3字节数组 数据存储格式玩家通过某一关卡,需要保存通过此关卡的信息到RMS中。玩家RecordStore存储数据的格式为:关卡ID、子弹数、最大子弹数。例如:040810表示第四关用了8发子弹,系统给玩家10发子弹。然后将字符串040810转化为字节数组存入到RecordStore,同时返回加入的RecordID。关卡的数据格式为关卡ID奖励子弹数,如0101,第一关奖励一发子弹。存储游戏的数据格式为:关卡数剩余子弹数最大子弹数shape对象的数量shape对象的容Body对象的数量Body对象的容,具体包含以下容关卡ID剩余子弹数最大子弹数Shape

49、ID对应的ImageID shapeCount ShapeID ShapeType w h Mass Elas Friction BodyCount x y ShapeID Dynamic Gravity canRation RotionDefFX。说明:游戏的基本单位是Body,而刚体的创建必须基于Shape形状对象。所以Shape对象必须存入RMS。然后存储Body对象。FX表示数据使用FixPoint数据类型存储。4.3 接口设计根据以上分析,新的游戏框架整合了Emini物理引擎并且将游戏的各个模块组装成了一个完整的游戏。本系统的总体类图如图4-3所示:图4-3本游戏框架的总体类图下面主

50、要介绍一下物理模拟模块中的核心类Bullet类的设计。Bullet是子弹类,该类在主角发射子弹以后出现在画布上。子弹出现的位置经过计算以后可以得出,然后再根据此时子弹的射出方向计算出子弹的发射速度,子弹在飞行过程中要和建筑物、马匪和地图边界碰撞。当子弹发生碰撞以后,子弹的飞行方向发生适当的变化。子弹的碰撞次数是一个定值10,当碰撞次数小于10时,子弹可被显示在画布否则子弹消失。经过以上描述,可以得出Bullet类是Body类的子类、具有Body类的所有属性和方法,同时具有自身的特殊性例如:速度大小、速度方向、生命值属性、是否显示、位置属性等属性和改变速度方向、获取子弹出现位置、改变速度大小、获

51、取子弹生命值等方法。因此,Bullet类的类图如图所示:图4-4Bullet类的类图4.4 小结本章在需求分析的基础上,使用面向对象的编程思想和UML建模语言10结合J2ME开发框架和Emini物理引擎的特点,将传统游戏框架和物理引擎结合得出了游戏的框架设计和各个功能模块的总体设计。本章还根据游戏的实际需要设计了系统数据库的概念模型和逻辑模型。在以上分析的基础上,进行了系统类的设计。5系统详细设计与实现5.1 功能模块详细设计5.1.1 物理模拟模块物理模拟模块的实现主要是基于Emini物理引擎,通过调用、重写或实现新的方法完成碰撞检测和处理、满足动量定理的碰撞后的反应、物体运动过程中在摩擦力

52、的作用下物体能静止;物体在空中时能够在重力作用下自由下落。同时,例如子弹还可以设置是否受到重力影响。上述需求都可以通过实现Emini物理引擎所提供的接口来实现。但是,由于游戏的特殊性,需要设置单独处理子弹飞行的初始化工作和处理子弹碰撞后的反应的算法即在Body类的基础上适当的加入子类的特殊方法。首先介绍子弹飞行之前的初始化工作即确定子弹的出现位置和子弹的速度大小。图5-1子弹出现位置示意图如图所示:O点代表主角的肩部,直线代表主角的胳膊A点代表触摸屏上玩家触摸的点,C或者代表枪口。 表示子弹出现的位置和水平方向逆时针的角度。直线的方程,圆O的方程: 已知r=23,O点坐标,A点坐标。 求直线

53、的斜率。 联立直线方程和圆O的方程。可求解出C和的坐标。 根据点A的位置确定子弹是在C或者出现。子弹的出现位置确定以后,下一步要确定子弹的初始速度,根据上一步求出的斜率k利用反正切方法可求解出的大小。则子弹的初始速度为:= = 根据以上分析子弹飞行的初始化工作已经完成。在介绍子弹碰撞处理算法之前,首先定义方向向量:我们约定1表示X轴、Y轴正方向,-1表示负方向。则方向向量可表示2D平面所有X轴和Y轴正负速度方向的组合。其次介绍子弹飞行过程中碰撞的处理算法。 第一种情况较为简单即子弹和MySprite类型的子类之一马匪碰撞。通过设置子弹的弹性系数可使子弹进行不改变运动方向的子弹穿过马匪碰撞,算法

54、结束。否则执行第2步。 第二种情况是子弹和建筑层发生了碰撞,它要改变速度方向。首先判断子弹和几个物体发生了碰撞,具体情况如图所示: 图5-2 子弹的碰撞1 图5-3 子弹的碰撞2 图5-4 子弹的碰撞3图5-2表示子弹在两个Body的结合部位发生了碰撞,图5-3表示子弹和一个物体发生了碰撞,图5-4表示子弹在两个物体的夹角部分发生了碰撞。若子弹发生碰撞的情况如图5-2或者图5-3所示,则执行第3步。否则算法执行第4步。 判断子弹和物体的相对位置如图:Q图5-5 子弹和碰撞物体的相对位置示意图E点表示子弹的位置,A、B、C、D四个点表示刚体的四个顶点。首先,根据A、B、C、D四点的坐标求出直线、

55、的方程,然后判断E点和O点的相对位置。若,根据平面几何知识,若E在部则E点的纵坐标y1一定满足,子弹的X轴方向系数x_d 改变为1。反之,若E在O左侧即,子弹的X轴方向系数x_d 改变为-1。若子弹既不在部也不在部则进行下一步判断若则子弹在P点出现,子弹的Y轴方向系数y_d变为-1,反之子弹在Q点出现,Y轴方向系数y_d变为1。特殊的四种情况是子弹在直线或者直线上时,此处只列举一种情况如图5-6所示:图5-6 子弹方向改变的特殊情况当子弹无论是以方向向量还是方向向量所示的方向和刚体相撞,都沿着方向向量所指方向继续飞行。算法结束。 根据图5-4提示可知子弹的前进方向已经不能通行,所以,子弹的Y轴

56、方向系数y_d=-1, X轴方向系数x_d=-1;其它情况类似,这里不再叙述。算法结束。根据需求分析,物理模拟模块的活动图如图5-7所示:图5-7 物理模拟模块的活动图5.1.2 资源管理资源管理实现资源的加载和释放。资源的加载主要分为图片资源、地图文件、音乐文件。资源加载必须保证游戏的流畅性,所以,在资源被使用前就必须被加载到存中。若该资源不再被使用就必须释放该资源所占用的存,提高存的利用效率。为了实现以上目的、资源的加载分步骤进行: 加载首页中的图片、音乐资源。 根据玩家选择的选项菜单,决定是加载游戏的地图、图片等文件还是加载其它画布的图片。若游戏退出则释放游戏中用到的资源如背景图片、声音

57、文件、地图中所用到的图片等资源。5.1.3 游戏状态管理游戏的状态是继续游戏、玩家胜利或玩家失败。游戏状态的判断条件有: 主角死亡。 主角还有子弹。 马匪被全部被消灭。这三个条件组合起来就决定了游戏不同的状态,在每一个游戏周期中,游戏状态管理就会调用checkGame方法,检测游戏的状态,然后再根据不同的状态,调用handleEvent方法产生游戏状态码即三个整型变量0,1,2。在程序中这三个整型变量分别用Game_Continue,Game_Over、Game_Success表示。视图层根据状态码响应不同的事件。当玩家胜利时,显示胜利画面即由Simulation画布转向EndCanvas画布

58、并显示胜利的对话框。在该对话框上,玩家可以选择是继续游戏、再玩一次或者选择关卡。当玩家闯关失败时,显示EndCanvas画布并显示失败的对话框。通过该对话框,玩家可以选择重玩一次或者选择关卡。5.1.4 动画管理动画管理模块负责将游戏中的场景、精灵、道具绘制到画布中。由于手机存的限制和手机运算能力的限制,若游戏量使用空间较大的图片就很有可能造成应用程序大于手机支持的应用程序最大存限制而不能在手机上安装或运行,或者由于应用程序运行期间的存峰值大于手机的最大存限制,也会造成程序运行异常。所以,本系统采用关键帧方法实现动画管理。 绘制原理首先,将图片整体读入存。然后按照游戏需要绘制某一帧或某几帧的图

59、片。第一帧第二帧如图5-8所示:图5-8马匪图片在图片进入存后每一个图片对应一个Body类的对象或者Body类的子类对象,Body对象有位置信息即横坐标x,纵坐标y,这两个坐标确定图片的位置。马匪或者主角对象有是否或者的属性,这个属性确定图片是否翻转。所有图片还会对应一个图片数组,该数组依次保存图片的大小,帧数,利用这个数组可以确定如何切割图片即确定每一帧图片。绘制图片的时候要首先判断马匪的状态,若马匪的isAlive属性为true则马匪是活着的然后就绘制第一帧,若马匪死亡,就根据马匪是如何死亡的绘制第二帧图片。例如:马匪是被左边的子弹击中则马匪就要向右侧倒下,第二帧图片就要顺时针旋转90度。

60、最终要实现的效果如图5-9所示:图5-9 绘制静止和死亡的精灵效果 绘制场景综合考虑关键帧绘制法和手机存和游戏资源的大小的限制。游戏中的一些图片资源按照图5-8所示的方式,进行了合并。图片合并的方式是将同一个对象要用到的图片,整合到一图片上,这样就可以缩小图片的总大小。游戏中的场景分为三层:建筑层、道具层、精灵层。建筑层主要由墙壁和边界这两种对象组成。精灵层主要由马匪和主角组成、道具层就要依据各个关卡的情况而定。主要的道具有铁球、小木箱、大木箱等。绘制这三层时必须协调才能完成场景的搭建。这建筑层效果如图5-10所示:图5-10 建筑层的效果精灵层如图5-11所示:图5-11 精灵层的效果道具层

61、的效果如图5-12所示:图5-12 道具层的效果游戏主画布会将这三层按照,建筑层、精灵层、道具层的顺序进行绘制。首先,将加载完成的图片对象有资源管理模块传递给动画管理模块,然后该模块使用Graphic类的实例调用piant方法将图片绘制到画布,这样建筑层就绘制完成了。然后再依次绘制精灵层和道具层。最终完成游戏场景的创建。这样就满足了根据游戏状态绘制特定的图片需求。游戏中还需要相应的字符提示玩家游戏的状态。比如:现在游戏进行到第几关、玩家还有几发子弹。这些信息可以帮助玩家游戏。综上,绘制完成的地图效果如图5-13所示:图5-13 第2关地图效果5.1.5 声音管理在支持混音的手机上根据玩家的输入播放相应的声音。同时,手机也能播放背景音乐。由于,MMAPI各个产商实现的方式不同而且

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!