ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:118.81KB ,
资源ID:14433559      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/14433559.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(java技术对手机游戏的设计与实现.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

java技术对手机游戏的设计与实现.docx

1、java技术对手机游戏的设计与实现毕业论文 题 目 JAVA技术对手机游戏的设计与实现 学生姓名 学 号 院 系 专 业 计算机科学与技术 指导教师 目 录【摘要】21.Java简介311 Java的诞生 312 Java的发展历史 42.Java的开发环境和特点42.1 Java开发环境 42.2 java的语言特点 42.2.1 java技术对新手来说是简单的42.2.2 java技术是面向对象的42.2.3 java技术是可移植的43.雷霆战机手机游戏结构分析 43.1 初步构思43.2 游戏基本框架43.3 算法分析94.后期优化 154.1 优化的意义 154.2 从哪里开始优化 1

2、54.3 何时不用优化 154.4 结论 165.参考文献 166.致谢17JAVA技术对手机游戏的设计与实现【摘要】现在,移动电话用户持续增加,手机的功能越来越复杂,且手机的各种服务行业越来越多样化。J2ME技术将是未来手机游戏的发展方向,许多手机制造商诺基亚、索尼爱立信等和手机游戏提供商非常关心。虽然这一领域的技术不是很成熟,但可以预期,在不久的将来,这项技术必须迅速发展,成为另一个热门手机游戏行业。该文介绍了基于J2ME的Java手机游戏雷霆战机的设计和实现,Sun Java(TM)无线工具包2.5.2 CLDC 3.2和Eclipse开发工具,比如使用Java语言,开发了一个操作简单、

3、易于使用的飞机射击游戏模式。色彩斑斓的飞机,游戏背景和各种各样的包和子弹将大大增加游戏的乐趣。从准备到设计实现,论述了游戏的开发背景、总体设计和功能实现等,本文首先对这个游戏的功能分析。紧随其后的是游戏的所有准备工作,包括设计游戏规则、材料制备和接口设计主要设计、类的设计和主要算法分析。核心部分是工作准备,工作就绪后本文将介绍各种效果和实现算法。【关键词】J2ME;Java;手机游戏;雷霆战机1.Java简介1.1 Java的诞生sun公司在1990年12月,由帕特里克诺顿迈克谢里丹和詹姆斯高斯林组成了一个名为Green Team,主要目标是开发一个分布式系统架构,使其可以运行在消费电子产品操

4、作,Java开始称为Oak(橡木),原因是詹姆斯高斯林的办公室窗外,偶尔的一棵橡树(橡树),但有一个公司已经使用了这个名字,工程师讨论这个新名字以后喝咖啡,看着手中的咖啡,顺便把Java的名称。1.2 Java的发展历史C和C编译器是由sun公司工程师帕特里克开发的,因为当时使用API文档比较困难。所以帕特里克打算切换到下一个目标,并且他拿到了研究公司的“隐形计划项目”。“隐形计划”又称为“绿色项目”,他和其他几个工程师在一个小工作室里面研发新的技术,一种针对家用电器的编程,sun公司预测未来的发展可能在电器领域。最初考虑用的是C语言,但是由于科学家们发现C和API在这些领域有一个很大的问题,

5、工作小组使用的是嵌入式平台,可以使用的资源有限,而且C语言开发太复杂,会遇到很多开发人员遇到的常见的错误,比如,C语言缺乏垃圾回收系统,不利于安全便携。所以他们像要一个平台易于移植到各种设备中。由于现有的资金开发团队决定开发一个新的语言,并在一份报告中称为“未来”,sun公司工程师认为这个技术应该基于C语言基础上并且面向对象进行。最初命名为C,但是很快就被放弃了。之后工程师创建的一个新语言命名为他们办公室外的一棵树“橡树”。跟研究其他项目一样,工程师们没日没夜的尝试直到1992年的夏天,他们展示了一个包括绿色操作系统的橡木编程语言。它的硬件最初尝试PDA设备,被任命为star7,生动的图形化界

6、面只能代理来帮助用户。在1994年6、7月之间,经过三天的头脑风暴之后,约翰盖吉尔吉斯斯坦、詹姆斯高斯林比尔欢乐,帕特里克诺顿韦恩罗斯和埃里克库米团队决定改变目标,将这个技术放到万维网,他们认为未来的万维网是高度交互的视觉进化,期望能看到有线的网络电视。同时,帕特里克写了一个小型的web浏览器webRunner,后来改名为HotJava。因此后来橡木重命名为java。1994年10月java1.0版本已经公布可以以下载,sun公司的科学家约翰已经宣布java技术,这个版本的负责人马克安德森宣布了网络浏览器支持java,公司成立于1996年1月,sun公司的java业务集团专门从事java技术的

7、发展。2.Java的开发环境和特点2.1 Java开发环境Java需要JDK提供它的运行环境,安装JDK和设置环境变量,您可以继续Java开发,您可以编写Java源代码文本文档。但为了提高编码质量和速度的写作需要一些开发工具。开发工具,我认为这是最好也是最强大的必须属于eclipse,它是免费的,但收费myeclipse网上有很多注册码,web开发,你可以得到一个myeclipse。当然安装一些插件的eclipseWEB开发也是可能的。2.2 Java的语言特点2.2.1 Java技术对新手来说是简单的 Java技术对于初学者来说比较简单,它抛弃了C语言中的指针这些复杂绕脑的部分,更倾向于人性

8、化的方式来解决程序问题。2.2.2 Java技术是面向对象的 在现实世界中任何实体都可以归因于对象,对象之间的消息是相互交换的,是现实世界模型的一种自然延生。所有面向对象语言都有三个基本特性:封装、继承、多态。面向对象,直白点说就是把真实世界数据化,然后打包就叫对象,以人为例,人的身高、体重、外形特征这些都属于人的属性,同理面向对象也有类似的属性。 2.2.3 Java技术是可移植的这个系统是一个程序移植到其他系统上编译后的解释执行,只是一个简单的粘贴和复制后,不影响程序的效果。3.雷霆战机手机游戏结构分析3.1 初步构思雷电战斗机很经典的手机游戏,游戏规则很简单。玩家进入游戏后,可以根据自己

9、的喜好,选择不同的游戏模式。在这个游戏中,有两种游戏模式。第一个是闯关模式,每关有一个大BOSS,玩家被赋予三条生命,一共有两关。另一竞争模式,玩家在这个模式仍然给出了三条生命,玩游戏不限制,每次袭击了敌人的飞机后,玩家将获得相应的分,累计得分,最终结果时显示。总之,游戏过程是相对明确。根据游戏设计的基本思想,主要涉及的对象可能是如下:(1)玩家飞机:飞机有不同的选择,玩家在游戏中,通过键和确定键控制移动和子弹。(2)敌人飞机(包括普通小敌机和大boss):共有五种小敌机在游戏中,两个“boss”,根据不同的模式和物种数量控制小敌机。(3)子弹包:当玩家飞机撞到子弹袋后可以转变成不同的子弹,一

10、共有4个子弹可以改变。(4)HP包:碰撞HP包时,玩家生命增加5。每被敌机击中,HP降低2。HP不少于6为绿色,不少于4黄色,其余为红色。(5)生命包:当玩家撞到此包时,玩家生命值加一。每条生命有10HP。(6)防御包:当玩家撞到此包时,玩家被敌机子弹击中血量不减少,当敌机撞击到时,敌机被炸毁。上面的对象,除玩家的飞机是固定生成在界面上,其他对象都是随机生成的。3.2 游戏基本框架当玩家进入游戏应用程序,第一个进入欢迎界面,这个界面有两个选项,启动游戏和游戏说明。游戏说明就是帮助菜单,包括一些简单的介绍游戏和一些操作说明。当选择开始游戏,玩家进入游戏模式选择界面,在这个界面中,玩家可以根据自己

11、的喜好选择不同的游戏模式。为了使游戏更有趣,玩家可以选择他们喜爱的模型飞机,在竞争模式下,玩家可以选择自己喜欢的游戏场景。(1)基本的规则。当游戏开始时,玩家通过方向键控制飞机的运动,确定键控制飞机的子弹。闯关模式中,玩家击落不同数量的小飞机才会出现一个boss,boss有一定的血量,达到一定次数才能被消灭,玩家将能够进入下一个级别。在竞争模式下,玩家在三条生命下,击落越多的敌机为胜利的标准,每击落敌机,玩家可以得到一定的分数,最终积分记录为这场比赛的战绩。(2)飞机的产生。飞机产生方式是随机的,连续产生不同类型的小敌机,最终产生“大boss”。闯关模式下用计数控制小飞机的产生数量。竞争模式下

12、,小飞机数量无限,没有停止,直到比赛结束。(3)包的生成:原理同飞机的产生。(4)我方飞机子弹的产生:飞机子弹的产生,通过监听确定键来生成。当你按下这个按钮,那么发射相应的子弹。子弹的位置和我们的飞机当前位置有关。(5)我方飞机的移动:通过监听方向键来控制飞机的移动。(6)敌机、包及子弹的移动:敌机、子弹在产生之后,以一定速度向同一个方向移动。(7)飞机的消除:飞机被击中后为直接移除,添上爆炸的图片。(8)胜负判断:闯关模式:当所有小敌机及大boss被击败后,连续闯过两关才为胜利。在竞技模式中:当玩家三条命全部消耗为结束,然后通过分数判断战绩。3.3 算法分析通过上面的介绍得知游戏有闯关模式和

13、竞争模式。在闯关模式中,玩家可以选择自己的飞机类型,为了让玩家在闯关模式体验层次感的难度,现在设计如下。在材料准备总共五个小敌机,增加趣味,在第一组只有四个小敌机,在第二盘设置5种敌机,同时在数量,第一关有30小敌机,第二个关有40个。,当然,也可以扩大设置差距,让难度差距更加明显。在竞争模式下,玩家可以选择自己喜欢的场景,敌机的种类设置是一样的,小敌机的生产随我们的飞机爆炸而结束。当我们的飞机击落一个敌机分数加上10;如果我们的飞机在保护状态下和小敌机撞击,小敌机坠毁,同时加10分。随机生成飞机算法在这个游戏中,敌机的出现是随机的,并且可以重复。我们可以使用随机函数区间随机控制飞机。rand

14、om.nextInt()表示随机生成一个INT类型的数。这个函数不仅可以控制产生一个小敌机的时间间隔,同时返回这个值可以用来标记的各种小敌机。addElement添加一个元素的函数、package(arg0,arg1,arg2)函数表示生成的包,参数arg0表示包的种类,(arg1,arg2)表示添加的包所在界面中的位置。EnemyFactory.addEnemy(arg0,arg1)表示添加敌机,参数arg0表示敌机的种类,arg1表示敌机容器,属于Vector类定义的对象。以闯关型为例,此处算法的思路主要表示为:可以通过设置一个变量enemycount来控制产生小敌机的数量,当出现的敌机数

15、量没有超过30架时,使用随机函数不断地生成各种敌机和包,当敌机的数量超过30架时,停止产生小敌机,在屏幕的最上端生成大BOSS。流程图如图3.13。Y 图 3.13 随机生成敌机流程图 敌机和包移动的算法它的飞行速度由speed变速控制。并在每次之前判断是否超出界面。主要用到函数:sprite.move(0,Math.abs(speed);碰撞检测算法在这个游戏中,会经常发生碰撞,子弹和飞机的碰撞,飞机和道具包碰撞、飞机和飞机碰撞。因此,碰撞检测和处理是非常重要的。这个游戏使用Sprite类对碰撞检测具有更好的支持。在Sprite定义一个矩形区域,如果其他Sprite或图像进入区域,作为一个碰

16、撞。用户还可以不调用这个函数,因为默认情况下定义整个区域都定义Sprite。如何检测是否发生碰撞? public final Boolean collidesWith(Sprite s,Boolean pixelLevel)这个函数的第一个参数是测试对象的碰撞,第二个参数是一个布尔类型,如果这是true,则认为两个Sprite上不透明点发生了重叠,导致碰撞,如图3.14所示,如果它是false,这发生在两个矩形区域Sprite重叠,计算碰撞,如图3.14所示。参数为true,会使碰撞效果更加生动。图3.14 碰撞检测如上述所示图(1)和(2)是将要发生碰撞的飞机图片,因为这些图片格式是PNG图

17、像,所以这幅画的背景是透明的。如图(3)所示的两架飞机相撞,参数值是true,就是红色线标志是一个矩形区域的碰撞。如图(4)所示的两架飞机参数值为false的方式碰撞,即飞机机身红线标志着发生了碰撞。为了让碰撞更生动,这个游戏使用一个图(3)碰撞的方式。线程设计创建所有的动画游戏,是使用一个线程准备多个图像序列。线程意味着程序的运行单位,使用线程是因为可以方便处理。当一个类的构造函数中打开一个新线程,该线程将不断在运行函数接受用户输入和处理,根据屏幕重绘。游戏线程主要由三部分组成:键盘输入的检测(与玩家交互),更新游戏场景(游戏逻辑),绘制游戏画布。根据三个模块可以用来设计一些2D游戏,基本上

18、三个模块是相互联系的,根据模块的思想来实现游戏线程将更加面向对象的,和容易理解。如果程序运行速度快于预期的速度会让玩家感觉震动和闪光,导致影响游戏的效果,因此还需要测试每一帧的操作时间,如果太快,等待一段时间,如果太慢,暂停当前线程允许其他线程执行。在这个游戏中,当页面跳转时不涉及线程状态,只有当所选的游戏模式,启动游戏时线程开始。以闯关模式第一关为例。启动游戏后的首先绘制背景和菜单等等,同时建立按键和监听。然后可以开一个线程。重写Runnable Run()方法来启动一个线程。线程在Run()方法,一般过程如下。首先获取当前线程,设置帧率,帧速率的大小至关重要,正确的帧速率可以防止屏幕闪烁。

19、记录开始时间的线程,然后生成各种各样的包和飞机,控制其运动,碰撞检测和处理在同一时间进行。最后判断测试每帧的运行时间,如果过快,等待一段时间。类的设计程序的主要类制作的J2ME手机游戏,主要涉及三个主要的类:MIDlet类,Canvas类,Graphics类。此外,还为飞机和子弹设计一个特定的类,方便程序设计。(1)MIDlet类MIDlet程序有三种状态:暂停状态,运行状态和损坏状态。主要结构的三个状态转换法MIDP应用程序生命周期,这是J2ME应用程序体系结构的建设的基础。一个完整的生命周期过程包含于程序结构中。该声明继承了javax.microedition.MIDlet抽象类。从API

20、文档指出,能理解MIDlet是MIDP应用程序,必须扩展类,使应用程序管理软件可以通过对象实例,语句和状态变化的机制来控制MIDlet。在这个游戏中通过PlaneGameMIDlet类继承自MIDlet类。实现游戏的核心代码PlaneGameMIDlet类。程序使用PlaneGameMIDlet类startApp方法来启动游戏,通过display对象将显示GameCanvas类对象。(2)画布Canvas类Canvas类是Displayable的子类,主要用于处理低级事件如键盘关键事件,以及需要绘制屏幕程序。Canvas类的功能主要包括以下几类:手机屏幕的属性,绘画方法、事件处理、操作方法(包

21、括键值和游戏操作按钮)。在这个游戏中,各种各样的接口是通过继承Canvas类画画。地图界面通过Paint()方法,通过监控commandAction函数的按钮来控制界面之间的跳转。(3)Graphics类Graphics类提供了一个简单的二维图形。具有24深颜色的渲染能力,用三原色给每个字节代表每个条目的颜色(4)Vector类在这个游戏中,各种各样的敌机,子弹,包和爆炸图像使用Vector数据结构,这个结构编码时让游戏更加简洁方便。Vector容器是一个模板类,可以存储任何类型的对象。Vector对象可以有效地在运行时添加元素,和Vector中的元素存储在一个行。使用Vector类型,可以方

22、便使用removeElementAt()和addElement()到缓冲区队列中删除和添加元素。在游戏中有很多类,如下图所示。PlaneGameMIDlet类负责保持display对象,显示Canvas并启动游戏,Canvas类是用于显示游戏菜单和各种接口,包括模式选择界面,飞机选择界面,场景选择界面,失败和成功界面等等,game类负责显示游戏Canvas;还包括子弹类bullet,子弹的各种继承类;飞机类plane,我们敌人的飞机和自己飞机是通过继承自己的类。除了上面的一些重要的类还包括几个装入LevelLoad类游戏,子弹库BulletFactory类,地图terrain类,包packag

23、e类,爆炸bomb类等。下面将介绍游戏的主要类结构,如图3.18至图3.26所示。 图 3.18 PlaneGameMIDlet类 图3.19 ChoiceCanvas类 图 3.20 BulletFactory类 图 3.21 EnemyFactory类 图 3.22 地图类 图 3.23 爆炸类 图 3.24 敌机的类 图 3.25 我方飞机类 图 3.26 包类 程序架构主要架构程序如上所述MIDP应用程序生命周期的法则,它是建设的J2ME应用程序体系结构的基础。从API文档指出,能理解MIDlet是MIDP应用程序,必须扩展类,使应用程序管理软件可以通过对象实例,语句和状态变化的机制来

24、控制MIDlet。类方法允许应用程序管理软件的扩展来创建、启动、暂停、和毁灭MIDlet。应用程序管理软件是通过接口运行和控制一个MIDlet类。如图3.27所示。游戏运行界面的实现根据本章的设计接口,接口是主要的背景图像,添加界面上的各种图标和各种各样的文本。此外还包括功能键和图纸的标题的接口。不同的接口设计方法大致相同,主要在于画面的布局。由于模拟器的安装,不同的手机模拟器有不同的屏幕尺寸,所以知道模拟器的大小是非常重要。可以通过测试表明,该游戏安装模拟器的的大小:屏幕宽度:200像素,屏幕长度:240像素。所以下面将介绍飞机选择界面,例如游戏运行的接口实现。绘制界面的伪代码的欢迎屏幕(模

25、型接口,接口映射场景选择界面和飞机选择界面相同)this.setTitle(选择飞机);try image = Image.createImage(/bckgrd1.jpg); imageOption = Image.createImage(/option3.png); myPlane1 = Image.createImage(/myPlane11.png); myPlane2 = Image.createImage(/myPlane12.png); catch (IOException e) . /初始化按钮exit = new Command(退出, Command.BACK, 0);st

26、art = new Command(开始,Command.ON,1); /添加退出和开始按钮this.addCommand(exit);this.addCommand(start);/设置背景图片this.getGraphics().drawImage(image, 0, 0, Graphics.LEFT|Graphics.TOP);/设置两种飞机在界面中的位置this.getGraphics().drawImage(myPlane1, 130, 60, Graphics.LEFT|Graphics.TOP);this.getGraphics().drawImage(myPlane2, 130

27、, 160, Graphics.LEFT|Graphics.TOP);/设置选择箭头在界面中的位置this.getGraphics().drawImage(imageOption,40,option*90-20,Graphics.LEFT|Graphics.TOP);上面的是各种各样的菜单界面,所有菜单界面的存在是静态的 通过Sprite类实现动画给定的Sprite需要所有的图像应该存储在一个图像文件里(为了找到图像文件被调用时的位置,Class.getResource()方法将以相同的地址格式图像文件作为参数寻找jar文件)。这个游戏我们的飞机是一个多帧对象。对于这种类型的对象,可以调用一个

28、函数设置它的位置:Sprite.setPosition(x,y);/设置当前的Sprite对象的播放帧:Sprite.setFrame(i);/控制Sprite对象的移动:Sprite.move(x,y);地图的绘制及移动的实现初始背景停滞覆盖整个屏幕,在背景图像移动时,基本算法思想如下:使用两个精灵对象指向背景图像,将两幅图像的位置设置在相邻的接口,一个设置为当前界面,另一组设置成紧跟其后。当游戏开始运行时通过Sprite.move(0,1)每移动一帧控制Sprite的运动,将屏幕闪烁。如果背景图像超出sprite1指向接口,将sprite1放到sprite2后。如果背景图像超出sprite

29、2指向接口,将sprite2放到sprite1后。不断地调用move函数来控制背景的移动。public void move()/如果背景图像超出sprite1指向接口,将sprite1放到sprite2后if(sprite1.getY() screenHeight)sprite1.setPosition(0, sprite2.getY()-sprite1.getHeight();/设置精灵1的位置 /如果背景图像超出sprite2指向接口,将sprite2放到sprite1后 if(sprite2.getY() screenHeight)/设置Sprite2的位置 sprite2.setPosition(0, sprite1.getY()-sprite2.getHeight(); sprite1.move(0, 1); sprite2.move(0, 1); 游戏按键的实现在最初的游戏中,玩家只需在菜单通过上下键选择游戏功能。进入游戏后,玩家通过方向键,确定键控制我们的飞机和子弹的运动。在菜单选择,您可以设置一个选项变量标记玩家选择的状态。并通过此变量转换接口。while(!ifEnter) if(触发向上键) option =option-1; interval = 100; else if(触发向下

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1