基于j2me的pocketboxing手机格斗游戏毕业论文内容摘要:

机游戏制作在中国的市场以及在中国发展的潜力。 我们要相信在不久的将来,国内手机游戏市场一定回迎来一个春天的。 [8] 9 第 3 章 游戏设计的需求分析 MIDP 中的游戏 API MIDP 是专门为互联受限设备配置设计的,它为移动设备提供 了一套 API 集合, MIDP 包含用户界面类、持久存储功能与网络功能。 早在 版本时,是没有单独的游戏 API 的,在 后增加了一个新的专门的游戏软件包,顾名思义,此包中定义了游戏开发的各种类型。 这个软件包是一个专门为在移动信息设备上开发游戏应用而设计的,所以又叫作游戏 API。 [10]它里面的成员类有以下几个: GameCanvas、 Layer、 LayerManager、Sprite、 TiledLayer。 GameCanvas 是提供基本的 游戏界面; Layer 是一个用来表示游戏中的可视元素的抽象类; LayerManager 管理一系列的 Layer; Sprite 是一个基本的可视元素,它本身包含了许多操作,比如将一个图片切分成若干画面帧( Row Frame) ,再对这些画面帧编排出一个动画序列( Frame Sequence); TiledLayer 是一个可以被许多图片填充的类似于表格的可视元素。 [10]本论文在设计游戏过程中涉及到其中的 GameCanvas 类和 Sprite 类。 [7] 游戏类构成 在游戏中,主要的一些类构成有 Pocket Boxing、 Boxer、 Enemy、 GameCanvas。 其中 Pocket Boxing类继承了 MIDlet 类,用来进行 MIDlet 的 Live Cycle 控制; Boxer存储了玩家的拳击手的信息,进行拳击手的描绘; Enemy 存储电脑控制的拳击手的信息,进行拳击手的描绘,它继承了 Boxer 类; GameCanvas 继承了 Canvas 类,进行画面的描绘与操作。 各类都是用与类名称相同的文件名来存储的。 [3]各类间的关系如图。 10 Boxer 类的实现 Boxer 类是用来存储玩家拳击手状态的信息,再以次为根据进 行描绘。 Boxer类由于与用来表现对手的 Enemy 类大致上是相同的,所以要以继承了 Enemy 类为 DefaultPackage 图 游戏类图 Fig . Game diagram 前提来实现。 在 Boxer 类的 Constructor 当中,会进行拳击手图像的获取。 这里要准备拳击手的身体、上段防御的手腕、下段防御的手腕、上段拳击的手腕、下段拳击的手腕等五种图像。 通过身体图像四种类图像的配合,就可以描绘出生动拳击手动态。 GameCanvas 类的功能及特点 GameCanvas 类是 软件包中的 Cavas 类的一个子类,它可以为游戏提供基本的显示功能; GameCanvas 类是提供了游戏的中心属性,如游戏键当前状态的能力、双缓存绘图等; GameCanvas 类是一个专门的为每一个GameCanvas 实例填充初始化纯白像素的缓存器;通过调用 Graphics 对象可以改变缓存器中的内容。 [4] MIDlet Canvas 《 Interface》 Runnable 《 Interface》 CommandListener PocketBoxing GameCanvas Boxer Enemy 11 Sprite 类的功能及特点 Sprite 类是一个能显示几个绘图帧( frame)中的其中一帧的基本动态层;这些帧大小相同并且由一个单独 的图片( image)对象提供; Sprite 类可以使许多帧连续的运动,可以使一个定制的序列以任何方式被放置;另外还可以提供转化于检测方法。 下面是 Sprite 代码样例 : [1] import .*。 import .*。 public class Text Layer extends Sprite { Image _image。 String _string。 TextLayer (Image i) { super( i )。 } public void draw(Graphics g ) throws NullPointerException { )。 } 游戏角色的处理 这里的游戏角色 —— 拳击手的初始化是以将拳击手设为后退,并将生命值设为默认值为主要目的。 拳击手在挥出拳之后,将会在等待一段时间后恢复原本的防御状态。 为了要进行这个等待处理,使用到了 Tick 计数。 当现在的状态为上下拳击时,就会开始Tick 计数,当数到 4 以上的状态时就会回到原来的防御位置。 这样一来 就可以表现出拳击手出拳头后再回到原来防御状态的样子。 12 不过,在后退时挥出拳击的情况中,这里不能马上回到后退状态。 要在挥出拳击后回到后退状态时,就得通过玩家自己的操作来进行了。 游戏中的事件处理 事件可以分为:低层事件( lowlevel event )与高层事件( highlevel event )。 低层事件一般用来处理设备事件,如:按键事件、探针事件。 高层事件用来处理应用中的相关事件,如:命令事件、组件状态变化事件。 由于开发手机游戏时我们主要用到的是 Key 事件的处理方法,因为移动设备的键盘是传 递用户意图的最主要的输入设备, Key 事件属于低层事件。 那么低层事件中用下面的两种方法来处理应用的 Key 事件。 [2] key Pressed方法 方法 key Pressed 是用来处理键被按下的事件,这个方法没有与其对应的显示的听众对象( Listener ),这些听众对象有系统根据实际对象缺省提供,例如后面提到的 Canvas 对象就是默认的 key 事件听众对象,它缺省地实现了 Key Listener接口。 简单的一个样例代码: … … . public void keyPressed (int keyCode) { if (keyCode 0) { //输出当前被按下键的键码 System. (“keyPressed ” +( (char) keyCode ) )。 } else { … } 13 } 当按下手机的操作键盘上的按键时,就会触发这 key 事件,系统并会自动调用 keyPressed()方法,并且系统将捕获到的键码传递给该方法,在上面的那段代码中方法判断了所按的按键值是否大于 0,如果大于 0 输出所按的手机键盘上的实际值,否则执行其他的操作任务。 [4] key Released方法 可以说方法 key Released()与上面提到的 keyPressed()方法是对应的。 它是用来处理手机操作键盘上的按键被释放的事件,这个方法也同样没有与之对应的显示的听众,这些听众也是由系统根据实际对象提供的。 下面是一个样例代码: … … public void keyReleased(int keyCode) { if (keyCode 0 ) { / /输出当前被释放键的键码 (“keyReleased ” +( (char) keyCode) )。 } else { … } } … … 当释放手机操作键盘上被按下的按键时,则会触发这个 key 事件,系统并会自动交由 keyReleased() 方法来处理该事件,同样的上面的这段代码中,该方法判断了所按的按键值是否大于 0,如果大于 0 则输出所释放的手机键盘上的被按下的按键的实际键值,否则执行其他的操作任务。 [4] 上面说的是在开发手机游戏过程中遇到的两种低层事件的方法 keyPressed 方法和 keyReleased 方法,下面就具体介绍“ Pocket Boxing”手机游戏的开发过程。 14 第 4 章 “Pocket Boxing”手机游戏开发制作 游戏编程 众所周知, J2ME 现在最流行的就是制作手机游戏,况且现在无线游戏编程现在又是一个很热门的话题,不但因为它具有极强的趣味性,更重要的是它给我们带来了无限的商机。 随着 JAVA 手机的诞生,手机游戏编程的灵活性与轻便性使得JAVA 手机游戏成为游戏市场的又一亮点。 格斗类手机游戏实例 手机游戏有很多种类,其中格斗类游戏凭借着它的趣味性和娱乐性深 受人们的青睐。 如何制作一款优秀的格斗类游戏,就成为手机游戏开发人员一个最关键的问题了。 “ Pocket Boxing”游戏背景介绍及开发环境 这里将通过一款拳击游戏来介绍格斗类手机游戏中的攻击与防御等重要因素、以及如何控制对手角色。 这款游戏名字叫“ Pocket Boxing”。 在这款游戏中,玩家所控制的拳击手将出现在屏幕的左侧,电脑所控制的拳击手则出现在屏幕的右侧。 拳击手可以进行上下两种的攻击方式,以及上下阻挡防守与后退防守的防卫。 当攻击命中对手时,就可以是对手角色的生命点数减少,不过不是任 何的攻击方法都可以使对手的生命点数减少的。 当玩家在进行上方和下方的攻击的时候,对手进行相对应防卫的时候,在对手防守状态中是不能使对手的生命点数减少的,还有一种情况就是在对手后退一步避开你的攻击的时候也同样不会减少生命点数的。 当对手的生命点数用尽的时候,玩家就获得了这一局比赛的胜利,就可以进 15 入下一个回合。 在进入下一个回合后,电脑控制的对手的生命值会恢复,同时拳击手的攻击力会加强,也就是难度会加大。 相对的玩家控制的拳击手在前一回合所剩下的生命点数,也可以附加到下一回合的生命点数上去。 游戏中一共有五个回合,在 全部的回合中取得胜利的话就是冠军了。 在中途如果被打败,就算是游戏结束了。 游戏流程如图 : 这款手机游戏是一个简单的 MIDP 应用程序,在这里进行开发有它需要的开发环境。 MIDPlet 的开发环境需要有 java2 版以上(这里使用的是 版)与 MIDP 的类库、以及后述的运行前验证工具三种。 在 J2MEWTK 中除了包括 MIDP 的类库、运行前验证工具之外,还会把编译与包装( JAR 文件化)、 JAD文件的创建、模拟器的启动等在开发 MIDP 需要用到的操作加以集成。 当完成了 以及 J2MEWTK 的安装以后,就可以开始对游戏项目进行创建了。 MIDlet 的构成 开发环境准备好了之后,就应该进行 MIDlet 的开发了。 遵循 MIDP 规范的基本 MIDPlet 是组合了 JAR 文件与 JAD 文件来运行的。 JAR文件是将 Class 文件或者是图像等集成在一起的文件,而 JAD 文件则用来指定 JAR文件内启动 MIDlet 类名称或 JAR 文件的大小、版本等属性。 移动电话的 JAM( Java Application Manager)一开始就是将这个文件读进来后才启动 MIDlet 的。 JAR 文件虽然基本上与 J2SE 是相同 的,不过其中所放置的列表文件内容是不一样的。 列表文件中编写了许多的文件打包信息。 一般来说可以在 JAR 文件内放置多个 MIDlet,通过在 JAD 文件中编写 MIDlet 个数相等的内容, JAM 就能依次判断 MIDlet 的数目。 MIDlet 文件的构成: ( 1) JAR( Java ARchive)文件:集成了 Class File 与图像、声音等内容的数据文件,虽然与 J2SE 的文件相同,但是列表的文件内容不同。 ( 2) JAD( Java Application Descriptor)文件:指定启动的 MIDlet 类名称或是数 16 据文 件大小、版本等信息。 ( 3) KDDI 的地方,使用组合了 JAR 文件与 JAD 文件的 KDDI 专用的 KJK( KDDIJavaeXtension)。 MIDlet 的生命周期 MIDlet 的生命周期 ,与 Applet 或 DoJa 是不一样的东西 .若想要在 Applet与 DoJa之间作相互的移植时,对这个生命周期的流程有越深入地了解,在进行移植的时候就会越轻松。 MIDlet 是以下列的生命周期来运行的: ( 1)当终端发出了 MIDlet 的运行命令时,若编写于 JAD 文件 MIDlet 有多个的时候,就让其进行选择后启动 MIDlet。 ( 2) MIDlet 的 Constructor 被调用。 ( 3) MIDletstartAPP()方法被调用,启动 MIDlet。 ( 4)在终端有来电的时候 MIDletstartAPP()方法就会被调用,并让 MIDlet暂停。 ( 5)当通话结束等的时候,就再次调用 MIDletstarAPP()方法, MIDlet 就会再次启动。 ( 6)调用 MIDletdestoryAPP(boolean)方法,以将 MIDlet 结束。 如图 : MIDlet 的画面显示基础 MIDlet 类本身由于并没 有提供直接操作画面显示的功能,因此在 MIDlet 类的子类也没有直接操作画面显示的功能。 因此 ,要使用管理画面显示功能的 Display类。 这个 Display 类可以让 类的子类显示在画面 上。 17。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。