毕业设计(论文)-基于JAVA手机游戏论文.doc_第1页
毕业设计(论文)-基于JAVA手机游戏论文.doc_第2页
毕业设计(论文)-基于JAVA手机游戏论文.doc_第3页
毕业设计(论文)-基于JAVA手机游戏论文.doc_第4页
毕业设计(论文)-基于JAVA手机游戏论文.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于基于 java 手机游戏论文手机游戏论文 摘 要 java 已经从一种平台无关的编程语言演变成一种与厂商及平台无关的健壮的服务器端技术, 促使 it 业界深入发掘以 web 为核心的应用程序的巨大潜力。j2me 的出现使这一变化达到了一 种新的高度。j2me,简称 java2 平台袖珍版( java 2 platform ,micro edition (j2me) ),是 sun 公司在 j2se 和 j2ee 之后,致力于消费产品和嵌入式设备的最佳解决方案。作为 java 的三个 版本之一,j2me 在无线编程技术中正发挥着它独特的作用。j2me 为在小型电子设备上创建性能 卓越的网络应用提供了一套完整的解决方案。它也使设备制造商、服务提供商及应用开发人员 为他们的用户发布新的软件应用成为可能。 通过对 j2me 的详细介绍我们可以从中了解到其自身的作用,近年来,随着 java 手机的诞 生,其无可替代的灵活性与轻便性致使 java 手机游戏成为游戏市场的又一亮点,它的前景无可 限量,必将在我们以后的生活中发挥着重要的作用。 关键词:游戏编程, 事件, 描绘处理 abstract java is already changed from a platform-independent programming language to a mission-critical technological with manufacture platform independent, and java encourage it circle to deeply tap the huge potential of application with the care of web. the emergences of j2me push it to a new high level. j2me( java 2 platform, micro edition (j2me) ) called “java 2 platform” for short a pocket-edition is a prefect solution plan of consume products and embedded equipment, after j2se import javax.microedition.lcdui.*; public class text layer extends sprite image _image; string _string; textlayer (image i) super( i ); public void draw(graphics g ) throws nullpointerexception graphics.left ) ; 山东凯文科技职业学院 8 2.3 游戏角色的处理 这里的游戏角色拳击手的初始化是以将拳击手设为后退,并将生命值设为默认值为主 要目的。 拳击手在挥出拳之后,将会在等待一段时间后恢复原本的防御状态。为了要进行这个等待 处理,使用到了tick计数。当现在的状态为上下拳击时,就会开始tick计数,当数到4以上的状 态时就会回到原来的防御位置。这样一来就可以表现出拳击手出拳头后再回到原来防御状态的 样子。 不过,在后退时挥出拳击的情况中,这里不能马上回到后退状态。要在挥出拳击后回到后 退状态时,就得通过玩家自己的操作来进行了。 2.4 游戏中的事件处理 事件可以分为:低层事件( low-level event )与高层事件( high-level event ) 。低层事件 一般用来处理设备事件,如:按键事件、探针事件。高层事件用来处理应用中的相关事件,如: 命令事件、组件状态变化事件。由于开发手机游戏时我们主要用到的是key事件的处理方法,因 为移动设备的键盘是传递用户意图的最主要的输入设备,key事件属于低层事件。那么低层事件 中用下面的两种方法来处理应用的key事件。2 2.4.1 key pressed 方法 方法 key pressed 是用来处理键被按下的事件,这个方法没有与其对应的显示的听众对象( listener ) ,这些听众对象有系统根据实际对象缺省提供,例如后面提到的 canvas 对象就是默认 的 key 事件听众对象,它缺省地实现了 key listener 接口。简单的一个样例代码: . public void keypressed (int keycode) if (keycode 0) /输出当前被按下键的键码 system. out.println(“keypressed ” +( (char) keycode ) ); else 山东凯文科技职业学院 9 当按下手机的操作键盘上的按键时,就会触发这 key 事件,系统并会自动调用 keypressed()方法,并且系统将捕获到的键码传递给该方法,在上面的那段代码中方法判断了 所按的按键值是否大于 0,如果大于 0 输出所按的手机键盘上的实际值,否则执行其他的操作任 务。4 2.4.2 key released 方法 可以说方法 key released()与上面提到的 keypressed()方法是对应的。它是用来处理手 机操作键盘上的按键被释放的事件,这个方法也同样没有与之对应的显示的听众,这些听众也 是由系统根据实际对象提供的。下面是一个样例代码: public void keyreleased(int keycode) if (keycode 0 ) / /输出当前被释放键的键码 system.out.println(“keyreleased ” +( (char) keycode) ); else 当释放手机操作键盘上被按下的按键时,则会触发这个 key 事件,系统并会自动交由 keyreleased()方法来处理该事件,同样的上面的这段代码中,该方法判断了所按的按键值是 否大于 0,如果大于 0 则输出所释放的手机键盘上的被按下的按键的实际键值,否则执行其他的 操作任务。4 上面说的是在开发手机游戏过程中遇到的两种低层事件的方法 keypressed 方法和 keyreleased 方法,下面就具体介绍“pocket boxing”手机游戏的开发过程。 山东凯文科技职业学院 10 3 手机游戏开发制作 3.1 游戏编程 众所周知,j2me 现在最流行的就是制作手机游戏,况且现在无线游戏编程现在又是一个很 热门的话题,不但因为它具有极强的趣味性,更重要的是它给我们带来了无限的商机。随着 java 手机的诞生,手机游戏编程的灵活性与轻便性使得 java 手机游戏成为游戏市场的又一 亮点。 3.2 格斗类手机游戏实例 手机游戏有很多种类,其中格斗类游戏凭借着它的趣味性和娱乐性深受人们的青睐。如何 制作一款优秀的格斗类游戏,就成为手机游戏开发人员一个最关键的问题了。 3.2.1 游戏背景介绍及开发环境 这里将通过一款拳击游戏来介绍格斗类手机游戏中的攻击与防御等重要因素、以及如何控 制对手角色。 这款游戏名字叫“pocket boxing”。在这款游戏中,玩家所控制的拳击手将出现在屏幕的 左侧,电脑所控制的拳击手则出现在屏幕的右侧。拳击手可以进行上下两种的攻击方式,以及 上下阻挡防守与后退防守的防卫。当攻击命中对手时,就可以是对手角色的生命点数减少,不 过不是任何的攻击方法都可以使对手的生命点数减少的。当玩家在进行上方和下方的攻击的时 候,对手进行相对应防卫的时候,在对手防守状态中是不能使对手的生命点数减少的,还有一 种情况就是在对手后退一步避开你的攻击的时候也同样不会减少生命点数的。 当对手的生命点数用尽的时候,玩家就获得了这一局比赛的胜利,就可以进入下一个回合。 在进入下一个回合后,电脑控制的对手的生命值会恢复,同时拳击手的攻击力会加强,也就是 难度会加大。相对的玩家控制的拳击手在前一回合所剩下的生命点数,也可以附加到下一回合 的生命点数上去。 游戏中一共有五个回合,在全部的回合中取得胜利的话就是冠军了。在中途如果被打败, 就算是游戏结束了。游戏流程如图4.1: 这款手机游戏是一个简单的midp应用程序,在这里进行开发有它需要的开发环境。midplet 的开发环境需要有java2 sdk1.3版以上(这里使用的是jdk1.4版)与midp的类库、以及后述的 运行前验证工具三种。在j2mewtk中除了包括midp的类库、运行前验证工具之外,还会把编译与 包装(jar文件化)、jad文件的创建、模拟器的启动等在开发midp需要用到的操作加以集成。 当完成了jdk1.4以及j2mewtk的安装以后,就可以开始对游戏项目进行创建了。 山东凯文科技职业学院 11 3.2.2 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 类名称或是数据文件大小、 版本等信息。 (3)kddi 的地方,使用组合了 jar 文件与 jad 文件的 kddi 专用的 kjk(kddijavaextension) 。 3.2.3 midlet 的生命周期 midlet 的生命周期,与 applet 或 doja 是不一样的东西.若想要在 applet 与 doja 之间作相互 的移植时,对这个生命周期的流程有越深入地了解,在进行移植的时候就会越轻松。 midlet 是以下列的生命周期来运行的: (1)当终端发出了 midlet 的运行命令时,若编写于 jad 文件 midlet 有多个的时候,就让其进 行选择后启动 midlet。 (2)midlet 的 constructor 被调用。 (3)midlet#startapp()方法被调用,启动 midlet。 (4)在终端有来电的时候 midlet#startapp()方法就会被调用,并让 midlet 暂停。 (5)当通话结束等的时候,就再次调用 midlet#starapp()方法,midlet 就会再次启动。 (6)调用 midlet#destoryapp(boolean)方法,以将 midlet 结束。 如图 4.2 : 3.2.4 midlet 的画面显示基础 midlet 类本身由于并没有提供直接操作画面显示的功能,因此在 midlet 类的子类也没有直 山东凯文科技职业学院 12 接操作画面显示的功能。因此,要使用管理画面显示功能的 display 类。这个 display 类可以让 javax.microedition.lcdui.displayable 类的子类显示在画面 上。 开始 按下重新启 动按钮? 显示暂停界面 显示关卡 结束界面 显示标题界面 按下结束按钮? 按下自动按钮? 1 结束 2 1 显示关 卡启动 界面 显示关卡 游戏界面 按下停止按钮? 按下暂停按钮? 过关 玩家的胜利? 全关卡过关? 2 显示关 卡结束 界面 2 显示游 戏结束 界面 2 yes no yes yes yes yes no no no yes yes no no 山东凯文科技职业学院 13 图 4.1 游戏的流程图 图 4.2 midlet 的生命周期 displayable 类的子类大致来说可以分为两种,分别用来进行线与图形、图像的低级描绘类, 与用来显示警告与文本的输入、选择列表等 ui 组件类。前者是指 javax.microedition.lcdui.canvaslei 类,用来进行低级描绘。后者是指其中的 javax.microedition.lcdui.screen 类与其子类(alert、form、list、textbox 类等) 。 displayable 类与子类之间的关系如图 4.3 3.2.5 游戏项目的创建 在 j2mewtk 当中,是以项目这个单位来管理 midletsuite,因此在进行程序编写前必须先 要创建项目。 图 4.3 displayable 类与子类类图 首先要将项目取名为 simplemidlet。在 windows“开始”菜单启动 j2mewtk 的 object displayable canvasscreen alertformlisttextbox paused paused destroyed destoryapp() pauseapp() startapp() destroyapp() new() 山东凯文科技职业学院 14 ktoolbar,启动之后,单击“new project”按钮。然后在“new project”对话框的“project name”与“midlet class name”的文本框输入项目的名称“pocket boxing”,并单击“create project”按钮。 这样就完成了对游戏项目的创建。 接着就要对程序进行编译了,说到编写程序代码首先要提到支持 j2me 的开发工具。我用 到的开发工具是 borland 公司推出的开发工具jbuilder9 企业版。其功能非常强大,不仅可 以集成化的编码、调试,还可以进行应用发布,网络调试以及版本控制等等,是一个非常不错 的开发工具。 3.2.6 命令种类及命令处理 这个游戏中要定义的命令,一共有使用在标题画面的 start、exit 命令与使用在游戏中的 pause、resume、quit 命令共计五种。 下面是这五种命令变量的程序代码: /*start 命令变量*/ private command startcmd=new command (“start”, command. screen, 5); /*exit 命令变量*/ private command exitcmd=new command (“exit”, command. screen, 1); 图 4.4 游戏开始界面 /*pause 命令变量*/ private command pausecmd=new command (“pause”, command. screen, 5); /*resume 命令变量*/ private command resumecmd=new command (“resume”, command. screen, 5); /*quit 命令变量*/ private command quitcmd=new command (“quit”, command. screen, 1); 山东凯文科技职业学院 15 3.2.7 游戏中的描绘处理 进行描绘的 dodraw( graphics g )方法,将会在 game canvas 类进行描绘时被调用出来。描 绘位置会在 game canvas 类中先使用 set draw x( int x )和 set draw y(int y)方法来预先指定。 在决定画面位置的时候,由于拳击手图像只有上半身,因此必须将图像的下半部分设置在画面 的最下方。因此,就要准备能返回图像高度的 get height()方法。另外,在被击倒的时候由于是 以拳击手倒在地下为前提,因此将什么都不描绘。 描绘处理的程序代码如下: /*存储了描绘开始的 x 坐标的变量*/ protected int draw x ; /*存储了描绘开始的 y 坐标的变量*/ protected int draw y ; /* * 设置用来进行描绘的 x 坐标的方法 * param x 进行描绘的 x 坐标 */ void set draw x ( int x ) this. drawx=x ; /* * 设置用来进行描绘的 y 坐标的方法 * param y 进行描绘的 y 坐标 */ void set draw y( int y ) this. drawy=y ; /* * 返回图像高度的方法 * return int 进行描绘的图像高度 */ int get height() 山东凯文科技职业学院 16 /返回身体图像的高度 return images0. get height() ; 以上是对 boxer 进行的描绘,在 enemy 类继承了在功能方面几乎相同的 boxer 类,并承续 其功能改写了 get imagepaths()方法与 dodraw( graphics g )方法,更改为进行了图像的获取以及 与玩家位置相反的方向描绘。在 constructor 当中,就会调用出 boxer 类的 constructor,并进行 图像的读取。 3.2.8 游戏状态的类变量 在游戏中,在 game canvas 类中定义表现游戏状态的类变量。要实现的变量将包括:标题、 回合开始、回合中、回合结束、全部回合结束等变量。 程序代码: /* 代表标题显示状态的常量 */ private static final short title =0 ; /* 代表回合开始显示状态的常量 */ private static final short round_start =1 ; /* 代表比赛中显示状态的常量 */ 如图 4.8 private static final short fighting =2 ; /* 代表回合结束显示状态的常量 */ private static final short round_end =9 ; /* 代表回合过关状态的常量 */如图 4.10 private static final short all_round_clear =10 ; 另外,除了上述提到的五种状态变量,还涉及到了代表存储现在状态的变量(game state) 与暂停状态的标识(ispaused) 。代码如下: /* 存储现在显示状态的变量 */ private short gamestate ; /* 代表暂停状态的标志 */ private boolean ispaused ; 3.2.9 按键事件的处理 在进行按键处理的 key pressed 方法中,当不是在回合中的时候或是在回合中但暂停中的时 候,由于没有必要所以不进行处理。除此之外,在拳击中也不进行任何的处理,这是因为如果 在拳击当中若能做出其他动作的话会非常奇怪。当都不符合以上条件时,就要根据所按下的数 山东凯文科技职业学院 17 字按键来更改使用者的状态。在这款游戏中按键是这样分配的:“1”后退、 “4”后退、 “2”上 方防御、 “5”下方防御、 “3”上方攻击、 “6”下方攻击。当为上方攻击和下方攻击时,就要调 用出 dolifepointcheck4 enemy( )方法来根据对手的状态减少生命点数,然后根据生命点数的剩 余量来结束回合。 3.2.10 设计存在的难点 在这款游戏的设计全过程中,还是存在着一些难点的。首先在开发环境的准备过程中, j2mewtk 中所附带的模拟器除了灰阶的以外还有许多种类,虽然可以在模拟器启动后进行选 择,但是要使用彩色画面的模拟器的话,则要在每次启动 j2mewtk 后都得进行一次选择,所 以说相当不方便。因此,就有必要将默认的模拟器变成彩色移动电话的模拟器,这样一来在启 动 j2mewtk 之后就不用再去选择使用彩色的模拟器了。 其次,在设置默认模拟器的 defaultcolarphone 的时候,其画面大小为纵向 100 像素、横向 96 像素。不过,实际上一些移动电话的终端画面都在纵向 130 像素、横向 120 像素以上,因此 这个设置并不符合现实状况,所以还必须修改属性文件。 最后,在编写程序代码之后,要进行验证处理,另外还要将 class 文件与数据文件打包 (jar 文件)在一起。要以 ktoolbar 来进行打包时,只要从 ktoolbar 的“project”菜单选择 ktoolbar 的打包处理就会帮助一起进行编译以及运行前的验证处理了。 以上就是对“pocket boxing”游戏在整个制作过程中的介绍和对过程中存在的一些难点的分 析。 山东凯文科技职业学院 18 4 结 论 本篇论文的主要思想是论述 j2me 在手机游戏制作开发中的应用,以一款手机游戏“pocket boxing”为实例具体讲述了运用 j2me 制作手机游戏。 java 本来是为嵌入式电子设备和智能家电开发的,却在网络应用中发展壮大起来,现在又 “重操旧业” ,大举进军智能和嵌入式家电并取得了出人意料的成功。但是,就目前而言, j2me 作为对嵌入式设备和智能家电应用领域的最佳解决方案已经成为不争的事实。 现在,手机 java

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论