基于J2ME的连连看手机游戏开发毕业优秀论文.docx
《基于J2ME的连连看手机游戏开发毕业优秀论文.docx》由会员分享,可在线阅读,更多相关《基于J2ME的连连看手机游戏开发毕业优秀论文.docx(30页珍藏版)》请在冰点文库上搜索。
基于J2ME的连连看手机游戏开发毕业优秀论文
广东XX职业学院2012届学生
毕业论文/设计
题目:
基于J2ME的连连看手机游戏开发
姓名:
_________XXX__________________
系别:
__信息工程系____
专业:
____计算机应用技术_________
班级:
___09应用
(1)班______
指导老师:
____XXX_
日期:
_____2012年5月10日__
独创性声明
本人声明所呈交的毕业论文(设计)是本人在指导教师指导下进行的研究工作及取得的研究成果。
据我所知,除了文中特别加以标注和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写过的研究成果,也不包含为获得广东科贸职业学院或其他教育机构的证书而使用过的材料。
与我一同工作的同志对本论文(设计)所做的任何贡献均已在论文中作了明确的说明并表示谢意。
论文设计作者签名:
签字日期:
年月日
基于J2ME的连连看手机游戏开发
摘要
JAVA是非常流行的面向对象设计语言,而JAVA中的两大方向是J2EE和J2ME,其中J2ME是目前JAVA最闪亮的技术,其实J2ME就是把JAVA的微型化应用。
J2ME是一个能在嵌入式设备上进行快速开发的语言。
所以关于手机的程序的开发,成了JAVA的最重要应用。
信息产业在中国已经成为了非常重要的产业。
无线通讯业作为通信业经济的命脉已经占据了很好市场。
在中国,3G时代即将到来,Java手机游戏作为手机增值业务的主要增长点,必将迎来蓬勃发展的机遇。
本文对J2ME的概况进行简单的概述,然后介绍了手机游戏利用J2ME为平台的开发流程,随着手机硬件功能的急速提高,手机游戏也会制作的越来越精美.手机游戏在国外已经得到了很好的发展,国内市场潜力也十分巨大,随着移动增值业务的不断扩大,手机游戏已经开始占据了很大的市场。
关键词:
J2ME,卡马克算法,MIDP,A-RPG
目录
摘要7
一、前言8
1.1引言8
1.2手机游戏现状9
1.3手机游戏应具有的特征9
二、J2ME概述10
2.1J2ME定义10
2.2J2ME的总体架构10
三、开发环境及相关技术11
3.1开发环境11
3.2关于Eclipse及Eclipseme11
3.3关于WirelessToolKit12
3.4MIDP2.0简介13
四、详细设计13
4.1界面详细设计13
4.2功能详细设计15
4.3打包测试22
五、总结23
附录22
致谢
参考文献31
一、前言
1.1引言
随着科技的发展,移动通讯设备己经成为人们生活中不可缺少的通讯工具。
随着软硬件技术的发展,移动通讯设备在为人们提供优质通讯功能的同时也在为人们提供越来越多的附加应用。
随着以WAP,JAVA为代表的新的移动增值应用技术迅速崛起,手机用户已不再满足于简单的手机单机版游戏,而是期待更加绚丽、动感的手机应用体验。
手机在线游戏因具有实战感强、操作方便、画面生动和娱乐性与趣味性强的特点而逐渐获得人们的青睐。
手机在线游戏大大提高了手机的应用范围,使原有手机只能提供固化游戏的方式得到根本改变,同时也为手机运营商提供了更加广阔的运营空J2ME作为Java技术专为消费嵌入式系统定制的版本,其稳定性、跨平台性、安全性、扩展性使得成为移动通讯设备上主流开发平台。
1.2手机游戏现状
在诸如SunMicrosystems、Nokia、摩托罗拉等大公司的推动之下,基于J2ME的应用开发逐成热点随着手机性能的不断提供,手机平台之上的游戏应用将逐渐成为继PC游戏应用之后又一新业务增长点。
越来越多的厂商和开发者投入其中。
目前,国内手机增值业务日益增长,基于J2ME的应用产品市场也逐日扩大。
1.3手机游戏应具有的特征
一个手机游戏应该具有以下特征:
易于学习:
既然手机游戏面向的是普通消费者而不是计算机专家,那么他们不可能深入的学习游戏技巧。
消费者不会花几个小时去研究一个几元的手动操作的游戏。
保持游戏的简单是最基本的要求。
可中断性:
多任务处理是手机生活方式的基本特征。
手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。
而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。
所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。
基于订阅:
手机游戏的盈利成功取决于他们巨大的使用量。
一开始开发和设计每个游戏都是昂贵的。
如果一个手机游戏开发者要赢利的话,重要的是:
同一个游戏引擎,多个标题,基本的故事情节类似。
基于订阅的游戏是不断产生收入的最好方法。
丰富的社会交互:
不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。
对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。
在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。
二、J2ME概述
2.1J2ME定义
Java2MicroEdition(J2ME)是一种针对移动电话和PDA这样的小型设备的Java语言。
它是一种新的、非常小的Java应用程序运行环境,它所定义的构架主要用于在手持式设备上推广使用Java技术。
J2ME定制了2种配置:
CLDC(ConnectedDeviceConfiguration).其中,CLDC是为手机等CPU和内存资源远低于u标准Java要求的设备所提供的一种配置,它是对Java标准版本做了最大程度的缩减后得到的,其虚拟机和核心类库多于100kB。
CDC配置主要用于拥有更多资源的下一代设备。
CLDC配置给各种手持设备提供了能运行Java程序的一种环境,但开发者还很难在这种环境下开发程序没,首先因为CLDC核心库提供的是低级API,不适合直接用于构建应用程序;其次,手持设备的系统结构千差万别,很难保证应用程序的图形界面,网络等功能的移植性。
因此,为了进一步增强J2ME功能,SUN公司允许设备供应商在实现CLDC的基础上再为自己的设备提供专门的高级API及程序管理方法,即PROFILE,以简化应用程序的开发,使程序有更好的移植性。
同时,SUN公司还与50多家知名的移动设备制造商及软件开发商一起,制订了专门用于手机等移动信息设备的配置文件MIDP(MobileInformationDeviceProfile).J2ME平台是移动信息设备配置文件(MIDP)和在MIDP之上建立的可选软件包。
2.2J2ME的总体架构
为了支持资源受限设备所要求的灵活性和可定制性,J2ME体系结构分成如图1所示的4层。
由配置层定义的Java虚拟机运行于设备的宿主操作系统之上,构成整个平台的基础。
配置层提供了基本的语言特性,框架层提供针对设备的特殊功能API和扩展类库。
三、开发环境及相关技术
3.1开发环境
操作系统:
MicrosoftWindowsXPSP2
程序语言:
Java2
开发包:
SunJava(TM)WirelessToolkit2.5.2forCLDC
EclipseSDKVersion:
3.3.1.1
Java(TM)2StandardEdition(jdk1.5.0_14)
IDE:
eclipse3.3.1.1
关于本作品的开发环境,整合J2DK+Eclipse+NLpack-eclipse+Eclipseme+WirelessToolKit,其安装配置过程为另一方面的内容也比较简单,在此不再赘述。
可以这么说,JDK提供了虚拟机来运行应用程序,而WTK提供了仿真器,Eclipse及其它插件提供了开发测试程序代码的IDE集成开发环境。
此外,这些资源都是免费的,可以从网上直接下载,在下面小节中将做简单的介绍。
3.2关于Eclipse及Eclipseme
Eclipse是一个开发源代码的、基于java的可扩展开发平台。
Eclipse相关的许可证是大多数基于CommonPublicLicense(CPL),CPL是一个为OpenSourceInitiative(OSI)所认可的许可证。
由于EclipseFoundation的建立,Eclipse的许可证将逐渐趋向于使用EclipsePublicLicense(EPL),EPL是一个与CPL相类似的许可证,正在进行OSI的认证工作。
作为当今最流行的java开发IDE之一,java社群使用Eclipse以及基于Eclipse技术而来的IBMWebsphere的开发者已经超过了半数。
Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。
在Eclipse中几乎每样东西都是插件。
同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。
eclipse的发行版都已经带有最基本的插件,方便了开发人员。
因此,除了搭建移动开发环境之外,也可以下载Jsp插件、Tomcat插件、Jboss插件来进行整合,以用于JSP、J2EE的开发。
图2-1Eclipse集成开发平台
在http:
//www.eclipse.org/downloads/index.php可以免费下载到Eclipse的解压安装文件、语言包以及许多实用工具插件。
EclipseME作为Eclipse一个插件,致力于帮助开发者开发J2ME应用程序。
EclipseME并不为开发者提供无线设备仿真器,而将各手机厂商的实用仿真器紧密连接到Eclipse开发环境中,为开发者提供一种无缝统一的集成开发环境。
在http:
//www.eclipseme.org/上可以免费下载到EclipseME。
3.3关于WirelessToolKit
WTK(WirelessToolKit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机仿真器开发包。
它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。
虽然它没有强大的功能和完善的调试手段,但它提供运行仿真器的最基本组件,是其他IDE需集成采用的必备元素。
当然,你可以从手机厂商下载相关的API及仿真器来进行开发。
同样,WTK也是个免费软件,可以在Sun上得到下载。
3.4MIDP2.0简介
MIDP即移动信息简表(MobileInformationDeviceProfile)针对的是移动信息设备,或者体积较小、能力有限的手持设备(MID),这些设备的共性是具有用户接口即屏幕和输入机制。
MIDP目标设备的典型例子就是手机。
MIDP2.0相较之前的1.0版本,加强了对用户接口、多媒体和游戏功能、网络连接功能的支持,主要包括以下几个方面:
MIDP2.0提供的游戏API使得游戏本身可以充分地利用设备自身的图形处理功能。
它的出现大大简化了J2ME游戏的开发工作,同时也使开发者能够更多地控制程序的图形处理功能。
在通信方面,MIDP1.0仅支持HTTP,MIDP2.0增加了对HTTPS、报文、Socket通信以及串口通信的支持。
此外,MIDP2.0还支持Push体系架构,这样,手机能够收到来自服务器的报警、消息或者广播,并根据要求启动手机上的应用程序进行操作。
支持0ver-The-Air(OTA)Provisioning,它使用户能够动态地部署和更新移动设备上的应用程序。
MIDPOTAProvisioning模型为移动服务提供商提供了单一、标准地部署MIDP应用程序的途径。
该模型已经被众多技术领先的移动设备制造商和服务提供商所采纳。
MIDP2.0增加了强大的“端到端”安全模型。
一方面,MIDP2.0支持HTTPS,可以对所传输的资料进行加密;另一方面,MIDP2.0采用了和MIDP1.0不同的安全机制,采用安全与来确保XX的MIDlet套件无法访问受权限控制的数据、应用程序以及其他网络和设备资源。
四、详细设计
4.1界面详细设计
游戏的界面分为控制区和操作区,控制区是整个游戏的控制按钮的集中区域,操作区是游戏者进行游戏的场所。
(1)控制区
控制区中有以下一些按钮:
●开始游戏按钮:
进入游戏开始界面,玩游戏显示分数点数与所用时间。
●放弃游戏按钮:
放弃本局游戏,进行游戏模式选择重新开始游戏。
●退出按钮:
退出游戏程序。
●重新洗牌按钮:
把游戏中的图片重新排列。
●暂停按钮:
暂停游戏。
●游戏说明按钮:
游戏规则的说明。
图4-1
(2)操作区
操作区是游戏者进行游戏的场所,游戏的规则很简单,就是用不超过两次转折的连线把两个相同的图片连起来,直到把游戏画面中的图片消完为止。
游戏采用GameMap类,用来加载图片和连连看的核心算法来选择图片选中以及消除图片的算法,用GameCanvas来接收手机键盘消息来消除图片和重画地图,用UITimer与GameCanvas来控制时间来计算游戏时间与判断是否能成功完成游戏通关。
图4-2
图4-3
4.2功能详细设计
功能的详细设计主要采用程序流程图作为工具来阐述。
图4-4
(1)游戏结束时的判断
这个主要表现两个问题:
每一次消去图片后,均将相应位置的flag数组元素置0,且遍历flag数组是否为0。
如果全部为0,则游戏结束。
当游戏结束时,直接向玩家发送gameover指令。
解决的办法:
首先,每次消去图片后仅将图片数目(gamevalue变量控制)减2,当为0时,将gameover变量设为真值。
而每次都向函数发送图片数目,当图片数目值为0时,即判断玩家已经胜利。
(2)游戏进入前的选择
每个MIDlet程序都必须有一个主类,该类必须继承自MIDlet。
它控制着整个程序的运行,并且可以通过相应函数从程序描述文件中获取相关的信息。
该类中拥有可以管理程序的创建、开始、暂停(手机中很可能有正在运行程序却突然来电的情况,这时应进入暂停状态。
)、结束的函数。
本程序主类为MainMIDP,并实现接口CommandLIstener。
(3)游戏背景
首先显示的是游戏的背景介绍,在类MainMIDP定义Form类对象m_frmMain,在startApp()函数中判断是否为刚进入游戏,如果为假的话,将创建Form类的实例,并且调用append()方法在表单上放置m_MainList菜单。
调用setCommandListener()命令使Form与CommandListener建立关联。
调用Displayable显示。
seturrent()函数显示背景介绍窗口。
当玩家点击ok后将调用display.setCurrent(m_MainList)以显示游戏菜单m_MainList。
当玩家按住上或下键时,在函数keyPressed(intcode)中的整型变量menuIndex相应的减1或加1,相应的,在paint()函数中会根据menuIndex绘制选项是否被选中。
当移动选项条到某项,并点击ok时,在commandAction()方法中根据menuIndex来判断是“开始游戏”、“游戏说明”、“关于”、“退出”。
例如当选择“关于”时,将调用MainMIDP类中的commandAction()方法以显示”关于”界面。
(4)游戏逻辑及五个重要类的实现
GameCanvas类所实现的功能
画游戏屏幕的时间间隔:
privateintm_paintTime;
玩的时间计数:
privateintm_timeCount;
一局游戏总共花费的时间:
privateintm_GameTimeCount;
定时次数调用次数计数:
privateintm_timeMcount;
显示地图装载效果状态计数:
privateintm_IniGameMapCount;
画连接线标志:
privatebooleanm_bPaintCleanFlag;
privatebooleanm_bPaintCleanStart;
privateintm_iPaintCleanCount;
游戏运行状态标志:
privateintm_StatusFlag;
0:
游戏图片文件装载过程,在程序启动的时候,另外一线程装载。
1:
游戏地图文件初始化状态,出现地图初始化的效果
2:
游戏进行中,检查剩下时间,调整状态条,显示分数等信息
3:
单节游戏结束,处理是否继续游戏、退出游戏、保存记录;
4:
一局游戏结束,显示画面庆祝
游戏地图信息:
privateGameMapm_gameMap;
接收键盘状态信息:
调用keyPressed()函数来消除相同图片后的设置以及画面的重画。
并调用GameMap类来进行游戏算法和规则的调用与判断。
(5)地图的移动
根据游戏的设定,游戏中选图片是向下向上移动的,实现此功能的方法。
每个创建Command实例的J2ME的应用程序也必须创建实现CommandListener接口的实例。
每当用户通过commandAction()方法的方式与命令进行交互的时候,就会通过CommandLIstener.所以实现CommandListener的类必须实现commandAction()方法。
在commandAction()方法中,使用getabel()方法获取命令的标签。
如果getLabel()=“暂停”时,表示玩家点击了暂停键,此时,conti赋值为false,游戏画面的绘制及游戏相关的运算暂停,并且,使用removeCommand(c)语句将“暂停”移除,使用addCommand(newCommand("继续",Command.OK,2));将”继续“按纽”添加进来。
当玩家点击“继续“时,conti赋值为true,并且,一定要调用start()方法,否则继续功能不可用。
必须调用start()方法的原因是:
J2ME的线程被stop()方法拿掉,如果想停止线程的运做,就必须依靠一个旗标(flag),在本程序中,flag就是boolean型变量conti。
所以一旦此标识变量被设为false,那么while(conti)循环就会结束,线程也会跟着结束。
当用户按下“继续”的时候,start()将重新产生一个线程继续执行相关的运算和画面绘制。
当玩家通关时或者任务失败时,将显示相应信息,并使用上面的方法将“暂停”键变为“返回”键盘,当点击“返回”键时,将返回主菜单选项,调用类lzhhdm里的方法menuscreensecond(),在此方法中,实例化一个MenuScreen类对象,并且使选项“新游戏”改变为”重新开始“。
完成此项功能的语句子为MenuScreen.mainmenu[0]=”重新开始”。
当选择”重新开始“时,使用gamescreen=newgameScreen(this)将使所有变量重新被初始化,如地图的绘制、敌人出现位置的重置、敌人的数量、玩家飞机的当前位置等。
使用gamescreen.start()重新开始程序的循环。
在方法paint()过程中,除了要重绘地图、图片外还要在上方绘制关卡信息、玩家分数点、及所用时间等。
首先使用lm.setViewWindow()和lm.paint()设定可视范围ViewWindow和从哪里画起。
其次,使用g.drawString()绘制屏幕上方的关卡信息、战绩、玩家剩余生命标志。
当每次刷新绘图页面时,应使用GameCanvas的flushGraphics()将屏幕后台的缓冲区内的图像刷新到前台来(flushGraphics()应该写在paint(){}的最后)。
(6)核心算法—判断图片是否可擦除
两点连接原理
原理坐标
选中两点,坐标分别为S(sx,sy)、T(tx,ty),判断连接从S点开始,我们可以从四个方向与T点进行连接,分别是上、下、左、右,在此,我们以向上为例进行算法分析。
每次向上连接一点时,又有两个方向可以选择,即左和右(即分T在S的左、右边)。
在此,我们选择选择向左为例对算法进一步分析。
确定了方向的选择,那么连接线的形状就是:
(T在S的左边的连接情况)
那么如何判断这一系列连接线是否可连呢?
源点S的坐标为(sx,sy),目标点T坐标(tx,ty)
在算法中我们定义几个临时变量:
x1、x2、y1、y2,当然还有游戏地图的边界变量:
stMap_x、stMap_y。
源点S不需要判断,默认可以作为连接线上的一点。
如果sy>0,将sy-1赋给y1,如果坐标(sx、y1)没有图片文件(我们在此算法中用empty表示),则标记此点为可连接点(我们在此算法中用SetCntMaps(x,y)表示),如果有图片文件则此路线不可行,也就是选择向上连接是无法满足要求的。
我们在这里演示的情况是先向上再向左,所以接下来的判断条件是tx当判断到x2=tx时,也就是此路线上都是可连接点,将y1-1赋给y2,判断(x2,y2)是否有图片,如果没有,则标记它为可连接点,并循环判断到y2=ty,如果此点仍然可连接,则该路线是可行的。
当然上述连接算法只是判断一条路线,而y1=sy-1。
那么需要循环判断是否有其它路线,则根据y1=y1-1重复上述算法就可以了。
这只是根据我们选择从S点出发,向上寻找路线并且T在S的左边这种情况而设计的算法,其它的情况(向上再向右、向下再向左、向下再向右、向左、向右)是类似的。
此种情况的算法流程图如下:
4.3打包测试
使用Eclipse完成代码的调试之后,需要使用WTK生成包(即jar和jad文件),其过程如下:
首先,使用WTK的新建项目功能建立一个新项目,要求与Eclipse工作区下的项目名称、MIDlet类名相同。
新建项目后,将Eclipse工作区下的.java文件拷入src文件夹,将.class文件拷入class文件夹(需要新建),将pic文件夹拷入res文件夹,点击生成,如一切正常之后,选择项目-包-生成包。
生成的jar和jad文件存储在LLK/bin目录下。
运行WirelessToolkit2.5.2,使用手机模拟器进行测试。
点击Lanuch按纽,进入游戏界面,即可以进行游戏测试了。
五、总结
全文从手机游戏当前的现状说起,提出问题。
然后从J2ME语言开始介绍,着重介绍3DAPI。
这使我所作设计的基础,随后主要围绕3D迷宫的各个类进行详细描述。
该设计的核心计算为深度优先算法。
其主要作用是使程序能够随机生成一个迷宫地图提供给玩家,此外本设计还设制了两个不同的玩家视角,以方便玩家顺利进行游戏。
本设计完成了3D手机游戏的基本要素,简单操作、运行流畅、利用了墙体透明变化增加了游戏的可玩性,但由于本人对J2ME的理解与运用水平还是有限,设计仍然还有很大可改进空间。
通过此次毕业设计的制作,增强了个人学习和独立工作的能力,同时掌握了一定的J2ME知识,包括对Eclipse开发环境的熟悉,WTK的使用,以及对M3G技术各个类有了一定了解,对于以后可能从事相关工作相信会有很大的帮助。
游戏是人类文明发展到一定阶段的产物,游戏的发展,催生了许多新的技术,这些技术在许多领域促进了科技的发展,增加了生产力。
与PC游戏不同,手机游戏摆脱了线缆