J2ME手机连连看游戏开发Word文件下载.docx
- 文档编号:8389608
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:13
- 大小:222.40KB
J2ME手机连连看游戏开发Word文件下载.docx
《J2ME手机连连看游戏开发Word文件下载.docx》由会员分享,可在线阅读,更多相关《J2ME手机连连看游戏开发Word文件下载.docx(13页珍藏版)》请在冰点文库上搜索。
2.2运行环境3
3开发平台及开发技术4
3.1J2ME基础知识4
3.2开发工具和环境搭配4
3.2.1开发工具4
3.2.2环境搭配5
4详细设计5
4.1界面详细设计5
4.2功能详细设计8
4.3打包测试14
5结论14
1引言
1.1编写目的
本报告是对连连看游戏进行详细设计,是系统实现的出发点,是后续开发步骤及软件维护工作的基础,报告用于沟通用户,加深开发人员对系统的理解,使得程序员能够根据本报告实现系统,本报告将成为以下各开发阶段的参考和约束文档。
1.2开发背景
随着技术对游戏经验的促进,游戏市场持续增长。
越来越多的人开始认为,经过了许多人共用一台计算机的大型主机时代,一人一台计算机的个人PC时代之后,下一个时代就是一人多台计算设备的普及计算时代(UbiquitousComputing,IBM称之PervasiveComputing)。
计算设备将从单一的PC扩展到各种各样的大小和功能,从家庭消费电子产品,到个人随身携带,穿着,车载的各种移动信息处理设备,多样化是这个领域的最大特点。
"
一次编写,到处运行"
的平台无关性,对网络,多重设备间联网的机制(JINI)显然对这个领域是至关重要的软件条件。
这个领域内的Java标准就是J2ME。
1.3项目开发目的
本设计开发一个基于J2ME的手机连连看游戏。
主要包括以下模块:
游戏引擎模块、游戏界面模块。
要求学生按照软件工程的方法,从需求分析入手,到概要设计、详细设计,然后编码、测试,最终完成。
能够培养学生理解并掌握软件开发基本流程和方法,掌握基于J2ME的基本开发技术、游戏开发技术。
1.4项目提出意义
1.5参考文献
[1]詹建飞.J2ME开发精解.北京.电子工业出版社.2006.1
[2]张小玮.J2ME无线平台应用开发.北京:
.清华大学出版社.2004
[3]张小玮著.J2ME无线平台应用开发.清华大学出版社.2003年11月
2总体设计
2.1需求分析
2.1.1功能需求
为了便于游戏者操作,游戏的界面简洁明了,控制区和操作区分别在游戏界面的上部分和下部分,这样游戏者不至于在进行游戏时搞混。
控制区由一排按钮组成,里面包括游戏的模式选择,游戏的开始、暂停,游戏成绩分数点,游戏的帮助主题以及游戏的设置选项。
游戏开始由函数调用来完成游戏图片的加载,随机产生图片排列。
游戏操作区是用手机的上下左右键来控制图片的移动,用中间键作为选中键,当连续选定两个相同图片后,且两者的连线在算法允许消去的范围内,则消去这两个相同的图形。
当游戏者一时找不到可消去的相同的图片时,就可以利用控制区中的提示按钮,则会随机的产生一对可消去的图片。
当游戏中还有图片且不可消去时,则可利用控制区中重新洗牌按钮,则会把存在的图片打乱后重新组合,就可以继续游戏。
图3-2数据流图
图3-3数据流图
2.1.2开发环境需求
为了游戏者安装的方便以及游戏的兼容性,考虑到游戏者大多数用的都是Windows操作系统,游戏在Windows操作系统下开发,把游戏的兼容性问题降低到最低限度。
游戏是Eclipse的环境下开发的。
2.2运行环境
(1)设备
微机一台,CPU:
Intel奔腾4以上版本;
内存:
512MB以上;
硬盘:
20G;
打印机:
1台。
(2)支持软件
适用操作系统:
WindowsXP以上Windows操作系统。
运行软件:
jdk1.60+Eclipse7.0+wireless2.5.2。
3开发平台及开发技术
3.1J2ME基础知识
J2ME,即Java2MicroEdition,是SUN公司推出的在移动设备上运行的微型版Java平台,常见的移动设备有手机,PDA,电子词典,以及各式各样的信息终端如机顶盒等等。
最重要的移动终端当然是手机了,因此,我们主要讨论手机相关的J2ME规范。
J2ME是Sun公司为嵌入式开发所定义的一个框架,一系列标准的规范所组成。
所以J2ME是一个协议簇,而不是单一的规范。
3.2开发工具和环境搭配
3.2.1开发工具
高级的MIDP应用程序开发工具能够帮助开发人员简化J2ME开发过程,包括Sun提供的官方开发工具WTK和手机厂商提供的专属SDK。
(1)J2MEWirelessToolkit:
WTK的全称是SunJ2MEWirelessToolkit——Sun的无线开发工具包。
这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。
该工具箱包含了完整的生成工具、实用程序以及设备仿真器。
(2)J2ME集成开发工具Eclipse
Eclipse是一个开发源代码的、基于java的可扩展开发平台。
Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。
在Eclipse中几乎每样东西都是插件,实际上正是运行在Eclipse平台上的种种插件提供我们开发程序的各种功能。
同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。
EclipseME作为Eclipse一个插件,致力于帮助开发者开发J2ME应用程序。
EclipseME并不为开发者提供无线设备模拟器,而将各手机厂商的实用模拟器紧密连接到Eclipse开发环境中,为开发者提供一种无缝统一的集成开发环境。
3.2.2环境搭配
(1)WTK:
由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的JDK
安装JDK1.6.0
安装J2MEWirelessToolkit(J2MEWTK)2.5.2
参考文章:
《搭建开发平台WTK》
(2)Eclipse:
除了Eclipse与EclipseME之外,你还需要java运行环境和一些手机模拟器来完成整个搭建工作安装JDK1.6.0
安装EclipseSDK3.1
安装EclipseME1.0
《搭建开发平台Eclipse》
4详细设计
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<
sx,将sx-1赋给x2,判断(x2,y1)是否有图片,如果没有图片,则标记它为可连接点,并循环判断到x2=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按纽,进入游戏界面,即可以进行游戏测试了。
5结论
这次的开发实习是对我考验较大的一次,我只能用几天的时间学习J2ME,然后完成这个游戏开发。
虽然难度很大,完成的也不是很好,但是我都全力以赴,希望能尽最大的努力,完成得更好。
最终,我学到一些新的知识,至少我们对J2ME不再那么陌生,我的编码能力和编码技巧也得到了提高。
接下来,我将会更多地去学习相应知识,希望以后能让我的这个游戏更加完善。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2ME 手机 连连 游戏 开发