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

上传人:b****2 文档编号:547882 上传时间:2023-04-29 格式:DOCX 页数:27 大小:118.81KB
下载 相关 举报
java技术对手机游戏的设计与实现.docx_第1页
第1页 / 共27页
java技术对手机游戏的设计与实现.docx_第2页
第2页 / 共27页
java技术对手机游戏的设计与实现.docx_第3页
第3页 / 共27页
java技术对手机游戏的设计与实现.docx_第4页
第4页 / 共27页
java技术对手机游戏的设计与实现.docx_第5页
第5页 / 共27页
java技术对手机游戏的设计与实现.docx_第6页
第6页 / 共27页
java技术对手机游戏的设计与实现.docx_第7页
第7页 / 共27页
java技术对手机游戏的设计与实现.docx_第8页
第8页 / 共27页
java技术对手机游戏的设计与实现.docx_第9页
第9页 / 共27页
java技术对手机游戏的设计与实现.docx_第10页
第10页 / 共27页
java技术对手机游戏的设计与实现.docx_第11页
第11页 / 共27页
java技术对手机游戏的设计与实现.docx_第12页
第12页 / 共27页
java技术对手机游戏的设计与实现.docx_第13页
第13页 / 共27页
java技术对手机游戏的设计与实现.docx_第14页
第14页 / 共27页
java技术对手机游戏的设计与实现.docx_第15页
第15页 / 共27页
java技术对手机游戏的设计与实现.docx_第16页
第16页 / 共27页
java技术对手机游戏的设计与实现.docx_第17页
第17页 / 共27页
java技术对手机游戏的设计与实现.docx_第18页
第18页 / 共27页
java技术对手机游戏的设计与实现.docx_第19页
第19页 / 共27页
java技术对手机游戏的设计与实现.docx_第20页
第20页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《java技术对手机游戏的设计与实现.docx》由会员分享,可在线阅读,更多相关《java技术对手机游戏的设计与实现.docx(27页珍藏版)》请在冰点文库上搜索。

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

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

毕业论文

题目JAVA技术对手机游戏的设计与实现

学生姓名

学号

院系

专业计算机科学与技术

指导教师

 

目录

【摘要】………………………………………………………………………………2

1.Java简介…………………………………………………………………………3

1.1Java的诞生………………………………………………………………………3

1.2Java的发展历史…………………………………………………………………4

2.Java的开发环境和特点………………………………………………………4

2.1Java开发环境……………………………………………………………………4

2.2java的语言特点…………………………………………………………………4

2.2.1java技术对新手来说是简单的……………………………………………4

2.2.2java技术是面向对象的……………………………………………………4

2.2.3java技术是可移植的………………………………………………………4

3.雷霆战机手机游戏结构分析………………………………………………4

3.1初步构思………………………………………………………………………………4

3.2游戏基本框架…………………………………………………………………………4

3.3算法分析………………………………………………………………………………9

4.后期优化………………………………………………………………………15

4.1优化的意义…………………………………………………………………………15

4.2从哪里开始优化……………………………………………………………………15

4.3何时不用优化………………………………………………………………………15

4.4结论…………………………………………………………………………………16

5.参考文献………………………………………………………………………16

6.致谢………………………………………………………………………………17

 

JAVA技术对手机游戏的设计与实现

 

【摘要】

现在,移动电话用户持续增加,手机的功能越来越复杂,且手机的各种服务行业越来越多样化。

J2ME技术将是未来手机游戏的发展方向,许多手机制造商诺基亚、索尼爱立信等和手机游戏提供商非常关心。

虽然这一领域的技术不是很成熟,但可以预期,在不久的将来,这项技术必须迅速发展,成为另一个热门手机游戏行业。

该文介绍了基于J2ME的Java手机游戏雷霆战机的设计和实现,SunJava(TM)无线工具包2.5.2CLDC3.2和Eclipse开发工具,比如使用Java语言,开发了一个操作简单、易于使用的飞机射击游戏模式。

色彩斑斓的飞机,游戏背景和各种各样的包和子弹将大大增加游戏的乐趣。

从准备到设计实现,论述了游戏的开发背景、总体设计和功能实现等,本文首先对这个游戏的功能分析。

紧随其后的是游戏的所有准备工作,包括设计游戏规则、材料制备和接口设计主要设计、类的设计和主要算法分析。

核心部分是工作准备,工作就绪后本文将介绍各种效果和实现算法。

【关键词】J2ME;Java;手机游戏;雷霆战机

 

1.Java简介

1.1Java的诞生

sun公司在1990年12月,由帕特里克·诺顿迈克·谢里丹和詹姆斯·高斯林组成了一个名为GreenTeam,主要目标是开发一个分布式系统架构,使其可以运行在消费电子产品操作,Java开始称为Oak(橡木),原因是詹姆斯·高斯林的办公室窗外,偶尔的一棵橡树(橡树),但有一个公司已经使用了这个名字,工程师讨论这个新名字以后喝咖啡,看着手中的咖啡,顺便把Java的名称。

1.2Java的发展历史

C和C编译器是由sun公司工程师帕特里克开发的,因为当时使用API文档比较困难。

所以帕特里克打算切换到下一个目标,并且他拿到了研究公司的“隐形计划项目”。

“隐形计划”又称为“绿色项目”,他和其他几个工程师在一个小工作室里面研发新的技术,一种针对家用电器的编程,sun公司预测未来的发展可能在电器领域。

最初考虑用的是C语言,但是由于科学家们发现C和API在这些领域有一个很大的问题,工作小组使用的是嵌入式平台,可以使用的资源有限,而且C语言开发太复杂,会遇到很多开发人员遇到的常见的错误,比如,C语言缺乏垃圾回收系统,不利于安全便携。

所以他们像要一个平台易于移植到各种设备中。

由于现有的资金开发团队决定开发一个新的语言,并在一份报告中称为“未来”,sun公司工程师认为这个技术应该基于C语言基础上并且面向对象进行。

最初命名为C—,但是很快就被放弃了。

之后工程师创建的一个新语言命名为他们办公室外的一棵树“橡树”。

跟研究其他项目一样,工程师们没日没夜的尝试直到1992年的夏天,他们展示了一个包括绿色操作系统的橡木编程语言。

它的硬件最初尝试PDA设备,被任命为star7,生动的图形化界面只能代理来帮助用户。

在1994年6、7月之间,经过三天的头脑风暴之后,约翰·盖吉尔吉斯斯坦、詹姆斯·高斯林比尔欢乐,帕特里克·诺顿韦恩·罗斯和埃里克·库米团队决定改变目标,将这个技术放到万维网,他们认为未来的万维网是高度交互的视觉进化,期望能看到有线的网络电视。

同时,帕特里克写了一个小型的web浏览器webRunner,后来改名为HotJava。

因此后来橡木重命名为java。

1994年10月java1.0版本已经公布可以以下载,sun公司的科学家约翰已经宣布java技术,这个版本的负责人马克安德森宣布了网络浏览器支持java,公司成立于1996年1月,sun公司的java业务集团专门从事java技术的发展。

2.Java的开发环境和特点

2.1Java开发环境

Java需要JDK提供它的运行环境,安装JDK和设置环境变量,您可以继续Java开发,您可以编写Java源代码文本文档。

但为了提高编码质量和速度的写作需要一些开发工具。

开发工具,我认为这是最好也是最强大的必须属于eclipse,它是免费的,但收费myeclipse网上有很多注册码,web开发,你可以得到一个myeclipse。

当然安装一些插件的eclipseWEB开发也是可能的。

2.2Java的语言特点

2.2.1Java技术对新手来说是简单的

Java技术对于初学者来说比较简单,它抛弃了C语言中的指针这些复杂绕脑的部分,更倾向于人性化的方式来解决程序问题。

2.2.2Java技术是面向对象的

在现实世界中任何实体都可以归因于对象,对象之间的消息是相互交换的,是现实世界模型的一种自然延生。

所有面向对象语言都有三个基本特性:

封装、继承、多态。

面向对象,直白点说就是把真实世界数据化,然后打包就叫对象,以人为例,人的身高、体重、外形特征这些都属于人的属性,同理面向对象也有类似的属性。

2.2.3Java技术是可移植的

这个系统是一个程序移植到其他系统上编译后的解释执行,只是一个简单的粘贴和复制后,不影响程序的效果。

 

3.雷霆战机手机游戏结构分析

3.1初步构思

雷电战斗机很经典的手机游戏,游戏规则很简单。

玩家进入游戏后,可以根据自己的喜好,选择不同的游戏模式。

在这个游戏中,有两种游戏模式。

第一个是闯关模式,每关有一个大BOSS,玩家被赋予三条生命,一共有两关。

另一竞争模式,玩家在这个模式仍然给出了三条生命,玩游戏不限制,每次袭击了敌人的飞机后,玩家将获得相应的分,累计得分,最终结果时显示。

总之,游戏过程是相对明确。

根据游戏设计的基本思想,主要涉及的对象可能是如下:

(1)玩家飞机:

飞机有不同的选择,玩家在游戏中,通过键和确定键控制移动和子弹。

(2)敌人飞机(包括普通小敌机和大boss):

共有五种小敌机在游戏中,两个“boss”,根据不同的模式和物种数量控制小敌机。

(3)子弹包:

当玩家飞机撞到子弹袋后可以转变成不同的子弹,一共有4个子弹可以改变。

(4)HP包:

碰撞HP包时,玩家生命增加5。

每被敌机击中,HP降低2。

HP不少于6为绿色,不少于4黄色,其余为红色。

(5)生命包:

当玩家撞到此包时,玩家生命值加一。

每条生命有10HP。

(6)防御包:

当玩家撞到此包时,玩家被敌机子弹击中血量不减少,当敌机撞击到时,敌机被炸毁。

上面的对象,除玩家的飞机是固定生成在界面上,其他对象都是随机生成的。

3.2游戏基本框架

当玩家进入游戏应用程序,第一个进入欢迎界面,这个界面有两个选项,启动游戏和游戏说明。

游戏说明就是帮助菜单,包括一些简单的介绍游戏和一些操作说明。

当选择开始游戏,玩家进入游戏模式选择界面,在这个界面中,玩家可以根据自己的喜好选择不同的游戏模式。

为了使游戏更有趣,玩家可以选择他们喜爱的模型飞机,在竞争模式下,玩家可以选择自己喜欢的游戏场景。

(1)基本的规则。

当游戏开始时,玩家通过方向键控制飞机的运动,确定键控制飞机的子弹。

闯关模式中,玩家击落不同数量的小飞机才会出现一个boss,boss有一定的血量,达到一定次数才能被消灭,玩家将能够进入下一个级别。

在竞争模式下,玩家在三条生命下,击落越多的敌机为胜利的标准,每击落敌机,玩家可以得到一定的分数,最终积分记录为这场比赛的战绩。

(2)飞机的产生。

飞机产生方式是随机的,连续产生不同类型的小敌机,最终产生“大boss”。

闯关模式下用计数控制小飞机的产生数量。

竞争模式下,小飞机数量无限,没有停止,直到比赛结束。

(3)包的生成:

原理同飞机的产生。

(4)我方飞机子弹的产生:

飞机子弹的产生,通过监听确定键来生成。

当你按下这个按钮,那么发射相应的子弹。

子弹的位置和我们的飞机当前位置有关。

(5)我方飞机的移动:

通过监听方向键来控制飞机的移动。

(6)敌机、包及子弹的移动:

敌机、子弹在产生之后,以一定速度向同一个方向移动。

(7)飞机的消除:

飞机被击中后为直接移除,添上爆炸的图片。

(8)胜负判断:

闯关模式:

当所有小敌机及大boss被击败后,连续闯过两关才为胜利。

在竞技模式中:

当玩家三条命全部消耗为结束,然后通过分数判断战绩。

3.3算法分析

通过上面的介绍得知游戏有闯关模式和竞争模式。

在闯关模式中,玩家可以选择自己的飞机类型,为了让玩家在闯关模式体验层次感的难度,现在设计如下。

在材料准备总共五个小敌机,增加趣味,在第一组只有四个小敌机,在第二盘设置5种敌机,同时在数量,第一关有30小敌机,第二个关有40个。

,当然,也可以扩大设置差距,让难度差距更加明显。

在竞争模式下,玩家可以选择自己喜欢的场景,敌机的种类设置是一样的,小敌机的生产随我们的飞机爆炸而结束。

当我们的飞机击落一个敌机分数加上10;如果我们的飞机在保护状态下和小敌机撞击,小敌机坠毁,同时加10分。

随机生成飞机算法

在这个游戏中,敌机的出现是随机的,并且可以重复。

我们可以使用随机函数区间随机控制飞机。

random.nextInt()表示随机生成一个INT类型的数。

这个函数不仅可以控制产生一个小敌机的时间间隔,同时返回这个值可以用来标记的各种小敌机。

addElement添加一个元素的函数、package(arg0,arg1,arg2)函数表示生成的包,参数arg0表示包的种类,(arg1,arg2)表示添加的包所在界面中的位置。

EnemyFactory.addEnemy(arg0,arg1)表示添加敌机,参数arg0表示敌机的种类,arg1表示敌机容器,属于Vector类定义的对象。

以闯关型为例,此处算法的思路主要表示为:

可以通过设置一个变量enemycount来控制产生小敌机的数量,当出现的敌机数量没有超过30架时,使用随机函数不断地生成各种敌机和包,当敌机的数量超过30架时,停止产生小敌机,在屏幕的最上端生成大BOSS。

流程图如图3.13。

 

 

Y

 

图3.13随机生成敌机流程图

 

敌机和包移动的算法

它的飞行速度由speed变速控制。

并在每次之前判断是否超出界面。

主要用到函数:

sprite.move(0,Math.abs(speed));

碰撞检测算法

在这个游戏中,会经常发生碰撞,子弹和飞机的碰撞,飞机和道具包碰撞、飞机和飞机碰撞。

因此,碰撞检测和处理是非常重要的。

这个游戏使用Sprite类对碰撞检测具有更好的支持。

在Sprite定义一个矩形区域,如果其他Sprite或图像进入区域,作为一个碰撞。

用户还可以不调用这个函数,因为默认情况下定义整个区域都定义Sprite。

如何检测是否发生碰撞?

publicfinalBooleancollidesWith(Sprites,BooleanpixelLevel)

这个函数的第一个参数是测试对象的碰撞,第二个参数是一个布尔类型,如果这是true,则认为两个Sprite上不透明点发生了重叠,导致碰撞,如图3.14所示,如果它是false,这发生在两个矩形区域Sprite重叠,计算碰撞,如图3.14所示。

参数为true,会使碰撞效果更加生动。

图3.14碰撞检测

如上述所示图

(1)和

(2)是将要发生碰撞的飞机图片,因为这些图片格式是PNG图像,所以这幅画的背景是透明的。

如图(3)所示的两架飞机相撞,参数值是true,就是红色线标志是一个矩形区域的碰撞。

如图(4)所示的两架飞机参数值为false的方式碰撞,即飞机机身红线标志着发生了碰撞。

为了让碰撞更生动,这个游戏使用一个图(3)碰撞的方式。

线程设计

创建所有的动画游戏,是使用一个线程准备多个图像序列。

线程意味着程序的运行单位,使用线程是因为可以方便处理。

当一个类的构造函数中打开一个新线程,该线程将不断在运行函数接受用户输入和处理,根据屏幕重绘。

游戏线程主要由三部分组成:

键盘输入的检测(与玩家交互),更新游戏场景(游戏逻辑),绘制游戏画布。

根据三个模块可以用来设计一些2D游戏,基本上三个模块是相互联系的,根据模块的思想来实现游戏线程将更加面向对象的,和容易理解。

如果程序运行速度快于预期的速度会让玩家感觉震动和闪光,导致影响游戏的效果,因此还需要测试每一帧的操作时间,如果太快,等待一段时间,如果太慢,暂停当前线程允许其他线程执行。

在这个游戏中,当页面跳转时不涉及线程状态,只有当所选的游戏模式,启动游戏时线程开始。

以闯关模式第一关为例。

启动游戏后的首先绘制背景和菜单等等,同时建立按键和监听。

然后可以开一个线程。

重写RunnableRun()方法来启动一个线程。

线程在Run()方法,一般过程如下。

首先获取当前线程,设置帧率,帧速率的大小至关重要,正确的帧速率可以防止屏幕闪烁。

记录开始时间的线程,然后生成各种各样的包和飞机,控制其运动,碰撞检测和处理在同一时间进行。

最后判断测试每帧的运行时间,如果过快,等待一段时间。

类的设计

程序的主要类

制作的J2ME手机游戏,主要涉及三个主要的类:

MIDlet类,Canvas类,Graphics类。

此外,还为飞机和子弹设计一个特定的类,方便程序设计。

(1)MIDlet类

MIDlet程序有三种状态:

暂停状态,运行状态和损坏状态。

主要结构的三个状态转换法MIDP应用程序生命周期,这是J2ME应用程序体系结构的建设的基础。

一个完整的生命周期过程包含于程序结构中。

该声明继承了javax.microedition.MIDlet抽象类。

从API文档指出,能理解MIDlet是MIDP应用程序,必须扩展类,使应用程序管理软件可以通过对象实例,语句和状态变化的机制来控制MIDlet。

在这个游戏中通过PlaneGameMIDlet类继承自MIDlet类。

实现游戏的核心代码PlaneGameMIDlet类。

程序使用PlaneGameMIDlet类startApp方法来启动游戏,通过display对象将显示GameCanvas类对象。

(2)画布Canvas类

Canvas类是Displayable的子类,主要用于处理低级事件如键盘关键事件,以及需要绘制屏幕程序。

Canvas类的功能主要包括以下几类:

手机屏幕的属性,绘画方法、事件处理、操作方法(包括键值和游戏操作按钮)。

在这个游戏中,各种各样的接口是通过继承Canvas类画画。

地图界面通过Paint()方法,通过监控commandAction函数的按钮来控制界面之间的跳转。

(3)Graphics类

Graphics类提供了一个简单的二维图形。

具有24深颜色的渲染能力,用三原色给每个字节代表每个条目的颜色

(4)Vector类

在这个游戏中,各种各样的敌机,子弹,包和爆炸图像使用Vector数据结构,这个结构编码时让游戏更加简洁方便。

Vector容器是一个模板类,可以存储任何类型的对象。

Vector对象可以有效地在运行时添加元素,和Vector中的元素存储在一个行。

使用Vector类型,可以方便使用removeElementAt()和addElement()到缓冲区队列中删除和添加元素。

在游戏中有很多类,如下图所示。

PlaneGameMIDlet类负责保持display对象,显示Canvas并启动游戏,Canvas类是用于显示游戏菜单和各种接口,包括模式选择界面,飞机选择界面,场景选择界面,失败和成功界面等等,game类负责显示游戏Canvas;还包括子弹类bullet,子弹的各种继承类;飞机类plane,我们敌人的飞机和自己飞机是通过继承自己的类。

除了上面的一些重要的类还包括几个装入LevelLoad类游戏,子弹库BulletFactory类,地图terrain类,包package类,爆炸bomb类等。

下面将介绍游戏的主要类结构,如图3.18至图3.26所示。

图3.18PlaneGameMIDlet类

图3.19ChoiceCanvas类

图3.20BulletFactory类图3.21EnemyFactory类

图3.22地图类图3.23爆炸类

图3.24敌机的类

图3.25我方飞机类图3.26包类

程序架构

主要架构程序如上所述MIDP应用程序生命周期的法则,它是建设的J2ME应用程序体系结构的基础。

从API文档指出,能理解MIDlet是MIDP应用程序,必须扩展类,使应用程序管理软件可以通过对象实例,语句和状态变化的机制来控制MIDlet。

类方法允许应用程序管理软件的扩展来创建、启动、暂停、和毁灭MIDlet。

应用程序管理软件是通过接口运行和控制一个MIDlet类。

如图3.27所示。

游戏运行界面的实现

根据本章的设计接口,接口是主要的背景图像,添加界面上的各种图标和各种各样的文本。

此外还包括功能键和图纸的标题的接口。

不同的接口设计方法大致相同,主要在于画面的布局。

由于模拟器的安装,不同的手机模拟器有不同的屏幕尺寸,所以知道模拟器的大小是非常重要。

可以通过测试表明,该游戏安装模拟器的的大小:

屏幕宽度:

200像素,屏幕长度:

240像素。

所以下面将介绍飞机选择界面,例如游戏运行的接口实现。

绘制界面的伪代码的欢迎屏幕(模型接口,接口映射场景选择界面和飞机选择界面相同)

this.setTitle("选择飞机");

try{

image=Image.createImage("/bckgrd1.jpg");

imageOption=Image.createImage("/option3.png");

myPlane1=Image.createImage("/myPlane11.png");

myPlane2=Image.createImage("/myPlane12.png");

}catch(IOExceptione){……..}

//初始化按钮

exit=newCommand("退出",Command.BACK,0);

start=newCommand("开始",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,160,Graphics.LEFT|Graphics.TOP);

//设置选择箭头在界面中的位置

this.getGraphics().drawImage(imageOption,40,option*90-20,Graphics.LEFT|Graphics.TOP);

上面的是各种各样的菜单界面,所有菜单界面的存在是静态的

通过Sprite类实现动画

给定的Sprite需要所有的图像应该存储在一个图像文件里(为了找到图像文件被调用时的位置,Class.getResource()方法将以相同的地址格式图像文件作为参数寻找jar文件)。

这个游戏我们的飞机是一个多帧对象。

对于这种类型的对象,可以调用一个函数设置它的位置:

Sprite.setPosition(x,y);

//设置当前的Sprite对象的播放帧:

Sprite.setFrame(i);

//控制Sprite对象的移动:

Sprite.move(x,y);

地图的绘制及移动的实现

初始背景停滞覆盖整个屏幕,在背景图像移动时,基本算法思想如下:

使用两个精灵对象指向背景图像,将两幅图像的位置设置在相邻的接口,一个设置为当前界面,另一组设置成紧跟其后。

当游戏开始运行时通过Sprite.move(0,1)每移动一帧控制Sprite的运动,将屏幕闪烁。

如果背景图像超出sprite1指向接口,将sprite1放到sprite2后。

如果背景图像超出sprite2指向接口,将sprite2放到sprite1后。

不断地调用move函数来控制背景的移动。

publicvoidmove(){

//如果背景图像超出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;}

elseif(触发向下

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2