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

上传人:b****2 文档编号:5102150 上传时间:2023-05-04 格式:DOCX 页数:23 大小:359.14KB
下载 相关 举报
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第1页
第1页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第2页
第2页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第3页
第3页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第4页
第4页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第5页
第5页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第6页
第6页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第7页
第7页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第8页
第8页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第9页
第9页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第10页
第10页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第11页
第11页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第12页
第12页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第13页
第13页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第14页
第14页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第15页
第15页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第16页
第16页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第17页
第17页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第18页
第18页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第19页
第19页 / 共23页
俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块手机游戏的设计与实现Word文档下载推荐.docx(23页珍藏版)》请在冰点文库上搜索。

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

在以前我们的游戏机,电脑,手机上都有这个小游戏,但是他们都是基于固定设备的,就像以前的手机上也有俄罗斯方块游戏,但是那是针对特殊的手机开发上去,并固化在手机里面的。

我做的这个,它可以在支持java的手机上运行,可以上传到手机,也可以从手机里删除。

这使得本游戏能广泛的移植性,使用户有了更方便的选择。

2.可行性分析

2.1技术可行性分析

本游戏是基于j2ME的,我们知道,现在J2ME手机游戏开发蓬勃发展,尤其是近几年来,各种手机厂商都开始支持它,相应的提供了很丰富的开发包,共游戏开发使用,简化了我们的开发工作。

特别是MIDP2.0中针对游戏而提供的游戏开发包,给我们带来了很大的方便,本游戏就是针对这个游戏包开发的。

2.2操作可行性分析

本游戏操作简单,界面友好,使人不知不觉得进入游戏中。

3.需求分析

俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。

这款游戏最初是由苏联的游戏制作人AlexPajitnov制作的,它看似简单但却变化无穷,令人上瘾。

究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。

而发展到现在,远航游戏中心又将重新掀起这股让人沉迷的俄罗斯方块风潮,有单机作战与两人在线对战两种模式。

做为本游戏,由于是第一次做手机游戏,没有完成复杂的网络在线对战模式,仅仅完成了最基本的单机模式。

与我们常玩的俄罗斯方块游戏一样,首先,选择开始,有下坠物开始下落,同是在傍边显示出下一个下坠物,可以用游戏键控制下坠物的左右移动、翻转。

当一行堆满时就消去,并给出玩家相应的得分并显示。

根据这个分析,知道要完成这个游戏,必须有下坠物对象,那样才能进行游戏;

同时,就必须要有一个游戏地图,让下坠物对象显示在地图上;

这样一来,不管是地图,还是下坠物都要在屏幕上显示,就需要一个画布,用来显示。

根据上面的一系列分析知道,要完成本游戏就必须有三个类,画布类,地图类和下坠物类。

必须在这三个类中完成以上的功能才能完成。

4.开发技术

4.1java语言的特点

本游戏应用java语言完成的,java语言的特点如下:

1.平台无关性

Java引进虚拟机原理,并运行于虚拟机,实现不同平台之间的Java接口。

Java的数据类型与机器无关。

2.安全性

Java的编程类似C++,但舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。

它提供了安全管理器,防止程序的非法访问。

3.面向对象

Java吸收了C++面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。

4.分布式

Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。

5.健壮性

Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。

Java取消了C语言的结构、指针、#define语句、多重继承、goto语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间

4.2Eclipse与J2MEWirelessToolKit

完成本游戏应用的是eclipse与J2MEWirelessToolKit工具的组合。

1.Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。

幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(JavaDevelopmentTools,JDT)。

虽然大多数用户很乐于将Eclipse当作JavaIDE来使用,但Eclipse的目标不仅限于此。

Eclipse还包括插件开发环境(Plug-inDevelopmentEnvironment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。

由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。

这种平等和一致性并不仅限于Java开发工具。

尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言;

例如,支持诸如C/C++、COBOL和Eiffel等编程语言的插件已经可用,或预计会推出。

Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。

2.WTK(WirelessToolKit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。

它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。

虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素。

4.3开发工具

操作系统:

MicrosoftWindowsXP

开发包:

Java(TM)2StandardEdition(5.0)+SunMicro.J2MEWirelessToolKit2.2+Eclipse3.1

4.4JavaApplicationManager(JAM)

手机中负责调配程序运行资源的管理后台是JavaApplicationManager(JAM)。

它所使用的传输媒体可以是红外线、网络、以及其他可用来传输的媒体。

JavaApplicationManager(JAM)会从网络上下载代表该ApplicationSuite的JAR档,接着在手机上安裝此MIDletSuite,然后在手机开始执行该应用程序。

4.5J2ME体系结构

J2ME用于为信息家电市场提供应用服务,这些信息家电包括呼叫器、移动电话、像Palm这样的个人数字助手(PDA)、电视机顶盒、POS终端以及其他的消费电子设备、而且每一种加点设备又有不同的特性和界面。

为了满足消费者和嵌入式市场不断发展和多样化的需求,J2ME体系结构采用摸快化、可扩展的设计,这种设计是通过一个3层软件模型来实现的,该模型构建于本地操作系统之上。

J2ME的3层体系结构依照各种设备的资源特性,将J2ME技术架构分为简表(Profiles)、配置(Configuration)和JavaVirtualMachine(JVM)3层,然后在进一步细分,这使J2ME能够在每一类设备的限制下工作,而同时提供最低限度的java语言功能性,如图:

图4.5-1J2ME的体系结构

1.Java虚拟机(JVM)层:

这一层四针对设备本地操作系统定制的java虚拟机的实现,支持特定的J2ME配置,就像使用所有java技术一样,J2ME的核心也在一种虚拟机中。

2.配置(Configuration)层:

面对的是大量各种不同的小型嵌入式设备,它们在外观和功能上均各不相同。

J2ME将这些设备进行分类,将一些共同性提取出来形成适合于某个范围中设备可用的规范,称为“配置”。

3.简表(Profiles)层:

简表层定义了特定系列设备上可用的应用程序编程接口(API)的最小集。

简表在一个特定的配置上面实现。

应用程序是针对特定的简表编写的,因此可以移植到支持该简表的任何设备上。

另外,一个设备可以同时支持多个简表。

而我们看到最多的就是这一层。

4.6MIDlet开发流程

编写MIDlet程序到能够在物理机器上或是仿真器上运行需要七个步骤:

具体如下:

1.编写程序原代码

2.编译

3.预先审核(Preverify)

4.编写描述文件

5.合成jar文件

6.测试与调试

7.将程序下载到物理机器上运行,或使用仿真器来运行

具体的开发流程图如下:

图4.6-1MIDlet开发流程

4.7本游戏涉及的数据结构

游戏区域游戏区域为手机或者PDA屏幕的一部分,该区域为正方形,边长一定能被16整除(因为俄罗斯游戏区域刚好为16个小砖块长,16个小砖块宽的方形)。

无论在水平方向还是垂直方向,该区域都要处于屏幕的居中位置。

游戏区域在水平方向上分为2部分,一部分为12个小砖块宽,用来显示游戏容器,另一部分为4个小砖块宽,用来显示下一个下坠物和分数。

小砖块小砖块是下坠物和游戏容器的组成部分。

表现为一个正方形,边长为游戏区域边长的1/16。

每个小砖块在绘制的时候,4边会留出1个象素宽,绘制成白色或者灰色,这样砖块之间才有间隙。

每种小砖块也有id,分别为1到8。

我们可以用一个颜色数组(程序里叫BRICK_COLORS)存储这8种颜色。

若某种小砖块的id为3,那么该小砖的颜色为BRICK_COLORS[3-1].

下坠物下坠物本质上为16个小砖块组成的正方形。

下坠物一共有7种,比如有"

田"

字形的,"

L"

字形的等等。

每种下坠物一共有4种旋转变化。

每种下坠物都有一个id,分别为1到7。

因为对于一种下坠物来说,其颜色是固定的。

我们同样可以用该种颜色在BRICK_COLORS数组中的下标值加上1,作为下坠物的id.

游戏地图游戏地图是用来存储游戏容器上的固定砖块的。

游戏容器为一个宽为12个小砖块单位,高为16个小砖块单位,包括左右2堵墙和下边的容器底在内。

所以用一个16X12的二维数组(程序里叫mapdata)来存储固定砖块。

如果mapdata[j]=k(k!

=0).那么就表示游戏容器的i行j列上有个固定的小砖块,小砖块的颜色值为BRICK_COLORS[k-1].如果k=0则表示i行j列无砖块

5.概要设计

5.1本程序需要解决的主要技术问题

根据分析知道,要成功的完成本游戏就需要完成如下功能,解决如下问题:

1.游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。

一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。

因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。

2.游戏中为了美观,适用性强,避免闪频等有关情况,在游戏中用到了MIDP2.0中Game中的双缓冲技术

3.玩家通过对键盘的控制,来确定下坠物的落点,

4.利用消去一行,增加一定的分数作为动力,并随着分数的增加,难度变大,增加游戏的可玩性。

5.下坠物的模式的构建,并通过操作很好的控制它进行翻转,移动,快速下坠等操作。

6.地图的绘制,能在屏幕的适当位置绘制出地图,画出地图上的墙和地的砖块,并确定最初下坠物的位置与初始模式。

7.由于本游戏是一个单屏幕游戏,游戏的地图通过绘图来解决,这样使程序运行的更快。

8.Java是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。

除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。

5.2本游戏功能模块

根据以上分析及需求得到的功能模块图为:

图5.2-1游戏功能模块图

6.详细设计

根据上面的设计我们知道,要成功的完成本有些,就需要成功的实现上面的四个模块也就是实现四个类。

分别是GameMIDlet模块,MyGameCanvas模块,GameBlock模块,GameMap模块。

6.1主模块

这个模块是游戏的入口模块,也就游戏的执行入口。

要成功的实现本模块,就要完成下面的方法:

图6.1-1主模块功能图

这里面的几个方法除了GameMIDlet()方法外,剩下的几个都是控制程序的生命期的方法,他们的流程关系介绍如下:

我们知道,MIDletsuite是MIDP应用程序的最小单位,JAM负责将手机内的MIDletsuite以图形化的方式呈现,让用户能够选取欲执行的MIDletsuite,一旦选取了某个MIDletsuite,操作系统就会激活KVM执行里面的MIDlet。

MIDlet及相关的支持类组成了MIDP应用程序的实际内容。

每个MIDlet都必须继承javax.microedition.midlet.MIDlet这个抽象类。

在MIDP规范中定义了MIDlet的生命周期,以及可以存在的三种状态,包括Paused、Active以及Destroyed,每一个MIDlet在任何时刻只可能处于其中的一个状态。

这三种状态的转换关系如图。

6.1-2所示:

MIDlet有三个状态,分别是pause、active和destroyed。

在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态,也就是所说的运行状态。

在active状态调用destroyApp(booleanunconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。

值得一提的是destroyApp(booleanunconditional)方法,事实上,当destroyApp()方法被调用的时候,AMS通知MIDlet进入destroyed状态。

在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。

如果unconditional为false的时候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态。

本模块的这几个方法就是这样控制本游戏的运行的。

只是在startApp()方法中创建了MyGameCanvas对象,并显示出来。

6.2画布模块

本模块继承了GameCanvas类,实现了Runnable,CommandListener接口。

其实现的主要功能如下图:

图6.2-1画布模块功能图

在这里首先简单介绍一下以下内容:

1.MIDP1.0技术下的绘制背景技术,在没有MIDP2.0前,进行游戏绘图一般需要手动编程使用双缓冲。

需要在paint()方法内将所想要画的图形画在一张预先准备好的背景上,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。

Image类提供了一个建立背景的静态方法createImage(intwidth,intheight),再利用getGraphics()方法取得属于这个背景的Graphics对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用drawImage()方法将背景的数据复制到实际显示的屏幕上。

这样的技术在绘制动画时特别有用。

绘制动画时经常需要不断地更新画面,而更新画面的操作就是先将屏幕以fillRect()的方式清除,再将下一张图片画在屏幕上,然而反复的清除及重绘会造成屏幕的闪烁现象(flicker),因此使用双重缓冲的好处就是在背景进行这个清除及重绘的操作,再将完成的绘图拷贝到屏幕上,由于用户看不到清除的操作,因此就不会出现闪烁的现象了。

不过在某些MIDP的实现上已经加上了双重缓冲的支持,因此在处理前应先利用Canvas类的isDoubleBuffer()方法来判断。

2.MIDP2.0新增的GameCanvas包,J2ME的流行促进几个运营商和制造商开发了一些支持游戏的类,但是,这却造成了游戏缺乏可移植性的问题。

在MIDP2.0版本发布后,这些游戏移植性问题初步得到了解决。

MIDP2.0新加入了GameCanvas、Sprite、Layer、LayerManager、TiledLayer五个与游戏开发相关的类。

其中Layer类一般不会直接用到。

Game类的出现不仅降低了错误出现的几率,也使游戏代码变的更小,因为开发者不需要自己编写象Sprite这种例子。

下面将简要介绍Game类。

GameCanvas类继承自Canvas,所以具有Canvas所具有的功能,还额外增加了一些便于游戏设计的功能。

比如:

GameCanvas类直接提供了getKeyStates(),使程序员可以在同一个线程自己侦测按键的状态。

GameCanvas类提供了flushGraphics()的功能,实现了双缓冲技术。

所谓的Sprite,就是画面上独立移动的图形。

Sprite类是继承自Layer的用于存储多桢的基本可视元素。

不同的frame可交相显示,构成动态的效果。

图片可翻转、颠倒、由一个主角图片就可以方便的得到所有方向的显示状态,相比原先只能使用Canvas绘图,需要将所有方向的主角图象都绘制在png图象中简化了许多。

Sprite也可以从整合的图象中读图,读图时将把大图分解为若干等宽等高的小图。

每个小图按照其排列顺序有相应的序号,在程序中调用其序号,就可以绘制出相应的图片。

本程序中的双方飞机、子弹、白云都由Sprite继承得到。

LayerManager提供控制整体画面层的控制。

它包括了一系列自动获取了代号和位置的层,简化了各层加入游戏画面的过程,提供了自动排序和绘制的能力。

LayerManager存储了一个层的列表,新的层可以用函数附加、删除和插入。

层的序号相当于坐标的Z轴,0层表示最接近用户视觉,层数越高,离用户越远。

层号总是连续的,即使有中间的层被移除,其他层的序号会作相应的调整以保持整体的完整性。

LM中的ViewWindow控制着与LM相对坐标的可视区域。

改变ViewWindow的位置可以制造出滚动屏幕的效果。

TiledLayer是有一组图象格元素组成的整块虚拟图象。

该类使不需要高分辨率的图象就能创建大幅图面成为可能。

这项技术通常应用在2D游戏平台的滚动背景的绘图。

一块整图可被分割成等大小的图象格,每块格有其对应的序号,按照行列递增。

多块小格可由大块同时替换组合而模拟动态的背景,这不需要逐块替换所有的静态图象格而显得非常方便。

3.Canvas类介绍。

为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是Canvas抽象类进行绘图。

从程序开发的观点看,Canvas类可与高级Screen类交互,程序可在需要时在Canvas中掺入高级类的组件。

Canvas提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。

键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。

应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。

4.Graphics类介绍。

Graphics类提供了简单的2D绘图功能。

它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。

程序只能在paint()函数中使用Graphics绘制,GameCanvas可调用getGraphics()函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。

其对象会被传给Canvas的paint()函数,以便最终显示。

有了上面的知识,来看看本模块的方法。

1.Init()方法主要完成对游戏画布,转块边长及游戏状态的初始化。

其代码如下:

publicvoidinit(){

mainWidth=getWidth();

mainHeight=getHeight();

intmin=(mainWidth<

=mainHeight)?

mainWidth:

mainHeight;

for(;

min>

=0;

min--)

{

if(min%16==0){

break;

}

}

BRICK_WIDTH=min/16;

GAMEAREA_X=(mainWidth-min)/2;

GAMEAREA_Y=(mainHeight-min)/2;

this.startDemoFlag=false;

this.gameState=this.GAME_STARTED_DEMO;

}

2.Run()方法是这个类的最主要的一个方法,是实现的Runnable接口中的方法,它启动了一个线程,规定50ms重画一次,调用了检查按键状态和重画屏幕的方法。

具体实现如下:

publicvoidrun(){

while(true){

try{

Thread.sleep(50);

}catch(InterruptedExceptione){

e.printStackTrace();

this.keyPressedState();

this.paintCanvas(this.g

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 入党转正申请

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

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