基于J2ME任务类手机游戏的设计与实现毕业设计Word下载.docx
《基于J2ME任务类手机游戏的设计与实现毕业设计Word下载.docx》由会员分享,可在线阅读,更多相关《基于J2ME任务类手机游戏的设计与实现毕业设计Word下载.docx(61页珍藏版)》请在冰点文库上搜索。
首先分析了开发软件的可行性。
其次对游戏界面进行分层,从每个层面的功能进行需求分析。
然后,针对本设计的结构和功能进行了介绍,这也是本文的重点。
为了保证代码的正确性和功能实现的可靠性,本文还介绍了程序调试过程中遇到的错误,展示了游戏的运行界面。
关键词:
J2ME,手机游戏,MyEclipse,WTK
DESIGNANDIMPLEMENTATIONOFTASKSGAMESINJ2ME
Abstract
J2ME(Java2MicroEdition)isaJavalanguageplatformforset-topboxes,mobilephonesandPDA'
skindofembeddedconsumerelectronicsdevices,includingvirtualmachinesandaseriesofstandardizedJavaAPI.Withthegrowingpopularityofmobilephones,Javaapplicationgeneratesmobilevalue-addedservicesgraduallyreflectitsinfluenceonpeople'
slivesrichcontent,playsanessentialroleinprovidingeasieraccesstoinformation.
ThisarticledescribesthestructuralanalysisofJ2MEtechnologiesandtheimplementationofproceduresandspecific.Inshootinggamesasanexample,thegamethroughoutthelifecycleofthevariousstagesofdevelopmentforadetaileddescription.First,Analysisingofthefeasibilityofdevelopingsoftware.Second,thegameinterfacestratification,needsanalysisfromeveryleveloffunctionality.Then,forthestructureandfunctionofthisdesignwereintroduced,whichisthefocusofthisarticle.Inordertoensurethecorrectnessofthecodetoachievethereliabilityandfunctionality,thepaperalsodescribestheerrorencounteredduringdebugging,showingthegamerunninginterface.
Keywords:
J2ME,MobileGames,MyEclipse,WTK
前言
进入21世纪以来,随着科技的不断发展,手机、笔记本电脑、pad等等移动设备已经普及到社会的各个角落。
与此同时,越来越多的科技公司开始开发在专门为移动设备设计的应用软件。
这些应用软件的出现使得移动设备拥有更加强大的功能,在人机交互方面表现也更为出色。
数据统计显示,去年全球有560亿应用下载次数,每季度应用开发的个数增长达到了223.2%,全球android系统设备的保有总量也达到了5亿台。
在现实需求下,移动设备软件的开发未来几年都将是一个热门领域,基于J2ME的android平台应用程序开发也的得到了广泛关注。
本论文主要概述了基于J2ME的手机游戏开发过程。
首先阐述了开发时所需要的JDK实验环境,其次是开发工具的使用、WTK配置开发环境。
本文详细介绍了手机游戏的开发步骤和项目流程,希望读者阅读完本文之后会有所收获。
第1章绪论
1.1手机软件的现状
目前的手机大多采用IOS,Android,WP三个系统,其中使用用户最多的是Android系统,而Android系统就是遵守J2ME的规范开发出来的。
虽然J2ME和PC中的Java相比有许多的限制,但是已经可以满足开发手机游戏的各项需求,使用J2ME开发得到的游戏可玩性和画面精美度都非常高。
与以前的手机相比,Android系统有着更加友好的操作界面和操作方式,并且支持无线网络的连接,配备有许多丰富多彩的应用软件。
传统的手机有很多的缺点:
传统手机中的软件是固化的,无法更新软件。
手机在连接网络的时候都需要通过WAP(WirelessApplicationProtocol)访问网络,这种连接方式耗时与费用都很高。
随着J2ME的技术成熟与采用Android系统手机的出现,这些问题也被完美解决。
开发商只要遵守J2ME的编程规范,就可以开发出运行在Android平台上的手机软件应用。
手机使用者只需要在网上商城下载想要的应用,就可以随时更新手机中的软件,现在手机软件下载中比较多的就是游戏软件,所以本文主要介绍了开发一个J2ME手机游戏的基本步骤和注意事项。
目前Java手机已经普及,开发出实用好玩的基于J2ME的Java手机游戏已经成为了手机游戏发展的重要方向之一。
1.2J2ME的介绍
JavaME以往称作J2ME(JavaPlatform,MicroEdition)包括了J2SE的核心API以及其独有的一些API,为一些小型的设别提供Java的语言平台。
J2ME和J2SE,J2E一样是通过JCP(JavaCommunityProcess)制订的,它们是Java的三个分类。
J2ME架构分为了Configuration、Profile和OptionalPackage三类,这三类也组成了基本的运行环境。
这样分类可以在实现标准化和各种版本的兼容性的同时满足了程序对不同方面的各种需求。
与J2SE和J2EE相比,J2ME的每个程序功能有所局限,而且限制比较多,但是J2ME的运行环境更加的多样化。
Configuration主要是把设备按存储和处理能力进行分类,其定义了虚拟机特性和基本的类库。
已经标准化的Configuration有ConnectedLimitedDeviceConfiguration(CLDC)和ConnectedDeviceConfiguration(CDC)。
Profile在Configuration基础上建立,与Configuration构成了整个运行环境。
它针对特定领域进行分类,主要包括特定用途的类库和API。
CLDC上已经标准化的Profile有MobileInformationDeviceProfile(MIDP)和InformationModuleProfile(IMP),而CDC上标准化的Profile有FoundationProfile(FP)、PersonalBasisProfile(PBP)和PersonalProfile(PP)。
OptionalPackage(可选包)独立于前面两者,提供更为多样化的功能。
目前有数据库访问、多媒体应用、蓝牙等可选包。
1.3MIDP
MIDP(Mobile
Information
Device
Profile,移动信息设备描述)是一套Java应用的编程接口(Application
Programmer'
s
Interfaces(APIs))。
它们与有限连接的设备配置(Connected
Limited
Configuration,CLDC)一起向诸如蜂窝电话等移动信息设备提供了一个完整的Java应用运行的环境。
MIDP中一般包括了下列API包:
Javax.microedition.lcdui--用户界面的(UI)API,它为MIDP应用提供了很多实现用户界面功能的特性;
Javax.microediton.rms--移动设备的信息描述提供了一种让MIDlets永久储存数据的机制,而且在以后的使用中能够取回这些数据。
Javax.microedition.midlet--这个MIDlet包明确定义了MIDP的应用,也定义了环境与环境之间的交互。
Javax.microedition.io--移动信息设备描述了基于有限连接设备配置的GenericConnection框架的网络支持。
MIDP的系统结构大致分为了4层:
操作系统层、CLDC、MIDP和MIDP应用程序。
MIDP中的API十分的好用,而且可以在各个平台上使用,用其开发的程序几乎不用改动就可以在设备上运行,这给代码的开发和维护减轻很多的工作量。
1.4打飞机游戏概述
本文所开发的J2ME射击类手机游戏是通过对玩家控制对象,也就是一架飞机的生命值进行判断,来确定是否能够通过关卡。
其中飞机的控制由按键监听器来实现。
游戏中还增加了道具包的功能,目的是增加游戏可玩性和趣味性。
1.5本章小结
本章首先介绍了采用Android系统的手机发展现状,然后概述了J2ME的相关内容,分析了J2ME在手机中软件开发中起的重要作用,描述了本文的相关背景。
在开发J2ME软件的时候,有些很方便的开发工具,也有很多现成的API供选择,只要利用好了这些资源会使得开发十分方便。
下一章节将要介绍开发游戏所需要的软件环境。
第2章游戏开发环境
2.1开发环境及相关技术的介绍
2.1.1开发环境
手机游戏真正地运行环境是各种类型的设备,但在手机上直接开发明显是不现实的,也许在未来会有相应的技术实现终端开发。
但现在还是在PC机上搭建虚拟平台来实现模拟运行。
本开发使用的操作系统是windows7,使用的IDE为MyEclipse,之所以选择此IDE因为它是用Java语言开发完成,使用时更加方便,绝大多数Java开发工程师都使用此款软件。
除了Eclipse之外,也有许多其他IDE这里不做介绍。
本设计使用的WTK为最新版SunMicro.J2MEWirelessToolKit2.2,这会在下面的小节详细介绍。
JDK是开发Java软件必不可少的文件。
本程序运动JDK7.0,现在最新的版本是JDK8.0但使用不太广泛,大多的公司使用JDK6.0,很少一部分使用JDK5.0,所以本设计会有很小的几率出现版本不支持的bug。
2.1.2语言特点
1.跨平台
Java是一个跨平台的编程语言,只要实现了Java的虚拟机,Java就可以用一样的代码,在不同的平台上实现相同的效果,就像Java推出时的口号一样“一次编译,到处运行”。
这种跨平台的性能对Java的推广是十分有用的,设想一下,当你在一个Windows中完成编译了一个程序可以完美的运行并且实现功能,这时候你又想在Linux中也有这样一个程序,你只能在Linux中重新写这个程序,可是这个程序实现的功能又和Windows中的一模一样,大大浪费了开发者的时间。
有了Java以后,只需要在Linu中实现Java的虚拟机就可以把Windows里的代码完全复制到Linux中,照样完美运行。
JVM(Java虚拟机)这也是Java如此炙手可热的原因之一。
2.安全性
从Java公布以来,Java的创始人就大力支持对Java的安全性的研究,制定了供人们使用的规范,实现了虚拟机和安全库,并迅速地处理了所有已知的安全bug。
在任何情况下,想要蒙骗Java的安全机制将是非常困难的。
如今,发现bug的技术越来越强,发现bug的数目也越来越少。
3.面向对象
面向对象时一种程序设计技术,它和传统的面向过程的编程语言不同。
拿画画来当比方说,如果你是‘面向对象’的,你最关注的是你这幅画,然后才是颜料画笔等这些工具。
如果是‘非面向对象’的,你会关注你有什么工具,然后才是你所要画的那副画。
现在没有一个编程语言是不使用面向对象的概念来开发的,面向对象更加有效的实现了编程的代码。
4.网络技能
Java中有一个扩展的示例程序库,提供了各种用HTTP或FTP协议传送信息和接收信息的库函数。
Java应用程序可以通过URL打开和访问网络上的对象,其方便程度就像是在访问本地文件一样。
5.健壮性
在Java中没有指针,而是提出了引用这个概念。
其本质就是对指针的操作,Java把指针封装到了对象中,通过对象来对指针进行各种操作。
C++中是直接对指针进行操作,这样提高了数据的安全性。
在没有指针的语言里,非常多的数据结构都很难实现。
但是Java具有了双方的优势。
它不需要去使用指针构造字符串、数组等等的结构。
如果有必要的话,Java也可以具有操作指针的能力。
Java是绝对安全的,因为它永远也不会去使用一个有错误的指针。
2.2关于开发工具
Eclipse是一个开源的而且基于Java的可扩展的开发平台。
就其本身来说,它就是框架和一组服务,用于通过各种插件组件构建的开发环境。
值得庆幸的是,Eclipse中附带了一个标准的插件集,其中包括了Java的开发工具(JavaDevelopmentKit,JDK)。
Eclipse大多都是用于Java的集成开发,但其功能不仅仅是服务于Java语言。
Eclipse中是包括插件开发环境的(Plug-inDevelopmentEnvironment,PDE),这个组件主要就是针对希望扩展Eclipse软件的开发人员,因为Eclipse运行开发人员构建自己所需要的环境。
由于Eclipse中所有工具和功能都是插件,开发人员有一个共同的场所来给Eclipse提供插件,或者是给用户提供新的功能。
这种平等的特性不仅仅适用于Java开发工具。
虽然Eclipse是完全用Java语言开发出来的,但是它不是被Java语言所独占:
Eclipse还支持C/C++、COBOL、PHP等一些现今比较通用的编程语言,这些语言的插件有的已经可以适用有的预计会推出。
Eclipse还可以适用一些和开发无关的语言。
综合来看Eclipse是一个十分强大的开发工具。
WTK的全称是SunJ2MEWirelessToolkit——Sun公司的无线开发工具包。
为了简化J2ME的开发过程,这个工具包就被sun公司开发出来。
使用其中的各种工具包就能开发出与JavaTechnologyfortheWirelessIndustry(JTWI,JSR185)规范相兼容的J2ME应用程序。
该工具箱包含的很全面,有许多常用的开发工具。
WTK中必须有MIDP和CLDC的类库,这样才可以用来开发MIDP,使得MIDlet可以顺利的编译和运行,有了WTK能节省很多开发时间,不必花时间去调试类库。
不同版本的WTK其中的内容是不一样的,开发时需要看清楚WTK的版本。
如果有一个jar包的功能在你使用的这个版本的WTK中没有,可以直接拷贝一份这个jar包到你当前的项目中去。
apps目录中包括了许多Demo程序,为我们演示了J2ME的一些技术实例,这些是很好的学习材料。
2.3本章小结
本章主要介绍了要开发本游戏所需要的环境和要用到的各个工具软件,有些工具需要配置过后才能使用。
下一章要介绍开发的过程。
第3章游戏结构和技术
本游戏采取逻辑层与展示层相分离的设计结构,使得逻辑和表现的更改互不影响,可以方便以后的维护和开发。
实现这种设计最简单的办法就是为每个类型都定义面板,但是这样比较浪费时间,代码的融入程度较高,不建议采用这种办法。
在Java的Web开发中有一个MVC模式,较适合使用。
把程序的逻辑分成一层在逻辑层内修改你想要的方法,展示层分为一层,其展示内容根据逻辑层传来的信息来决定,通过MVC模式可以迅速的实现画面的转换。
精简了代码,也方便模块的划分。
根据对游戏功能和需求的分析,本设计在程序中定义了PlaneGameMIDlet、PlaneGameCanvas、SpriteElement、Bullet、MyPlane、Level、Enemy、Boss、Package等九个类组成。
类功能图如下图所示:
每个移动的对象都需继承这个类
SpriteElement
PlaneGameMIDlet
PlaneGameCanvas
Level继承该类
主要功能实现类
玩家控制类
子弹类
敌机表示类
道具类
Package
Level
MyPlane
Enemy
Bullet
Boss
图3-1类功能图
3.1PlaneGameMIDlet类
PlaneGameMIDlet类继承了MIDlet类,整个程序的开始和结束都是在这个类中。
本程序在这个类中使用了单例模式。
单例模式的好处是不能创建多个PlaneGameMIDlet类的对象,保证了在同一时间只有一个对象会被实例化。
其中的成员方法有:
startApp
程序在第一次运行的时候会调用这个方法,这个方法就像是游戏的入口,执行方法过后,游戏显示欢迎界面,具体代码如下:
protectedvoidstartApp()throwsMIDletStateChangeException{
Display.getDisplay(this).setCurrent(newWelcomeCanvas());
}
其中startApp就像是一个入口,endApp是个结束点。
结构如下图所示
程序结束点
程序入口
触发暂停事件
destroyApp
执行完毕
pauseApp
图3-2PlaneGameMIDlet流程
3.2PlaneGameCanvas类
PlaneGameCanvas类是程序的核心类,几乎所有的功能都在其中实现,此类继承了GameCanvas类,实现了游戏的逻辑和展示的功能。
实现了Runnable接口,用以使用线程;
实现了CommandListener接口,提供对按键的监听。
为了完成很多的功能,该类有很多的成员变量:
Graphicsgraphics
画图对象,用来绘制图片。
intscreenHeight,screenWidth
用来定义屏幕的宽度和高度。
ThreadmyThread
当前画布的线程。
longstartTime,endTime
一轮线程开始的时间和结束的时间
intframeSpeed
帧速
Commandpause,back,start,resume
分别代表暂停、返回、开始、继续四个按键。
booleanRUN=true
是否运行,初始值设为true,保证第一次的时候额可以运行。
booleanSTART=false
是否开始,初始值设为flase,等玩家按下开始键之后再设置为true
booleanBACK=false
是否返回,初始值设为false,保证游戏不会一直返回,当玩家按返回键的时候再设置为true。
Terrainterrain
自定义的地图类,用来存放地图对象。
MyPlanemyPlane
玩家控制的飞机对象。
Vectorenemys
敌方飞机的数组。
VectoreBullets
敌方飞机的子弹。
VectormyBullets
玩家控制飞机的子弹
Bossboss
最终敌机的对象。
booleanifBoss
用来决定最终Boss是否要出现
本类中的成员方法有:
commandAction(Commandc,Displayablearg1)
按键监听方法,当按下不同的键时,在游戏下的按键也会跟着变化。
最开始的时候只有“开始”按键,游戏进行后删除“开始”按键,添加上“暂停按钮”,暂停过后删除“暂停”按钮,添加上“继续”和“返回按钮”。
processMovement()
更新帧的方法,爆炸的效果,子弹的飞行,飞机的移动,都是通过这个更新帧来向玩家显示。
processColliding()
处理碰撞效果,这个方法处理了游戏中所有的碰撞。
方法中的代码如下所示:
run()
这个方法重写了Runnable中的run方法,根据游戏的设定设计符合要求的run方法。
整个PlaneGameCanvas类的结构如下图所示:
构造方法
paint
run
成员方法
commandAction
processMovement
processColliding
抽象方法
end
make
图3-3PlaneGameCanvast结构
3.3SpriteElement类
此类继承了Sprite类,这个类并没有直接的实例化,而是作为所有移动类的父类,列如Plane类、Bullet类、package类等等。
此类提供了许多公用的方法,减少代码冗余,体现面向对象编程的优势。
该类的成员变量有:
Spritesprite
精灵对象,用于显示图像。
Imageimage
对象的图片资源。
定义屏幕的长度和宽度。
该类的成员方法有:
SpriteElement(StringimageName)
SpriteElement(StringimageName,intframeWidth,intframeHeight)
有两个构造方法,一个是不带动画的构造函数另一个是带有动画的构造函数。
paint()
画图的方法,通过调用Sprite对象的paint方法,然后把画图对象带入到此方法的参数中。
还有的是成员变量的get、set方法,这里不过多介绍。
3.4Bullet类
Bullet类是飞机的子弹类,也是个抽象类对所有子弹共有的方法都在其中得到实现,此类继承了SpriteElement类,可以得到SpriteElement中的方法和属性。
其增加了一个新的成员变量:
intdestorying
这代表了每个子弹的扣血量,也可以称做子弹的威力。
此类重写了SpriteElement中的两个构造函数,代码如下所示:
//带动画的构造函数
protectedBullet(StringimageName,intframeWidth,intframeHeight,