雷霆战机答辩Word文件下载.docx
- 文档编号:19916561
- 上传时间:2023-01-12
- 格式:DOCX
- 页数:88
- 大小:394.10KB
雷霆战机答辩Word文件下载.docx
《雷霆战机答辩Word文件下载.docx》由会员分享,可在线阅读,更多相关《雷霆战机答辩Word文件下载.docx(88页珍藏版)》请在冰豆网上搜索。
J2ME、Cellphonegame、JAVA
目录
1、前言-3-
2、移动开发简介-3-
2.1CLDC和MIDP-3-
2.2移动平台开发特点-4-
2.3搭建开发环境-4-
2.4工具介绍-4-
3、游戏总体设计-5-
3.1游戏设计目标-5-
3.2游戏设计思路-5-
3.3游戏架构设计-6-
3.4游戏地图的绘制-6-
3.5游戏中的主要角色类-7-
3.6碰撞检测-7-
3.7子弹与角色的碰撞检测-7-
3.8玩家的碰撞检测-7-
3.9保存信息及读取信息-8-
4、J2ME游戏的优化和注意事项-9-
4.1J2ME游戏的优化-9-
4.2注意事项-9-
5、小结-10-
6、参考文献-11-
7、附录:
游戏的代码实现和分析-11-
1、前言
射击游戏简称STG(ShootingGame),是指游戏者通过控制各种飞行物(主要是飞机)来完成任务或过关的游戏,游戏目的往往是获得最高分数的记录,或者在敌方的枪林弹雨中成功逃生。
这类游戏的特点是节奏较快,有逼真的爆炸效果,场面惊险刺激,玩家需要集中注意力,在快节奏中完成任务。
2、移动开发简介
手持设备之所以能够时时刻刻伴随人们的生活,其最重要的特性就是便鞋性,并且由于着重考虑了省电设计,手持设备一般可较长时间的处于可工作状态。
从中国现在的情况来看,中国移动运营商都将J2ME作为其应用产品运行的一个基本平台。
支持J2ME已经成为运营商对手机厂商的一个基本要求。
所以,利用J2ME进行开发,是符合基本发展趋势的一个做法。
2.1CLDC和MIDP
CLDC(ConnectedLimitedDeviceConfiguration,连接限制设备配置),运行在这一配置上的程序称为MIDlet,在KVM上进行解释。
CLDC设备的最低配置为:
CPU为16位、32位主频在16MHz以上的处理器,设备的内存比较少,可能只有512KB,甚至更少。
现在硬件的发展非常快,以前所定义的CLDC的设备目前的设备甚至远远超过原来的定义。
不过请注意一下,J2ME对CLDC设备配置的定义只是一个最低要求的定义。
其实目前很多CLDC设备的配置都远远超过上面的配置,不过要分辨CLDC设备主要要从设备特点上进行区别。
这些设备的特点是:
(1)无线连接
(2)没有稳定的电源供应(通常使用电池)
(3)设备外设资源极少
CLDC规范:
目前分为v1.0JSR30,v1.1JSR139
MIDP(MobileInformationDeviceProfile)是一套JAVA应用编程接口(ApplicationProgrammer’sInterFaces,API).他们与CLDC一起向诸如蜂窝电话等移动信息设备提供一个完整的JAVA应用运行环境。
MIDP中包含有下列API包:
javax.microedition.lcdui—用户界面(UI)API,它为MIDP应用提供了一整套实现用户界面的功能特性;
javax.microedition.rms—移动信息设备描述提供一种让MIDlets永久储存并在以后可以取回数据的机制。
javax.microedition.midlet—这个MIDlet包明确定义了MIDP应用,也定义了应用和应用环境之间的交互。
javax.microedition.io—移动信息设备还描述包括基于有限连接设备配制GenericConnection框架的网络支持。
2.2移动平台开发特点
手持设备的特性要求决定了它的硬件特性,也就决定了能够在手持设备上运行的软件也应具有相应的特性。
手持设备上的应用程序一般短小精悍,针对特定的业务功能进行实现,极少出现在PC上那种大而全的软件。
由于硬件平台的限制导致某些时候手持设备开发难度要大于PC平台。
2.3搭建开发环境
现在针对JAVA的开发软件很多,类似eclipse、JBliuder、NetBeans、JCreater……各个工具性能的使用方法都不一样。
一门好的程序开发语言需要有好的开发环境做基础,J2ME也不例外,我就来总结一下如何利用Eclipse搭建J2ME的开发环境。
搭建一个最基本的开发环境需要下载以下工具:
1.JDK1.6
2.WTK2.5
3.Eclipse3.2.1http:
//www.eclipseme.org
如有需要还可以下载Eclipse多国语言包(LanguagePack)。
2.4工具介绍
WTK的全称是SunJ2MEWirelessToolkit——Sun的无线开发工具包。
这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。
使用其中的工具可以开发与JavaTechnologyfortheWirelessIndustry(JTWI,JSR185)规范兼容的设备上运行的j2me应用程序。
该工具箱包含了完整的生成工具、实用程序以及设备仿真器。
到本文写作时为止可以获取有四个版本,分别是1.0.4,2.0,2.1和2.2。
每个版本都包括英语,日语,简体中文,繁体中文4个语种包。
在安装WTK之前需要注意的是,由于安装程序会自动寻找JDK的路径,所以一定要将JDK正确安装。
EclipseME是帮助开发者开发J2MEMIDlet的Eclipse插件。
EclipseME提供了下列功能以帮助开发者轻松的创建Midlets:
1.无线工具包首选项
2.创建新的J2MEMidlet套件项目
3.创建新的Midlet
4.Java应用描述文件编辑器
5.对class文件进行增量的/自动的预检验
6.支持从Eclipse中启动运行J2ME模拟器
7.打包以及部署(包括无线下载方式)测试,并可以使用ProGuard对输出包进行混淆
3、游戏总体设计
3.1游戏设计目标
掌握用无线Java应用技术即J2ME技术的软件系统设计方法,通过开发雷霆战机这个小游戏,熟练使用J2ME开发平台,了解java各组件的使用。
3.2游戏设计思路
在游戏中,玩家将拥有4架战机,每架战机具有相同的生命值100。
玩家通过手机键盘操纵飞机在屏幕中上下左右移动,游戏刚开始时按下射击键,飞机只能发射机关炮弹,游戏途中会出现3种道具,如果拾取获得这些道具,飞机可以发射导弹、霰弹或炸弹,增强玩家战机的火力。
机关炮弹的伤害值较小、霰弹、导弹和炸弹伤害值较大。
敌方拥有地面防空炮塔、坦克、BOSS和4种不同的轻型战机,这些装备的防御值、灵活性、智能、火力强度都有所不同。
玩家战机对付敌方高机动轻型战机时,可以按键选择不同的武器进行攻击,可以提高攻击效率。
玩家战机每击中一个目标,会得到加分。
3.3游戏架构设计
表3-1
3.4游戏地图的绘制
静态背景制作过程如下:
(1)加载用于绘制地图的源图像。
(2)创建一个TiledLayer对象,同时把图像装入TiledLayer对象,并设定每个切片的尺寸和单元格的数量。
二者决定了实际背景的大小。
TiledLayer会根据图像尺寸计算切片的数量,按照从左到右、从上到下的顺序从1开始对切片进行编号。
并且通过每个切片的尺寸和单元格的数量计算图层的面积。
(3)把图像切片按照需要填入单元格。
图3-1
图3-2
图3-3
图3-4
3.5游戏中的主要角色类
表3-2
3.6碰撞检测
J2ME的Sprite类提供了三种用于碰撞检测的方法,分别如下:
collidesWith(Imageimage,intx,inty,booleanpixelLevel)
collidesWith(Sprites,booleanpixelLevel)
collidesWith(TiledLayert,booleanpixelLevel)
三种方法分别用于检测Sprite与Image、Sprite与Sprite、Sprite与TiledLayer之间的碰撞。
它们的返回值意义相同,返回true表示已经发生了碰撞,返回false表示无碰撞。
参数pixelLevel在三种方法中的意义也相同,如果参数为true,则只检测不透明的区域,反之对整个操作对象的区域都做检测。
3.7子弹与角色的碰撞检测
子弹与角色的碰撞检测分为三种:
玩家的子弹与npc的碰撞、npc的子弹与玩家的碰撞、玩家的子弹与boss的碰撞。
PS.代码详解参见附录
3.8玩家的碰撞检测
玩家除了射出的子弹与npc、boss进行碰撞检测外,自身还需要与npc、boss进行检测,一旦检测到碰撞,会出现爆炸效果并且被碰撞到的玩家或npc会消失。
另外,玩家还需与道具进碰撞检测,一旦碰撞,玩家的道具数会增加,并且根据道具的不同而更改子弹类型。
图3-5图3-6
3.9保存信息及读取信息
游戏中经常会出现要保存数据的情形,如保存游戏进程,保存高分排行榜等。
J2ME提供了一个记录管理系统(RMS),能够持久存储数据。
RMS提供了RecordStore类,用于使Midlet应用程序与RMS进行通信。
图3-6
4、J2ME游戏的优化和注意事项
4.1J2ME游戏的优化
游戏能够被划分为两种较广泛的类型:
实时型和按键驱动型。
按键驱动类型的游戏一般在屏幕上显示游戏目前所处的状态,并且等待玩家输入某些按键来驱动游戏继续运行。
棋牌类游戏,大部分的解谜类游戏以及策略类和文字类游戏都属于这类游戏。
而实时游戏,特别是动作游戏(飞行射击游戏—雷霆战机也属于动作游戏的一种)不会等待玩家的输入,他们一直运行直到游戏的结束。
动作类游戏一个重要的特征就是将大量的运算花在屏幕显示上,而且刷新率必须保持在10以上。
这类游戏还必须要有大量的动作来使得游戏具有更高的挑战性。
这类游戏需要玩家有快速的反应和很好的手眼协调能力,所以这类游戏对键盘输入的反应也有极高的要求。
为使得程序在高速运行时能对键盘做出及时的反应,图像能以高速的刷新率来运行,我们就必须优化代码,以使得程序以最快的速度运行。
4.2注意事项
如果编写的游戏不是动作游戏,有可能不必去优化。
假如玩家需要几秒钟甚至几分钟去思考他下一步怎样走,那他将不会注意到你的游戏的按键响应超过几百毫秒。
不过一个例外是如果你的程序需要大量的运算去决定它下一步怎样走,例如棋类游戏需要在几百万种组合中去寻找。
假如这样的话,你有可能想要优化你的代码以使得CPU仅需要几秒钟而不是几分钟去决定他下一步的动向。
即使你正在编写这类游戏,优化也是相当危险的。
这些技术将伴随着高昂的代价,他将使你的代码不易读。
这就需要开发者自己去平衡。
增大了JAR文件的大小来换取程序少量性能的提高是否是值得的。
下面给出不要去优化的更多的理由。
1.优化将很容易引入bug;
2.有些优化技术将使得移植变得困难;
3.有可能你付出了巨大的努力却收效甚微;
4.统一的优化一般比较困难。
对最后一点的解释:
由于优化的是一个不定的目标及平台,有些方法可能在Java平台上运行快一点,而有些可能在J2ME平台上运行快一点。
由于执行环境存在着巨大的差异,你的代码可能在模拟器上跑得很快,但是在真机上却很慢。
反之也有可能。
你对一种机型的优化可能会造成在另一种平台上性能的下降。
5、小结
通过网上查阅资料,得到了以下结论:
(1)仅当你需要的时候才去优化代码;
(2)仅优化那些最耗时的代码;
(3)使用Profiler去查找哪里需要优化;
(4)记住Profiler不代表真机上的优化结果,使用SystemTimer来在真机上做最后的测试;
(5)在做低级优化之前,总是要先思考算法是否是最优;
(6)绘图是很占用时间的,所以尽可能的减少Graphics函数的调用;
(7)尽可能的使用setClip()来减少绘图区域,相对于setClip(),drawImage()所花的时间会更可观;
(8)尽可能的将变量定义在循环以外;
(9)尽最大可能的进行对需要的数据进行预先计算并将结果保存在缓冲里;
(10)String类很容易产生垃圾内存,尽可能的使用StringBuffer代替String或用finalstatic来定义之;
(11)假设是不被接受的,一切要以真机为据;
(12)尽量使用staticfinal修饰函数,而避免synchronized修饰符;
(13)对于频繁调用的函数要使用尽可能少的参数;
(14)尽可能的不使用函数调用;
(15)尽可能的使用<
<
和>
>
来代替*和/;
(16)使用位操作来代替%运算;
(17)与0比较比与其他数值比较快;
(18)数组存取比C语言慢,尽可能不在循环中存取数组;
(19)局部变量比其他类型的变量运算要快;
(20)在switch()中尽量使用连续的小数值判断;
(21)尽量使用乘法而不使用除法;
(22)尽量使用已有算法。
6、参考文献
[1]沈大海编著.J2ME手机游戏开发与项目实战详解[M].人民邮电出版社,2009.8.
[2]龚剑 刘晶晶编著.3D手机游戏开发详解[M].人民邮电出版社,2007.11.
[3]李新力编著.J2ME实用教程[M].人民邮电出版社,2007.9.
[4]施峥编著.无线移动游戏开发[M].人民邮电出版社,2006.3.
[5]L刘斌丁璇庞辉编著.J2ME手机开发入门[M].人民邮电出版社,2006.3.
[6]Palu编著.J2ME无线Java应用开发[M].人民邮电出版社,2002.9
[7]杨军编著.J2ME嵌入式开发案例精解[M].电子工业出版社,2007.08.20.
[8]杨建、杨军编著.精通J2ME嵌入式软件开发[M].电子工业出版社,2007.08.
[9]郝玉龙李向前编著.J2ME移动应用开发[M].北京交通大学出版社,2006-09.
游戏的代码实现和分析
MyMidlet.java
importjavax.microedition.lcdui.Display;
importjavax.microedition.midlet.MIDlet;
importjavax.microedition.midlet.MIDletStateChangeException;
publicclassMyMidletextendsMIDlet{
privateDisplaydisplay;
publicMyGameCanvasmgc;
publicScnInputNamescnInputName;
publicScnTop3scnTop3;
publicScnMenuscnMenu;
publicScnHelpscnHelp;
publicScnStoryscnStory;
publicScnAboutscnAbout;
publicScnPressedAboutscnPressedAbout;
publicScnGameRulescnGameRule;
publicBillBoardbillboard;
//定义一个积分榜对象
publicMyMidlet(){
scnInputName=newScnInputName(this);
//实例化英雄留名界面
scnTop3=newScnTop3(this);
//实例化积分排行榜界面
scnMenu=newScnMenu(this);
//实例化菜单界面
scnHelp=newScnHelp(this);
//实例化帮助界面
scnStory=newScnStory(this);
//实例化故事简介界面
scnAbout=newScnAbout(this);
//实例化关于界面
billboard=newBillBoard();
//实例化积分榜对象
scnPressedAbout=newScnPressedAbout(this);
//实例化按键说明界面
scnGameRule=newScnGameRule(this);
//实例化游戏规则界面
}
publicvoidshowScnGameRule(){
display.setCurrent(scnGameRule);
publicvoidshowScnPressedAbout(){
display.setCurrent(scnPressedAbout);
publicvoidshowScnInputName(){
scnInputName.setString("
"
);
display.setCurrent(scnInputName);
publicvoidshowScnAbout(){
display.setCurrent(scnAbout);
//设置关于界面为当前界面
publicvoidshowScnMenu(){
display.setCurrent(scnMenu);
//设置菜单界面为当前界面
publicvoidshowScnTop3(){
StringstrTop3=showListTop3();
scnTop3.showTop3(strTop3);
//前三名玩家的姓名和分数加到表单scnTop3里
display.setCurrent(scnTop3);
//当前界面切换到现实英雄积分榜的表单界面scnTop3
publicvoidshowScnHelp(){
display.setCurrent(scnHelp);
//设置帮助界面为当前界面
publicvoidshowScnStory(){
display.setCurrent(scnStory);
//设置帮助界面为当前界面
publicvoidshowScnGame(){
mgc=newMyGameCanvas(this);
display.setCurrent(mgc);
//开始游戏
publicStringshowListTop3(){//把积分前三名玩家的姓名和分数以字符串的形式连起来
StringstrTop3="
;
for(inti=0;
i<
3;
i++){
strTop3+=BillBoard.userTop3[i]+"
"
+BillBoard.scoreTop3[i]+
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 雷霆 战机 答辩
![提示](https://static.bdocx.com/images/bang_tan.gif)