收藏 分享(赏)

基于Java的手机程序设计.doc

上传人:dcjskn 文档编号:4715750 上传时间:2019-01-08 格式:DOC 页数:22 大小:334KB
下载 相关 举报
基于Java的手机程序设计.doc_第1页
第1页 / 共22页
基于Java的手机程序设计.doc_第2页
第2页 / 共22页
基于Java的手机程序设计.doc_第3页
第3页 / 共22页
基于Java的手机程序设计.doc_第4页
第4页 / 共22页
基于Java的手机程序设计.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

1、学士学位论文 基于 JAVA 的手机程序设计1目 录引 言 2一、 系统 分析 .2(1) 开发平台和技术分析 . 2(2) JAVA 语言特点 .3(3) 需求功能分析 4(4) 数据流程分析 5二、系统设计 5(1) 程序流程设计 5(2) 程序类设计 7三 、系统功能实现 .9( 1)通过双缓冲技术实现动画 .9( 2)游戏菜单的绘制 .9( 3) 游戏逻辑及屏幕 GAMECANVAS 类 10( 4)游戏按键的实现 14结 论 .17参考文献: .18附 录 .19致 谢 .21学士学位论文 基于 JAVA 的手机程序设计2引言目前,中国的手机用户已经突破 4 亿大关,同时手机用户还在

2、翻倍增长,远远没有达到饱和的程度,用户数量持续高攀,市场的潜力和巨大的商机已经不言而喻。4 亿的国内手机用户在满足了基本的通信等需求后,还渴望着有更丰富的无线增值业务。而经过 3 年多的市场培育,目前手机对手机游戏的认知度和普及率已经显著提高,手机游戏市场的需求无线膨胀,前景相当乐观。作为无线娱乐产业的先行者,手机游戏势必会在其领域中脱颖而出,占领绝大部分的市场份额。同彩铃、彩信等其他业务相比,手机游戏的创造性、娱乐性互动性和用户黏性都具有绝对的先天优势,这也是其他无线业务所无法比拟的。手机游戏产业已成为政府部门、海内外运行上、SP(服务提供商)行业关注的焦点,作为运营商的中国移动将手机游戏作

3、为新业务发展的一个战略性的重点业务。3G 的推出对手机游戏来说,客户端与服务器的数据传输速度会更快,图像视频更加清晰流畅,社区交互更加便捷,画面显示更加夺目,这些要素的大幅度生化使得用户的游戏体验更加丰富。玩家站在任何地方,都可以对是打开手机,享受手机游戏带来的无线乐趣。1、 系统分析1.1 开发平台和技术分析1.1.1Eclipse 简介集成开发环境(Integrated Developing Environment,简称 IDE)是一个综合性的工具软件。目前所有的 IDE 中,Eclips 可以说是有发展前途的产品之一。Eclips Platform 是一个开放的可扩展的 IDE。Ecli

4、ps Platform 提供建造块和构造并运行集成软件开发工具的平台,允许工具建造者独立开发与他人工具无缝结成的工具,无需分辨一个工具功能在那里结束,而另一个工具功能在哪里开始。Eclips 项目产生的工具和来自其他开放源代码的第三方软件组合而成。Eclips 项目生产的软件一 CPL 发布,第三方软件有各自的许可访问协议。1.1.2 Wireless Tool Kit 简介WTK(Wireless Tool Kit)是 Sun 公司针对 J2ME 推出的用于手机和 Palm 等学士学位论文 基于 JAVA 的手机程序设计3移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它

5、通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他 IDE 需集成采用的必备元素。1.1.3 Java 2 Micro Edition 简介J2ME(Java 2 Micro Edition)是 Java 2 的一个重要组成部分,它与J2SE、J2EE 并称。根据 SUN 公司的定义:J2ME 是一种高度优化的 Java 运行环境,是主要针对如蜂窝电话、可视电话、数字机顶盒和汽车导航系统等消费类电子设备的。J2ME 是为了那些使用有限的电力、有限的网络连接及有限图形用户界面能力的设

6、备开发的。它最初的目标是具备 16 位或 32 位处理器、16MHz 时钟频率、512KB 或更少内存的设备。J2ME 本质上是一个针对小型设备的 Java 版本,通过裁减某些在小型设备上不许需要的功能,以达到减小 Java 虚拟机的体积以及相应运行库的体积,目标是为小型设备提供一个可靠,资源占用少的运行平台。所有的 J2ME 组件都围绕一个中心,这些被称为 configuration(配置)它们中的每一个配置都是用于消费电子和嵌入设备的某一个特定的类别。1.2 Java 语言特点(1) 平台无关性Java 引进虚拟机原理,并运行于虚拟机,实现不同平台之间的 Java 接口。Java 的数据类

7、型与机器无关。(2) 安全性Java 的编程类似 C+,但舍弃了 C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。(3) 面向对象Java 吸收了 C+面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。(4) 分布式Java 建立在 TCP/IP 网络平台上,提供了用 HTTP 和 FTP 协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。学士学位论文 基于 JAVA 的手机程序设计4(5) 健壮性Java 致力与检查程序

8、在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。自己操作内存能减少了内存出错的可能性。1.3 需求功能分析需求分析过程是整个系统开发最重要的阶段,分析的成功与否,决定着整个系统功能的完善性以及稳定性。在该阶段需求分析人员需要确定整个产品的功能要求,并且将现实事务抽象成对象并建模。根据现在手机游戏所需要的各项要求以及具体情况,需要满足以下需求:1. 游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。

9、因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2. 游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。3. 玩家飞机的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定的智能性;敌人飞机的运行算法也要进行相关的设置,已免游戏过于简单。玩家飞机还设置了法宝键,按此键可加快子弹速度。4. 双方的飞机在前进时也需要考虑到是否碰撞到对方飞机,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。每一次刷新页面、每前进一步都需要进行相关的碰撞检测。7. 游戏的地图不可能

10、通过绘图来解决。否则,不仅难于控制和处理过多的元素,也会因过多的大型图片而不能限制程序的大小,失去手机上程序的原则和 Java 的优势。8. Java 是基于虚拟机的半解释型编译系统,其执行效率较 C+等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。9. 游戏的结束、开始、动态信息画面作为构成一个程序都是必不可少的学士学位论文 基于 JAVA 的手机程序设计5重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图和人性化设置也需要有一定的

11、考虑。1.4 数据流程分析根据系统的功能和数据流程的分析,现将数据流程图显示如下:2、系统设计2.1 程序流程设计MIDlet suite 是 MIDP 应用程序的最小单位,JAM 负责将手机内的 MIDlet suite 以图形化的方式呈现,让用户能够选取欲执行的 MIDlet suite,一旦选取了某个 MIDlet suite,操作系统就会激活 KVM 执行里面的 MIDlet。MIDlet 及相关的支持类组成了 MIDP 应用程序的实际内容。而每个 MIDlet 都必须继承javax.microedition.midlet.MIDlet 这个抽象类。在 MIDP 规范中定义了 MIDl

12、et 的生命周期,以及可以存在的三种状态,包括 Paused、Active 以及 Destroyed,每一个 MIDlet 在任何时刻只可能处于其中的一个状态。这三种状态的转换关系如图 3-1 所示:Logo 画面游戏菜单 开始游戏关于游戏游戏帮助声音开关退出游戏初始化数据据绘制场景帮助说明游戏说明开关页面死亡主循环学士学位论文 基于 JAVA 的手机程序设计6MIDlet 有三个状态,分别是 pause、active 和 destroyed。在启动一个 MIDlet 的时候,应用管理软件会首先创建一个 MIDlet 实例并使得他处于 pause 状态,当startApp()方法被调用的时候

13、MIDlet 进入 active 状态,也就是所说的运行状态。在 active 状态调用 destroyApp(boolean unconditional)或者 pauseApp()方法可以使得 MIDlet 进入 destroyed 或者 pause 状态。值得一提的是 destroyApp(boolean unconditional)方法,事实上,当 destroyApp()方法被调用的时候, AMS 通知MIDlet 进入 destroyed 状态。在 destroyed 状态的 MIDlet 必须释放了所有的资源,并且保存了数据。如果 unconditional 为 false 的时候

14、,MIDlet 可以在接到通知后抛出 MIDletStateChangeException 而保持在当前状态,如果设置为 true 的话,则必须立即进入 destroyed 状态。本游戏所有界面都是在底层屏幕类 Canvas 上绘画,首先创建一个离屏画布,将游戏所用地图,玩家飞机以及子弹先绘画在离屏画布上。程序主要有两个类。gameStart 类继承自 MIDlet,gameCanvas 类继承自GameCanvas。游戏经过两个 LOGO 画面进入到菜单选项,可进行开始游戏,游戏帮助,关于游戏,声音开关,退出游戏等选项。游戏开始时,主线程一直运行,另外还设置了 4 个定时器,分别用来控制子弹

15、的生产,子弹的移动,敌机的生产和敌机的移动。程序使用 gameStart 类调用 sartApp()方法开始游戏,通过 Display 对象将屏幕显示转给 gameCanvas 类对象。消减状态(Destroyed)停止状态(Paused)运行状态(Active)StartApp()DestroyApp()呼叫 MIDlet 的构造函数DestroyApp()PauseApp()图 2-1 MIDlet 的流程学士学位论文 基于 JAVA 的手机程序设计72.2 程序类设计2.2.1 MIDlet 类用于启动游戏的开始,在 MIDlet 中通过 Display 进行用户界面管理,负责与用用程序

16、管理进行交互。2.2.2 画布 Canvas 类为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是 Canvas 抽象类进行绘图。从程序开发的观点看,Canvas 类可与高级 Screen 类交互,程序可在需要时在 Canvas中掺入高级类的组件。Canvas 提供了键盘事件、指点杆事件(如果设备支持) ,并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。2.2.3 界面设

17、计游戏开始界面如图 2-2 所示。游戏进入界面后就会看到“开始游戏” , “游戏帮助”,“关于游戏” , “音乐开关” , “退出游戏”选项。单击开始游戏进入游戏。在游戏帮助中会告诉玩家如何操作游戏的信息。关于游戏则告诉玩家游戏的开发信息。菜单界面如图 2-3 所示: 图 2-2 游戏开始界面图 2-3 游戏菜单界面学士学位论文 基于 JAVA 的手机程序设计82.2.4 按键设计主流市场上的手机键盘设置一般都是 4*3 的格局,根据人手指案件的习惯游戏中一般用到的都是 2,4,5,6,8 键。*、#、左侧功能键和右侧功能键做其他特殊用。因此在本程序中按键做表 2-4 中的设置: 键位 功能数

18、字 4 键 向左移动数字 2 键 向上移动数字 5 键 使用武器进行射击数字 6 键 向右移动数字 8 键 向下移动数字 0 键 发射飞弹左侧功能键 暂停右侧功能键 返回主菜单表 2-4 战斗界面中的按键说明2.2.5 功能设计在设计手机游戏的菜单是,要充分考虑设备的原有操作习惯,比如 NOKIA的手机用户会使用左软键作为确定,右软键作为返回菜单。而 MOTO 的手机用户右软键作为确定,左软键作为返回菜单。中国移动的百宝箱业务的开发规范中对游戏的按键进行了要求。在底层屏幕类中,核心的方法是 paint(),keyPressed()和 run()这三个方法,分别用来控制屏幕的绘制、按键的处理和游

19、戏逻辑的处理。这 3 个方法的工作是在一个状态变量 gameState 协调下完成的。gameState 存储了当前整个系统的状态,当游戏加载时,按键控制快速跳过画面,run()方法控制往下,当显示菜单时 keyPressed()方法所接受的按键用来改变菜单的状态变量 menuState;当进行游戏时,用户按键控制的就是主角的移动而不是修改菜单选项。run()方法测试对游戏的所有逻辑数据进行加工和计算,计算完成之后,在 paint()方法中根据计算的结果再进行绘制,下面代码是 paint()方法的核心结构:public void paint(Graphics g) offG.setClip(0

20、, 0, SCREENWIDTH, SCREENHEIGHT);switch (gameState) case PAUSE: /暂停状态case MENU: /菜单状态图 2-3 菜单界面学士学位论文 基于 JAVA 的手机程序设计9switch (this.menuState) case 0:/载入Logo图片break;case 1:/载入第二幅Logo图片break;case 2:/绘制菜单break;break;case LOAD: /游戏加载状态break;case GAMEING:/游戏进行中状态break;case GAMEOVER:/游戏结束状态break;/将脱屏缓冲区的内容

21、绘制到屏幕g.drawImage(im, 0, 0, 0);3、系统功能实现3.1 通过双缓冲技术实现动画在底层屏幕的 paint()方法中要执行大量的图形绘制,而在绘制的过程中手机屏幕又要显示,很可能当前帧没有绘制完成下一帧的绘制任务就已经开始,这样就会导致屏幕的闪烁。避免闪烁的方法是使用图像的双缓冲技术,定义一个完全脱离屏幕的缓冲画布,在缓冲画布绘制所有内容,当绘制完成时再将缓冲画布中的所有像素信息整个贴到当前手机屏幕上,在 J2ME 中可以使用Image 类创建一个可修改的缓冲画面,代码如下:Image im = Image.createImage(SCREENWIDTH, SCREEN

22、HEIGHT); /创建脱屏画布Graphics offG = im.getGraphics(); / 脱屏画笔将所有画面都绘制在 im 上,然后将 im 画布在贴到当前画面上。3.2 游戏菜单的绘制菜单背景的静态绘制:直接在离屏画布上绘制静态图片,重新绘制离屏画布的大小,如果背景图片没有加载到,则将背景用黑色代替。学士学位论文 基于 JAVA 的手机程序设计10菜单选项的绘制:本游戏的菜单的所有选项的界面都是通过图片加载所实现的,如果每个选项都把图片作为单独的一个文件,则会大大增加图片的数量,同时也增加了整个程序的大小。我们将所有选项的画面保存在同一个图片文件中就可以节省资源。我们就只需要加

23、载一张图片就可以了,在这里我们需要用到 setClip()方法绘制图片的一部分。setClip()方法是用来绘制指定坐标后面区域的图片。通过 setClip()方法可以将图 2-5 做成游戏中的单个选项的画面。图 2-5在方法外设置一个 nowFramemenu 变量记录菜单中的各个选项,用按上下键来确定所需选项。具体剪裁菜单选项的代码如下:public void drawmenu(Graphics offG) /设定剪裁区 x y w h /剪裁区的范围在屏幕重绘的时候受到影响其它区域不受影响offG.setClip(0, 178, 130, 30);offG.drawImage(menu,

24、 0, 178, 0);offG.setClip(0, 182, 94, 20);offG.drawImage(menu, 20, 182 - 30 - 20 * nowFramemenu, 0);3.3 游戏逻辑及屏幕 gameCanvas 类gameCanvas 类是游戏的主要核心,gameCanvas 中的方法决定着地图的滚动,子弹的产生,子弹的移动,敌人的产生,控制着敌人的移动,判断敌人及玩家是否被击中等。它控制着整个游戏的线程。3.3.1 地图的创建以及背景滚动的实现本游戏通过加载一张与屏幕大小一致的 PNG 图片作为地图,然而一张图片加载上去是静态的,如何实现背景的滚动呢?我们先将

25、地图初始化,将两张地图凑在一起画在离屏画布上,第一张地图画在离屏画布的正上方,第二张地学士学位论文 基于 JAVA 的手机程序设计11图贴着离屏画布的左上角,每重绘一次地图的纵坐标递增 1 像素,则整个图片就会向下移动 1 像素,当第 2 张图片纵坐标超过屏幕的限制时,返回到初始化状态。通过在该图上再次绘制填补空白。实现代码如下:public void drawBack() offG.setClip(0, 0, SCREENWIDTH, SCREENHEIGHT);switch (this.level_Mode) case 1:offG.drawImage(mapbk, 0, mappy, 0

26、);offG.drawImage(mapbk, 0, mappy - 208, 0);mappy += 1;if (mappy = 208) mappy = 0;其中,level_Mode 是关卡的值,通过不同关卡值可以绘制不同关卡图片。3.3.2 游戏角色飞行的实现在实现飞行的过程中,首先对飞机的图片、坐标、方向定义进行定义和初始化,图片和实现代码如下:px=176/2-15;py=208-30;direct=0;因为在飞行中,飞机在各个方向飞行时的样子是不同的,比如说向右飞行的时候左翼则会侧飞,为了增加游戏的逼真效果,本游戏使用了 setClip()方法对飞机的动画进行切割使用,当按下方向

27、键时即时的设置按下该方向键所需要的帧实现代码如下:public void drawPlane() /画飞机offG.setClip(px,py,30,30);学士学位论文 基于 JAVA 的手机程序设计12offG.drawImage(imPlane,px-dirFramedirect*30,py,0);画出不同方向时飞机的样式offG.setClip(0,0,176,208);通过在 keyPressed()方法中处理按键来改变飞机的飞行方向,而 run()方法控制了定时的屏幕绘制。这样,每次都会根据按键处理方法中修改的结果进行新的屏幕绘制,我们就会看到不同方向飞机飞行的效果。 3.3.3

28、使用定时器和向量类实现子弹效果在飞机发射子弹过程中,会有多于一个 1 颗的子弹在空中飞行,子弹的数量不能确定,要存储不确定的一组数据可以采用向量 Vector。因为这个类提供了管理任意数量对象的方法,可以方便的将对象添加到向量中进行管理,也可以随时移出,当对象从向量中移出时,系统会自动对内容进行清空。以下是子弹向量的定义:allBullet=new Vectior();子弹在用户按下按键时能够连续发射是通过一个定时器实现的。当按下开火键的时候,定时器检测到并开始按没 0.3 秒的速度产生子弹,将子弹的数据(子弹当前的坐标,以及图片帧)添加到向量中,子弹产生后,不会一直不动,它的坐标因该不停的变

29、化,程序中创建了第二个定时器不断对子弹的坐标进行调整,在子弹还在屏幕中的时候,每 0.2 秒向上移动 8 个像素,并且对屏幕进行重绘。如果在子弹移动进行中,用户按了 0 键,子弹速度将突然爆发,以 0.2秒移动 40 个像素的速度击毙敌人。在子弹移出屏幕以后,从向量中将该子弹对象移出。由于 Java 中 Vector 是按照对象的方式来处理的,可以将其添加到向量中进行管理。在方法 drawBullet()中获取子弹的向量对象,从向量中获取子弹的坐标,并在该坐标上绘制子弹的图片,因为子弹的图片为 3 个帧,因此可以看到在子弹飞行的过程中,子弹的样子是不断变化的。通过按键控制了子弹发射开关变量 i

30、sFire 的值为 true,在抬起按键以后又将isFire 的值设置 false。3.3.4 按 0 键增加子弹速度的实现如果在子弹移动进行中,用户按了 0 键,子弹速度将突然爆发,以 0.2 秒移学士学位论文 基于 JAVA 的手机程序设计13动 40 个像素的速度击毙敌人。在方法外设置一个参数 quick 来确定用户是否按了 0 键。将下面代码嵌入到第二个定时器内,用来捕获 quick 参数的取值。if(quick)tmp1+=40;/如果按了加速键,则向上移动 40像素elsetmp1-=8;3.3.5 使用定时器实现敌机飞行效果为了控制方便,敌机的出现不用主线程控制,而用定时器实现。

31、因为敌人出现的位置不固定,为了使得敌机出现的随机性,设置了一个随机数random%168 作为敌机出现的横坐标,从上面飞下来。通过定时器没 0.2 秒随机产生一架敌机,并将之放入向量数组中,记录敌机的初始坐标和敌机类型,并通过另一个计时器,每秒将敌机的坐标向前推进 8 像素,并且将 paint()方法重绘。使用方法 drawPlaneAi()从向量中获取敌机的信息,根据敌机的坐标在相应位置绘制相应的敌机图片。敌机的图片如图 2-6 下:图 2-6 敌机图片敌机随机出现的表现形式如图 2-7 所示:图 2-7 敌机随机出现表示和子弹射击3.3.5 碰撞检测的实现游戏进行中,需要进行玩家飞机、子弹

32、与敌机进行碰撞检测。当玩家角色学士学位论文 基于 JAVA 的手机程序设计14与敌机碰撞的时候会死亡,产生爆炸,然后返回主菜单页面。因此设置了一个变量 NPCdead 记录玩家角色的生存状态,当 NPCdead 为 True 时则不绘制玩家飞机,并在主线程中将 gameState 改为主菜单的状态,同时再将 NPCdead 设置为 false,以并下次游戏开始初始化玩家角色。当敌机碰到玩家子弹的时候,将敌机从 Vector 向量中移出,并在当初位置绘制爆炸图片。检测算法主要判断敌机与子弹的位置是否相等,由于当初设置子弹和敌机的时候他们的位置只是一个点,因此在碰撞检测的时候将这个点的范围变大,这

33、样可以有效实现碰撞的效果。碰撞检测是由方法 isChecked(int x1,int y1)实现的,判断基于位置(x1,y1)这个点的范围有没有子弹出现,如果有则返回 ture,否则返回 false;同时在函数内将这个位置记录到一个全局变量数组中,用来设置爆炸图片绘制的位置。如图 2-8 所示,显示了爆炸图片的制作效果:图 2-8 击毙敌机和被敌机碰撞产生的爆炸3.3.6 爆炸图片的实现为了体现爆炸的真实性,那么爆炸不可能只是单一的一个静态画面。为了实现爆炸的动画效果则需要 4 个帧,每次绘制的时候将帧的值加 1,换成下一个爆炸图片,其实现也是用 setClip()方法实现。当玩家被敌机碰撞后

34、产生爆炸后返回到主菜单。3.4 游戏按键的实现在底层屏幕类中是用 keyPressed()方法进行按键控制的。因为游戏分为很多状态,所以不同状态中按键的效果又有不同。当在进入 LOGO 画面的时候,按键是没有效果的。当 gameState=MENU 的时候,按上下键可以进行选项处理。学士学位论文 基于 JAVA 的手机程序设计15由于选项多个,因此需设置一个 menuState 来标识不同的选项,以确定按下确定键的时候处理哪中选择。当 gameState=GAMEING 时,玩家可通过上下左右来进行游戏角色的上下左右移动。并更改玩家角色的坐标,来实现飞机的飞行。在游戏进行中,按左侧软键可以进行

35、暂停,按右侧软键可以退出游戏,返回主菜单。具体代码如下:public void keyPressed(int n) if(gameState=GAMEING)/当游戏状态处于 GAMEING时,进行上下左右的运动 int k=this.getGameAction(n);switch(k) case Canvas.UP:direct=1;py-=8;break;case Canvas.DOWN:case Canvas.FIRE:direct=1;this.isFire=true;if(n=48)/设置加速键quick=true; if(n=-7)/在游戏开始时按右软键则返回主菜单gameStat

36、e=MENU;else if (gameState = MENU | gameState = PAUSE) /处理音乐if (menuState = 5 学士学位论文 基于 JAVA 的手机程序设计16this.repaint();/重绘屏幕return;/处理关于if (menuState = 3) /在菜单状态时,实现按上下左右键选择游戏选项if (n = Canvas.KEY_NUM2 | n = -1 | n = 1/改变选项帧if (nowFramemenu = 0) nowFramemenu = 0;if (n = Canvas.KEY_NUM8 | n = -2 | n = 2i

37、f (n = -7 | n = 7) this.repaint();return;if (nowFramemenu = 1) /将选项帧与菜单状态对应this.menuState = 4;if (nowFramemenu = 2) this.menuState = 6;学士学位论文 基于 JAVA 的手机程序设计17this.repaint();return;通过keyReleased()方法处理按键抬起是的动作。public void keyReleased(int n) direct=0;if(this.getGameAction(n)=Canvas.FIRE)this.isFire=fa

38、lse;结 论几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。即使是作为操作系统的各种版本的 Windows 也时常会发生许多类型的错误和漏洞。本游戏程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,经过同学试用后的建议,本游戏应该完善的功能如下:1. 敌机最好能发子弹,可增加游戏的可玩性;2. 最好有接宝物的设置,增强可玩性;3应设置关卡 BOSS,如当敌机消灭一定数量的时候就会出现一个BOSS。7. 没有添加成绩记录,即英雄榜;6. 最大的遗憾,敌人不够智能化。以上不足需要我继续学习,在原有的基础上不断努力,掌握足够的知识,以便以后在

39、工作岗位中能更好的发挥自己的才能!希望不远的将来,我能够有能力对这个游戏进行重写,加以完善。这款游戏作为我的毕业设计,是本人目前做过的最有意义的程序,学习期间做过很多课程设计,大多规模很小。在数据库、各种应用软件和游戏中,我学士学位论文 基于 JAVA 的手机程序设计18仍觉得对游戏的设计有极大的热情。因为其各个模块间的联系十分紧密,代码重复执行率高,当经过无数次的调试、修改后,能最终看到成品,有无比自豪的心情。大学期间做过图书馆管理程序等简单的数据库管理系统的课程设计,思想大致相似,变化范围有限,没有太多自己可发挥的余地。大家作品的最终结果都离不开同一个模式。相比一些数据库软件,游戏的设计有

40、很多人情色彩和艺术思想的发挥,正式商业的软件的人性化界面和各个游戏间不同的结构每每会让人有去开发的冲动。学士学位论文 基于 JAVA 的手机程序设计19参考文献:1Joshua Bloce 著,潘爱民译: Effective Java 中文版 ,机械工业出版社.,2004 年7 月第 4 版。2Bruce Eckel,侯捷译, Java 编程思想 ,机械工业出版社出版社,2005 年 3 月第 1版。3王森著, Java 手机/PDA 程序设计入门 ,电子工业出版社, 2005 年 2 月第 3 版。4James Keogh 著,潘颖王磊译, J2ME 开发大全 ,清华大学出版社,2004 年

41、 2 月第 1 版。5Ian Sommerville 著,程成等译, 软件工程 ,机械工业出版社,2003 年 1 月第 1 版。6Frand M.Carrano,Janet J.Prichard 著,韩志宏译, 数据抽象和问题求解JAVA 语言描述 ,清华大学出版社,2005 年 4 月。7李振鹏,龚剑编, J2ME 手机游戏开发技术详解 ,清华大学出版社, 2006 年 3 月第 1 版。8雍俊海编, Java 程序设计习题集 ,清华大学出版社,2006 年 4 月第 1 版。9 美Bruce Eckel. Thinking In Java英文第 4 版,北京机械工业出版社,2007 年

42、3月第 1 版。10丁振凡主编, Java 语言实用教程 ,北京北京邮电大学出版社,2005 年 6 月第 1版。11王路群编, Java 高级程序设计 ,北京中国水利水电出版社,2006 年 7 月第 1 版。12柳西玲,许斌编著, Java 语言应用开发基础 ,北京清华大学出版社,2006 年 1月第 1 版。13吴其庆编著, Java 程序设计实例教程 ,北京冶金工业出版社,2006 年 2 月第 1版。14赵毅主编, 跨平台程序设计语言Java ,西安电子科技大学出版社,2006 年8 月第 1 版。15郑莉,王行言, 马素霞编著.Java 语言程序设计 ,清华大学出版社,2006 年

43、 3 月学士学位论文 基于 JAVA 的手机程序设计20第 1 版。16Jonathan Knudsen 著, Whats New in the J2ME Wireless Toolkit ,2004 年 4 月第 1版。附 录系统使用说明(一)系统开发环境操作系统:Windows XP开发环境:Eclipse3.2编译打包工具:J2ME WTK2.5,JDK1.6.0_13(二)系统开发测试打包简介1首先解压 Eclipse3.2,并将中文包 NLpack1-eclipse 解压出来的 features和 plugins 文件夹覆盖到 Eclipse 安装路径下,然后运行 eclipse.e

44、xe,先设置工作空间,然后进入工作台,在“帮助”下点“软件更新”以及“查找并安装” ,然后,搜索要安装的新功能部件,点“下一步” ,新建已归档的站点,打开eclipseme.feature_1.0.0_site 插件,进行安装。2点击“窗口”下的首选项,打开左边的 J2ME,并点击 Platform Components,右击右边窗口的 Wireless Toolkits,点 Add Wiesless Tooklkits,找到 WTK22 的安装目录,点完成。再打开左边窗口的 Java,点击构建路径,将“源和输出文件夹”设置成“文件” ,然后确定。3将系统 flaygame 文件夹复制到工作区

45、路径下,运行 Eclipse,打开文件下的新建,新建一个项目,打开 J2ME,并点击 J2ME Midlet suite 然后下一步,设置项目名为 flygame,选择 J2ME Wireless Toolkit 2.2 MIDP 2.0 Platform,然后确定。4在左边窗口下,依次点击 flygamesrc缺省包,右击 Midletfly,在运行方式下,选择 Emulated J2ME Midlet,会看到运行的效果。5使用 WTK 的新建项目功能建立一个新项目,要求与 Eclipse 工作区下的项目名称 MIDlet 类名相同。学士学位论文 基于 JAVA 的手机程序设计216 新建项

46、目后,将 Eclipse 工作区下的.java 文件拷入 src 文件夹,将.class文件拷入 class 文件夹(需要新建 ),将 pic 文件夹拷入 res 文件夹,点击生成,如一切正常。7 选择项目-包- 生成包,生成的 jar 和 jad 文件存储在 lzhhdm/bin 目录下。8运行 DefaultColorPhone Device,使用 J2ME 自带的手机模拟器进行测试点击 Lanuch 按钮,即可以进行游戏了。电脑键盘的方向键上、下、左、右可以控制玩家飞机的运动,回车可以发射子弹。可以将鼠标移动到相应的按钮处单击,以测试相应的按钮。学士学位论文 基于 JAVA 的手机程序设计22致 谢首先感谢我的指导老师景波老师,他在我的毕业设计过程中提出了指导性的方案和架构,并指引我阅读相关的资料和书籍,使我在毕业设计过程中碰到问题时能及时得以解决,并一直很耐心地对我的设计系统提出修改建议,找到设计编程的最优路径,使我的系统完成目标功能,达到目标要求。感谢我的同学在当我遇到困难时,他们鼓励我,支持我;当我遇到一些技术上的问题时,大家一起交流,提供了一些建议。感谢学校对我们的悉心教育,并给予我们很多亲手实践的机会!

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

当前位置:首页 > 学术论文 > 毕业论文

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报