ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:359.14KB ,
资源ID:5102150      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-5102150.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx)为本站会员(b****2)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx

1、在以前我们的游戏机,电脑,手机上都有这个小游戏,但是他们都是基于固定设备的,就像以前的手机上也有俄罗斯方块游戏,但是那是针对特殊的手机开发上去,并固化在手机里面的。我做的这个,它可以在支持java的手机上运行,可以上传到手机,也可以从手机里删除。这使得本游戏能广泛的移植性,使用户有了更方便的选择。2可行性分析2.1 技术可行性分析本游戏是基于j2ME的,我们知道,现在J2ME手机游戏开发蓬勃发展,尤其是近几年来,各种手机厂商都开始支持它,相应的提供了很丰富的开发包,共游戏开发使用,简化了我们的开发工作。特别是MIDP2.0中针对游戏而提供的游戏开发包,给我们带来了很大的方便,本游戏就是针对这个

2、游戏包开发的。2.2 操作可行性分析 本游戏操作简单,界面友好,使人不知不觉得进入游戏中。3需求分析俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简单但却变化无穷,令人上瘾。究其历史,俄罗斯方块最早还是出现在 PC 机上,而我国的用户都是通过红白机了解、喜欢上它的。而发展到现在,远航游戏中心又将重新掀起这股让人沉迷的俄罗斯方块风潮,有单机作战与两人在线对战两种模式。做为本游戏,由于是第一次做手机游戏,没有完成复杂的网络在线对战模式,仅仅完成了最基本的单

3、机模式。与我们常玩的俄罗斯方块游戏一样,首先,选择开始,有下坠物开始下落,同是在傍边显示出下一个下坠物,可以用游戏键控制下坠物的左右移动、翻转。当一行堆满时就消去,并给出玩家相应的得分并显示。根据这个分析,知道要完成这个游戏,必须有下坠物对象,那样才能进行游戏;同时,就必须要有一个游戏地图,让下坠物对象显示在地图上;这样一来,不管是地图,还是下坠物都要在屏幕上显示,就需要一个画布,用来显示。根据上面的一系列分析知道,要完成本游戏就必须有三个类,画布类,地图类和下坠物类。必须在这三个类中完成以上的功能才能完成。4 开发技术4.1 java语言的特点本游戏应用java语言完成的,java语言的特点

4、如下:1. 平台无关性Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。Java的数据类型与机器无关。2. 安全性Java的编程类似C+,但舍弃了C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3. 面向对象 Java吸收了C+面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4. 分布式Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5

5、. 健壮性Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间4.2 Eclipse与J2ME Wireless Tool Kit完成本游戏应用的是eclipse与J2ME Wireless Tool Kit工具的组合。1Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Ja

6、va 开发工具(Java Development Tools,JDT)。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Ja

7、va 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。2WTK(Wireless Tool Kit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一

8、定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素。4.3开发工具操作系统:Microsoft Windows XP开 发 包:Java(TM) 2 Standard Edition (5.0) + Sun Micro. J2ME Wireless Tool Kit 2.2 + Eclipse 3. 14.4 Java Application Manager(JAM)手机中负责调配程序运行资源的管理后台是Java Application Manager(JAM)。它所使用的传输媒体可以是红外线、网络、以及其他可用来传输的媒体。J

9、ava Application Manager(JAM) 会从网络上下载代表该Application Suite 的JAR 档,接着在手机上安裝此MIDlet Suite,然后在手机开始执行该应用程序。4.5 J2ME体系结构J2ME用于为信息家电市场提供应用服务,这些信息家电包括呼叫器、移动电话、像Palm这样的个人数字助手(PDA)、电视机顶盒、POS终端以及其他的消费电子设备、而且每一种加点设备又有不同的特性和界面。为了满足消费者和嵌入式市场不断发展和多样化的需求,J2ME体系结构采用摸快化、可扩展的设计,这种设计是通过一个3层软件模型来实现的,该模型构建于本地操作系统之上。J2ME的3

10、层体系结构依照各种设备的资源特性,将J2ME技术架构分为简表(Profiles)、配置(Configuration)和Java Virtual Machine(JVM)3层,然后在进一步细分,这使J2ME能够在每一类设备的限制下工作,而同时提供最低限度的java语言功能性,如图:图4.5-1 J2ME的体系结构1Java虚拟机(JVM)层:这一层四针对设备本地操作系统定制的java虚拟机的实现,支持特定的J2ME配置,就像使用所有java技术一样,J2ME的核心也在一种虚拟机中。2配置(Configuration)层:面对的是大量各种不同的小型嵌入式设备,它们在外观和功能上均各不相同。J2ME

11、将这些设备进行分类,将一些共同性提取出来形成适合于某个范围中设备可用的规范,称为“配置”。3简表(Profiles)层:简表层定义了特定系列设备上可用的应用程序编程接口(API)的最小集。简表在一个特定的配置上面实现。应用程序是针对特定的简表编写的,因此可以移植到支持该简表的任何设备上。另外,一个设备可以同时支持多个简表。而我们看到最多的就是这一层。4.6 MIDlet开发流程 编写MIDlet程序到能够在物理机器上或是仿真器上运行需要七个步骤:具体如下:1 编写程序原代码2 编译3 预先审核(Preverify)4 编写描述文件5 合成jar文件6 测试与调试7 将程序下载到物理 机器上运行

12、,或使用仿真器来运行具体的开发流程图如下:图4.6-1 MIDlet开发流程4.7 本游戏涉及的数据结构游戏区域 游戏区域为手机或者PDA屏幕的一部分,该区域为正方形,边长一定能被16整除(因为俄罗斯游戏区域刚好为16个小砖块长,16个小砖块宽的方形)。无论在水平方向还是垂直方向,该区域都要处于屏幕的居中位置。游戏区域在水平方向上分为2部分,一部分为12个小砖块宽,用来显示游戏容器,另一部分为4个小砖块宽,用来显示下一个下坠物和分数。小砖块 小砖块是下坠物和游戏容器的组成部分。表现为一个正方形,边长为游戏区域边长的1/16。每个小砖块在绘制的时候,4边会留出1个象素宽,绘制成白色或者灰色,这样

13、砖块之间才有间隙。每种小砖块也有id,分别为1到8。我们可以用一个颜色数组(程序里叫BRICK_COLORS)存储这8种颜色。若某种小砖块的id为3,那么该小砖的颜色为BRICK_COLORS3-1.下坠物 下坠物本质上为16个小砖块组成的正方形。下坠物一共有7种,比如有田字形的,L字形的等等。每种下坠物一共有4种旋转变化。 每种下坠物都有一个id,分别为1到7。因为对于一种下坠物来说,其颜色是固定的。我们同样可以用该种颜色在BRICK_COLORS数组中的下标值加上1,作为下坠物的id.游戏地图 游戏地图是用来存储游戏容器上的固定砖块的。游戏容器为一个宽为12个小砖块单位,高为16个小砖块单

14、位,包括左右2堵墙和下边的容器底在内。所以用一个16X12的二维数组(程序里叫mapdata)来存储固定砖块。如果mapdataj=k(k!=0).那么就表示游戏容器的i行j列上有个固定的小砖块,小砖块的颜色值为BRICK_COLORSk-1.如果k=0则表示i行j列无砖块5概要设计5.1 本程序需要解决的主要技术问题根据分析知道,要成功的完成本游戏就需要完成如下功能,解决如下问题:1. 游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可

15、能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2. 游戏中为了美观,适用性强,避免闪频等有关情况,在游戏中用到了MIDP2.0中Game中的双缓冲技术3. 玩家通过对键盘的控制,来确定下坠物的落点,4.利用消去一行,增加一定的分数作为动力,并随着分数的增加,难度变大,增加游戏的可玩性。5. 下坠物的模式的构建,并通过操作很好的控制它进行翻转,移动,快速下坠等操作。6地图的绘制,能在屏幕的适当位置绘制出地图,画出地图上的墙和地的砖块,并确定最初下坠物的位置与初始模式。7. 由于本游戏是一个单屏幕游戏,游戏的地图通过绘图来解决,这样使程序运

16、行的更快。8. Java是基于虚拟机的半解释型编译系统,其执行效率较C+等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。5.2 本游戏功能模块 根据以上分析及需求得到的功能模块图为:图5.2-1游戏功能模块图6详细设计根据上面的设计我们知道,要成功的完成本有些,就需要成功的实现上面的四个模块也就是实现四个类。分别是GameMIDlet模块,MyGameCanvas模块,GameBlock模块,GameMap模块。6.1 主模块这个模块是游戏的入

17、口模块,也就游戏的执行入口。要成功的实现本模块,就要完成下面的方法:图6.1-1主模块功能图这里面的几个方法除了GameMIDlet()方法外,剩下的几个都是控制程序的生命期的方法,他们的流程关系介绍如下:我们知道,MIDlet suite是MIDP应用程序的最小单位,JAM负责将手机内的MIDlet suite以图形化的方式呈现,让用户能够选取欲执行的MIDlet suite,一旦选取了某个MIDlet suite,操作系统就会激活KVM执行里面的MIDlet。MIDlet及相关的支持类组成了MIDP应用程序的实际内容。而每个MIDlet都必须继承javax.microedition.mid

18、let.MIDlet这个抽象类。在MIDP规范中定义了MIDlet的生命周期,以及可以存在的三种状态,包括Paused、Active以及Destroyed,每一个MIDlet在任何时刻只可能处于其中的一个状态。这三种状态的转换关系如图。6.1-2所示:MIDlet有三个状态,分别是pause、active和destroyed。在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态,也就是所说的运行状态。在active状态调用destroyApp(boolean unconditi

19、onal)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。值得一提的是destroyApp(boolean unconditional)方法,事实上,当destroyApp()方法被调用的时候,AMS通知MIDlet进入destroyed状态。在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。如果unconditional为false的时候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态。本模块的这几个方法就是这

20、样控制本游戏的运行的。只是在startApp()方法中创建了MyGameCanvas对象,并显示出来。6.2 画布模块本模块继承了GameCanvas类,实现了Runnable, CommandListener接口。其实现的主要功能如下图:图6.2-1画布模块功能图在这里首先简单介绍一下以下内容:1MIDP1.0技术下的绘制背景技术,在没有MIDP2.0前,进行游戏绘图一般需要手动编程使用双缓冲。需要在paint()方法内将所想要画的图形画在一张预先准备好的背景上,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。Image类提供了一个建立背景的静态方法createImage(int w

21、idth, int height),再利用getGraphics()方法取得属于这个背景的Graphics对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用drawImage()方法将背景的数据复制到实际显示的屏幕上。这样的技术在绘制动画时特别有用。绘制动画时经常需要不断地更新画面,而更新画面的操作就是先将屏幕以fillRect()的方式清除,再将下一张图片画在屏幕上,然而反复的清除及重绘会造成屏幕的闪烁现象(flicker),因此使用双重缓冲的好处就是在背景进行这个清除及重绘的操作,再将完成的绘图拷贝到屏幕上,由于用户看不到清除的操作,因此就不会出现闪烁的现象了。不过在

22、某些MIDP的实现上已经加上了双重缓冲的支持,因此在处理前应先利用Canvas类的isDoubleBuffer()方法来判断。2MIDP2.0新增的GameCanvas包,J2ME的流行促进几个运营商和制造商开发了一些支持游戏的类,但是,这却造成了游戏缺乏可移植性的问题。在MIDP2.0版本发布后,这些游戏移植性问题初步得到了解决。MIDP2.0新加入了GameCanvas、Sprite、Layer、LayerManager、TiledLayer五个与游戏开发相关的类。其中 Layer类一般不会直接用到。Game类的出现不仅降低了错误出现的几率,也使游戏代码变的更小,因为开发者不需要自己编写象

23、Sprite这种例子。下面将简要介绍Game类。 GameCanvas类继承自Canvas,所以具有Canvas所具有的功能,还额外增加了一些便于游戏设计的功能。比如: GameCanvas类直接提供了getKeyStates(),使程序员可以在同一个线程自己侦测按键的状态。GameCanvas类提供了flushGraphics()的功能,实现了双缓冲技术。 所谓的Sprite,就是画面上独立移动的图形。Sprite类是继承自Layer的用于存储多桢的基本可视元素。不同的frame可交相显示,构成动态的效果。图片可翻转、颠倒、由一个主角图片就可以方便的得到所有方向的显示状态,相比原先只能使用C

24、anvas绘图,需要将所有方向的主角图象都绘制在png图象中简化了许多。Sprite也可以从整合的图象中读图,读图时将把大图分解为若干等宽等高的小图。每个小图按照其排列顺序有相应的序号,在程序中调用其序号,就可以绘制出相应的图片。本程序中的双方飞机、子弹、白云都由Sprite继承得到。LayerManager提供控制整体画面层的控制。它包括了一系列自动获取了代号和位置的层,简化了各层加入游戏画面的过程,提供了自动排序和绘制的能力。LayerManager存储了一个层的列表,新的层可以用函数附加、删除和插入。层的序号相当于坐标的Z轴,0层表示最接近用户视觉,层数越高,离用户越远。层号总是连续的,

25、即使有中间的层被移除,其他层的序号会作相应的调整以保持整体的完整性。LM中的View Window控制着与LM相对坐标的可视区域。改变View Window的位置可以制造出滚动屏幕的效果。TiledLayer是有一组图象格元素组成的整块虚拟图象。该类使不需要高分辨率的图象就能创建大幅图面成为可能。这项技术通常应用在2D游戏平台的滚动背景的绘图。一块整图可被分割成等大小的图象格,每块格有其对应的序号,按照行列递增。多块小格可由大块同时替换组合而模拟动态的背景,这不需要逐块替换所有的静态图象格而显得非常方便。3Canvas类介绍。为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口

26、类,尤其在游戏程序中,几乎完全依赖的就是Canvas抽象类进行绘图。从程序开发的观点看,Canvas类可与高级Screen类交互,程序可在需要时在Canvas中掺入高级类的组件。Canvas提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。4Graphics类介绍。Graphics类提供了简单的2D绘图功能。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在p

27、aint()函数中使用Graphics绘制,GameCanvas可调用getGraphics()函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。其对象会被传给Canvas的paint()函数,以便最终显示。有了上面的知识,来看看本模块的方法。1Init()方法主要完成对游戏画布,转块边长及游戏状态的初始化。其代码如下:public void init() mainWidth = getWidth(); mainHeight = getHeight(); int min = (mainWidth = 0; min-) if(min % 16 = 0) break; BRICK_WIDTH

28、= min / 16; GAMEAREA_X = (mainWidth - min) / 2; GAMEAREA_Y = (mainHeight - min) / 2; this.startDemoFlag = false; this.gameState = this.GAME_STARTED_DEMO;2Run()方法是这个类的最主要的一个方法,是实现的Runnable接口中的方法,它启动了一个线程,规定50ms重画一次,调用了检查按键状态和重画屏幕的方法。具体实现如下:public void run() while(true) try Thread.sleep(50); catch (InterruptedException e) e.printStackTrace();this.keyPressedState(); this.paintCanvas(this.g

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2