基于j2me连连看手机游戏开发.docx
- 文档编号:30512786
- 上传时间:2023-08-16
- 格式:DOCX
- 页数:18
- 大小:520.95KB
基于j2me连连看手机游戏开发.docx
《基于j2me连连看手机游戏开发.docx》由会员分享,可在线阅读,更多相关《基于j2me连连看手机游戏开发.docx(18页珍藏版)》请在冰豆网上搜索。
基于j2me连连看手机游戏开发
xx大学本科生毕业设计(论文)
第一章绪论
1.1手机应用现状
目前手机应用中数量最大,使用人数最多的应用类型是手机游戏。
该类应用作为传统手机应用,在各个平台上发展已近相对完善,手机上对各种流媒体的播放也已完美的支持。
各类传统PC游戏厂商也已进入手机领域。
根据iResearch艾瑞市场咨询整理的国外数据显示,全球手机游戏市场的收入规模在2005年达到了102亿美元,2008年达到520亿美元。
07年之后,手机游戏市场增速开始减缓,传统手机游戏逐渐显现颓势,市场增长主要由基于智能手机平台的游戏所带动。
其中Nokia,Samsung,SonyEricsson,Motorola等智能手机都支持JavaME平台,使得手机应用得到极大的推广。
1.2编写目的
本文是对连连看游戏进行详细设计,是系统实现的出发点,通过本游戏的设计,综合自己在校期间所学的理论知识,设计该游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,初步掌握软件工程的系统理论,进一步巩固和加强自身对J2ME基础知识的理解,从而达到理论与实践相结合的目的。
1.3项目开发目的
本设计开发一个基于J2ME的手机连连看游戏。
主要包括以下模块:
游戏引擎模块、游戏界面模块。
按照软件工程的方法,从需求分析入手,到概要设计、详细设计,然后编码、测试,最终完成。
能够培养学生理解并掌握软件开发基本流程和方法,掌握基于J2ME的基本开发技术、游戏开发技术。
1.4项目提出意义
随着社会节奏的加快,平常工作的竞争强度也加大,生活的压力也跟着加重。
所以休息时或下班后大家都需要个休闲的娱乐工具,来放松自己,缓解自己的压力,玩一玩手机游戏来消除疲劳。
手机版连连看是一种意趣休闲的小游戏,不仅能调节精神,还能在游戏中锻炼我们的眼力视野,注意力的专心的程度,开发我们的思维能力,同时可以充实自己,向高等级、高难度挑战,培养我们面对困难时自己所具有攻克困难的信心。
第二章J2ME游戏背景
随着技术对游戏经验的促进,游戏市场持续增长。
商业IT革命为我们节省了时间和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。
甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。
2.1J2ME的由来
Java的最大目标和特点,就是"一次编写,到处运行"的平台无关性。
但是,很自然的,正如Sun认识到的,"Onesizedoesn'tfitall",一套标准无法适应各种不同的需求。
因此,Java技术目前共有三套,分别针对不同的平台和应用。
i.StandardEdition(J2SE,标准版):
针对桌面端PC和工作站的个人和
低端商务应用。
ii.EnterpriseEdition(J2EE,企业版):
针对服务器端企业级应用,支
持Servlets,JSP和XML等等。
iii.MicroEdition(J2ME,袖珍版,也有翻译为小型版或者移动版的。
)针
对有限内存,显示和处理能力的设备,主要是消费电子和嵌入式设备领
域(这实际正是Java语言设计最初的目标领域)。
在消费电子和嵌入式设备领域,内存从几百K到几十M,从没有屏幕到Web-TV,CPU从低功耗的嵌入式处理器到206MHz的RISC处理器,硬件条件的差异是相当大的。
这就使得J2ME的标准需要有不同的层次和类别来适应这个复杂的领域,因此相比之下J2ME就比J2SE和J2EE的标准要复杂得多。
2.2J2ME体系结构―Configuration和Profiles
针对消费电子和嵌入式设备领域丰富多样的设备和彼此相差极大的计算能力及各种硬件条件,J2ME首先根据最基本的一些特征把它们划分为两类。
具备间断网络通讯能力的个人移动信息设备:
如手机,双向呼机,PDA(Personal
DigitalAssistant,个人数字助理,也称掌上电脑)等等。
在Configuration中舍弃了设备的特殊性来保证Java平台的相容性,但是仅仅有Configuration显然是不够的,特殊的具体设备其独有的功能和硬件条件都没有得到支持。
为此,在Configuration的基础上,根据设备具体功能再进行一次划分,比如智能手机,PDA等等。
功能的划分也就是其他硬件条件的划分,比如屏幕大小,内存,计算能力,电力供应等等都是从属于功能的,因此同功能的设备的硬件条件都是非常相似的。
Profile(译为简表或者简档)就是针对每一类功能设备的特殊性定义的与设备特性相关的API,建筑于Configuration之上,作为Configuration的扩展和补充。
例如MIDP(MobileInformationDeviceProfile,移动信息设备Profile)就定义了关于移动信息设备(主要指智能手机和一部分具有无线通信功能的PDA)的图形界面,输入和时间处理,持久性存储,短消息等等的API,并且考虑到了移动信息设备的屏幕和内存限制。
而正在制定中的PDAProfile则定义了针对PDA的API,其屏幕,内存条件都要大于MIDP,但是网络方面的要求则显然和手机有所不同。
如下图所示,同属于一个Configuration的设备根据功能不同由不同的Profile来支持,Profile体现设备的特殊性,但是都建筑在一个共同的基础Configuration平台之上。
图1:
Configuration和Profile之间的关系
关于J2ME的体系结构,我们可以这样总结:
Configuration的分类是根据计算能力的不同来划分的,同类设备的计算能力相近。
Configuration是一个规范,定义了这类设备的共同Java平台,定义与设备无关的Java虚拟机和核心库,是平台相容性的基础。
Profile的分类是根据设备功能划分的,同类功能的设备其他各种硬件条件和需求也相近。
Profile是一组API,在某一Configuration的基础上扩展了针对设备特定功能的API,
使得标准能够完全适应特殊的设备,彻底发挥设备的功能。
J2ME体系的一般结构是:
由Configuration定义的Java虚拟机运行于设备的宿主操作系统之上,构成整个平台的基础。
Configuration提供了基本的语言特性,Profile提供针对设备的特殊功能API和扩展类库。
应用程序的运行环境需要一个Configuration和至少一个Profile,多个Profile可以共存,也可以叠加。
我们用两个具体设备的实现作为例子说明。
在一个运行PalmOS的PDA上,Configuration采用CLDC,虚拟机采用KVM(虚拟机和Configuration是紧密相连的,KVM只是CLDC定义的一个参考实现(referenceimplementation),并不是唯一的选择),然后采用PDAProfile的Profile。
在另一个运行Symbian的智能手机上,则可以采用KVM,CLDC,MIDP。
图2:
J2ME体系的一般结构和具体例子
第三章游戏的开发平台及使用的主要技术
3.1J2ME简述
J2ME,即Java2MicroEdition,是SUN公司推出的在移动设备上运行的微型版Java平台,常见的移动设备有手机,PDA,电子词典,以及各式各样的信息终端如机顶盒等等。
最重要的移动终端当然是手机了,因此,我们主要讨论手机相关的J2ME规范。
J2ME平台是由配置(Configuration)和简表(Pro-file)构成的。
配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机。
简表是针对一系列设备提供的开发包集合。
在J2ME中还有一个重要的概念是可选包(OptionalPackage),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(Bluetooth-API)提供了蓝牙的支持。
目前,J2ME中有2个最主要的配置,分别是ConnectedLimitedDevicesConfiguration(CLDC)和ConnectedDevicesConfiguration(CDC)。
CLDC是两个配置中较小的一个,为具有间断性联网能力、较慢的处理器和有限内存的设备设计的。
这些设备包括移动电话、双工呼叫器和入门级的
PDA,它们通常具有16位或32位的CPU、128KB~512KB可用于Java平台实现和相关应用程序的内存。
CDC是为处理能力较强、内存空间更大、联网能力更出色的设备设计的。
这些设备包括电视机顶盒、车载娱乐系统、高端PDA等。
CDC包含一个具有完备特性的Java虚拟机,比CLDC更大的JavaSE的子集。
CDC的目标设备通常具有32位或64位的处理器,2MB以上的可用于Java平台实现和相关应用程序的内存空间。
J2ME是Sun公司为嵌入式开发所定义的一个框架,一系列标准的规范所组成。
所以J2ME是一个协议簇,而不是单一的规范。
3.2开发工具和环境搭配
3.2.1开发工具
高级的MIDP应用程序开发工具能够帮助开发人员简化J2ME开发过程,包括Sun提供的官方开发工具WTK和手机厂商提供的专属SDK。
J2MEWirelessToolkit:
WTK的全称是SunJ2MEWirelessToolkit——Sun的无线开发工具包。
这一工具包的设计目的是为了帮助开发人员简化J2ME的开发过程。
该工具箱包含了完整的生成工具、实用程序以及设备仿真器。
J2ME集成开发工具Eclipse
Eclipse是一个开发源代码的、基于java的可扩展开发平台。
Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。
在Eclipse中几乎每样东西都是插件,实际上正是运行在Eclipse平台上的种种插件提供我们开发程序的各种功能。
同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。
EclipseME作为Eclipse一个插件,致力于帮助开发者开发J2ME应用程序。
EclipseME并不为开发者提供无线设备模拟器,而将各手机厂商的实用模拟器紧密连接到Eclipse开发环境中,为开发者提供一种无缝统一的集成开发环境。
3.2.2环境搭配
WTK:
由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的
JDK
安装
JDK1.6.0
安装J2MEWirelessToolkit(J2MEWTK)2.5.2
Eclipse:
除了Eclipse与EclipseME之外,你还需要java运行环境和一些手机模拟器来完成整个搭建工作安装
JDK1.6.0
安装
EclipseSDK3.1
安装EclipseME1.0
第四章手机连连看的需求分析
4.1需求分析
4.1.1游戏功能需求
本人设计的这款手机游戏名叫“海贼王连连看”,需选择一对相同的海贼王进行连线,每一局里玩家需要在规定的时间内消除所有的海贼王,当完成任务后,方能进行下一关。
介绍这个游戏特定的规则:
1、单人模式:
连接两个相同的海贼王图案,但此连线是在避开其他的图案后,呈现的路径以不超过二转弯为主,如符合规定则消除此一对图案而得分。
2、提示:
在找不出可以被消除的图片时候,可以点击提示,使用一次提示后,会扣除一定的分数。
3、刷新:
当出现残局时,选择刷新游戏会自动重新洗牌,使游戏能够继续进行下去。
4、定时器:
为比赛倒计时使用,每轮比赛的时间游戏,在达到448秒的时间后为超过规定本场比赛,则为失败。
为了便于游戏者操作,游戏的界面简洁明了,控制区和操作区分别在游戏界面的上部分和下部分,这样游戏者不至于在进行游戏时搞混。
控制区由一排按钮组成,里面包括游戏的模式选择,游戏的开始、暂停,游戏成绩分数点,游戏的帮助主题以及游戏的设置选项。
游戏开始由函数调用来完成游戏图片的加载,随机产生图片排列。
游戏操作区是用手机的上下左右键来控制图片的移动,用中间键作为选中键,当连续选定两个相同图片后,且两者的连线在算法允许消去的范围内,则消去这两个相同的图形。
当游戏者一时找不到可消去的相同的图片时,就可以利用控制区中的提示按钮,则会随机的产生一对可消去的图片。
当游戏中还有图片且不可消去时,则可利用控制区中重新洗牌按钮,则会把存在的图片打乱后重新组合,就可以继续游戏。
图3-2数据流图
图3-3数据流图
4.1.2开发环境需求分析
为了游戏者安装的方便以及游戏的兼容性,考虑到游戏者大多数用的都是Windows操作系统,游戏在Windows操作系统下开发,把游戏的兼容性问题降低到最低限度。
游戏是Eclipse的环境下开发的。
4.1.3用户需求分析
通过对用户的访谈和对Windows环境下的连连看游戏的研究,得到以下几方面的需求。
游戏界面需要在手机屏幕上方显示时间条和具体时间数值,友好而直观的显
示用户剩余时间。
蓝牙竞技时显示对方剩余图案数量,增加竞争气氛。
-9-
初始界面需要中文菜单操作,有背景图片,不用很复杂;游戏界面前景的图
案(或叫图像块)使用一些卡通表情来表示,背景使用桌面效果图片,增加真实感。
在找不到可以连通的相同图案时,用户可以选择提示显示符合规则可以连通
的相同图像块。
在图像块没有消完,但是没有符合规则可以连通的图像块时,用户可以选择在现有图像块基础上进行重新布局。
可以选择提示,炸弹,刷新等工具,都会扣除一定的分数。
有简单的获胜祝贺和失败提示界面。
有简单的声音,并可以设置是否播放声
音。
记录用户各种难度等级时的最好成绩,手机关机后不丢失。
根据连连看游戏的特点和对用户需求的分析,界面式样设计为两种,菜单界面和游戏界面,如下图所示。
图4-1连连看游戏的菜单界面和游戏界面
4.2运行环境
(1)设备
微机一台,CPU:
Intel奔腾4以上版本;
内存:
512MB以上;
硬盘:
20G;
(2)支持软件
适用操作系统:
WindowsXP以上Windows操作系统。
运行软件:
jdk1.60+Eclipse7.0+wireless2.5.2。
第五章详细设计
5.1界面详细设计
游戏的界面分为控制区和操作区,控制区是整个游戏的控制按钮的集中区域,操作区是游戏者进行游戏的场所。
控制区
控制区中有以下一些按钮:
继续游戏按钮:
进入上次退出之前所保存的游戏界面,继续游戏。
单人游戏按钮:
进入游戏开始界面,玩游戏显示分数点数与所用时间。
系统设置按钮:
设置音乐的开关。
蓝牙对战按钮:
利用蓝牙和其他玩家进行蓝牙连接,同时进行游戏。
退出游戏按钮:
退出游戏程序。
重新洗牌按钮:
把游戏中的图片重新排列。
暂停游戏按钮:
暂停游戏。
游戏帮助按钮:
游戏规则的说明以及每个按键的功能。
操作区
操作区是游戏者进行游戏的场所,游戏的规则很简单,就是用不超过两次转折的连线把两个相同的图片连起来,直到把游戏画面中的图片消完为止。
游戏采用GameMap类,用来加载图片和连连看的核心算法来选择图片选中以及消除图片的算法,用GameCanvas来接收手机键盘消息来消除图片和重画地图,用UITimer与GameCanvas来控制时间来计算游戏时间与判断是否能成功完成游戏通关。
图5-1游戏中的画面
图5-2过关画面
-13-
5.2功能详细设计
功能的详细设计主要采用程序流程图作为工具来阐述。
图5-3流程图
(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)核心算法—判断图片是否可擦除
两点连接原理
(0,0)9
原理坐标
选中两点,坐标分别为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
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 j2me 连连 手机 游戏 开发