基于J2ME MIDP2.0的手机游戏的开发与实现.doc
《基于J2ME MIDP2.0的手机游戏的开发与实现.doc》由会员分享,可在线阅读,更多相关《基于J2ME MIDP2.0的手机游戏的开发与实现.doc(29页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、基于J2ME MIDP2.0的手机游戏的开发与实现第一章 引言11 手机软件及游戏概述111 手机软件概述1当今世界,各种智能消费类电子产品,如移动电话、PDA、电视机顶盒等设备呈现爆炸性增长,其数量大大超过了桌面PC。其中手机可以说是最多人拥有的终端设备。这在带给人们更多方便的同时,使用面的广泛也为手机软件带来了巨大的市场。随着手机能力的增强,传统的娱乐、工作、信息交互和共享等事务越来越拓展到以手机为代表的移动设备上完成。传统的手机再也不能满足人们日益提高的要求,因为它们有以下弊端:* 出厂时所有应用程序并操作系统都已固化在硬件中,不能增、删、改,要想获得新的服务,必须再购新机。如果不小心将
2、固化程序删改,还可能导致机子报废;l 访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时,费用也高。而Java技术在这方面的优势非常明显:l 应用程序可按需下载,可升级空间大;l Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI); l Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。综上所述,手机软件已经有了很大的市场,而且前景仍然广阔。而Java手机是未来手机的发展方向,是业界的热点。112 手机游戏
3、概述无论在PC还是手机平台上,游戏软件总是受到热烈的欢迎。从最初的贪食蛇到如今的仙剑奇侠传手机版,手机游戏也从尝试走向了成熟。手机硬件的发展为高品质游戏的出现奠定了基础。一代代的高端手机不断突破原来的功能平台,硬件性能显然已超过了早期的微机(386时代前的计算机),智能操作系统的出现更是将手机这一载体推向了另一个高度。于是,一系列游戏精品应运而生。游戏精品为手机游戏带来了广阔的市场。手机游戏以其便携、简单、休闲等特点赢得了各个年龄段的无数爱好者。一款好的手机游戏能在几个大网站的相应版面引发热烈的讨论,其火爆程度不亚于一款PC游戏。手机游戏发展至今,其影响力已经甚为巨大。113手机游戏的特点7首
4、先,手机游戏是容易盈利的。当今影视DVD、PC软件等数字商品的正常盈利因盗版遇到重重障碍。而手机游戏虽也属数字产品,但相比于上面几种产品,已有一条成功的盈利途径,且可操作性强。那就是将游戏发布在手机可上的网络上供用户下载,酌情收费。主要有两种策略:1、一遇下载则从该用户手机费中扣除相应费用即可;2、将程序分为几段(如两个关卡为一段,或得多少分为一段),每到一段结束,即运行嵌在游戏中的续费程序,提醒用户用手机续费,否则不能继续游戏。当然,还是有很大一部分用户可以通过互联网上免费下载来获得游戏,但由于手机游戏涉及面太广,需求量巨大,单个产品又都不贵,使得这个市场商机无限。一个成功的手机游戏本身应具
5、有如下几个特点:1、易于学习: 由于手机有便携的特点,手机游戏一般是用户在工作间隙、等待期间、晚上睡前等零碎时间里方便的消遣工具,而不会花太多时间去研究。保持游戏的简单是最基本的要求。 2、可中断性: 多任务处理是手机生活方式的基本特征。一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。 3、基于订阅:手机游戏的盈利成功取决于他们巨大的使用量。基于订阅的游戏是不断产生收入的最好方法。 4、无违法内容:既然所有年龄/性别的人群都玩手机游戏并且常常在公共/工作场合,就应该避免明显的暴力或者色情内容。12 J2ME概述121 J2ME的形成11998年1月,在Sun
6、的实验室里启动了Spotless项目,以研究Java编程语言应用于资源受限的设备。Spotless项目的产品化版本就是现在众所周知的K虚拟机(K Virtual Machine ,KVM)。后来摩托罗拉、诺基亚、西门子、NTT DoCoMo和RIM等其他移动设备制造商和运营商加入到KVM开发阵营。JCP(Java Community Process)在1999年9月10月先后颁布了移动信息设备简单MIDP和互联受限设备配置CLDC两个规范,后来又陆续发布了其他一些规范,这些标准成果形成了Java平台微型版本(Java 2 Platform ,Micro Edition,J2ME)。如今J2ME
7、平台已成为最成功的手机游戏平台。因为J2ME应用在不同设备上都是便携式的,而且 Java被设计成一种安全的语言,所有字节码应用在执行之前都要校验。它的这些非常重要的特征对所有组织都有益。122 J2ME体系结构概述1J2ME所面对的是大量不同的设备,它们在外观和功能上均各不相同。J2ME在对这些设备进行分类时,将一些共性提取出来形成适合于某个范畴中设备可用的规范称为配置(Configuration),包含虚拟机和核心的类库;J2ME将某一行业或领域内设备的特性提取出来,形成简表(Profile),指的是某个行业或某个领域内特定的特性总结。J2ME分为两个配置:一个是CDC(Connected
8、Device Configuration),另一个是CLDC(Connected Limited Device Configuration)。它们所针对的设备的CPU和内存是不一样的,所以它们所使用的虚拟机和核心类库也不相同。简表面向配置之上的纵向设备,定义了配置之上受支持设备的类型。在CDC上目前定义了Foundation Profile、Personal Basis Profile等简表;在CLDC上定义了Mobile Information Device Profile(MIDP)等简表。本文要介绍的程序就是在MIDP2.0的基础上编写的。13 本章小结本章回顾了手机软件的发展,展望了其
9、广阔的前景;分析了手机游戏业务的诸多特点;介绍了J2ME的体系结构。由此描述了本论文的相关背景。第二章 开发环境搭建21 开发工具概览操作系统: Microsoft Windows XP SP2程序语言: Java 2开发工具: Java(TM) 2 Platform Standard Edition (J2sdk 1.5.0) JBuilder 2006Photoshop csMotorola SDK上述工具的安装与环境的配置很简单,且不是本文重点,故不再赘述。22 关于JDKJDK 是整个Java的核心,提供了虚拟机来运行程序。它包括了Java运行环境(Java Runtime Envir
10、nment), Java基础的类库(rt.jar),以及编译器、打包工具、文档生成器和查错工具等基本组件。不论什么Java应用服务器实质都是内置了某个版本的JDK。最主流的JDK是Sun公司发布的JDK。23 关于WTK2WTK(Wireless Tool Kit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素24 关于JBuider
11、 20063JBuilder是Borland公司开发的针对Java的开发工具,拥有众多的开发者。使用JBuilder将可以快速,有效的开发各类java应用,它使用的JDK与SUN公司标准的JDK不同,它经过了较多的修改,以便开发人员能够像开发Delphi应用那样开发java应用。JB7和JB8通过加入mobile set包并且和Nokia开发平台相集成的方法开发MIIDP程序,JB9已将JDK与WTK集成在软件中。JBuilder2006是JBuilder系列的最新版本。2. 4 关于Photoshop cs 和Motorola SDKPhotoshop在此只是一个辅助软件,不再过多介绍。它负
12、责将游戏中用到的各种图片加工并保存为PNG格式,这是手机唯一能准确识别图片的格式。Motorola SDK是摩托罗拉公司专有的SDK。在本设计中仅仅用到它的模拟器。由于手机游戏存在移植性差的特点,所以只有选择一款确定的手机,才能将游戏的画面等各项元素做到最好。本设计选用了Motorola V360i模拟器2. 5 本章小结本章针对要开发的程序介绍了相关的软硬件环境及开发工具。第三章 作品概况、结构及相关技术 31游戏特点详述1、本游戏名叫荣耀飞车,基于MIDP2.0设计开发。其中用到了Game包等MIDP2.0新增的特性。游戏实现了全新游戏、游戏帮助、游戏存储和读取、退出游戏等基本功能,还加入
13、了金钱、经验、不同的车辆等RPG元素,更有充满趣味的称号、道具等系统。这些比较复杂的系统的加入,不但使程序用到了更多的基本技术,也使得开发者更要注重各个类之间的逻辑关系,才能准确地做出相应的效果,而不只是实现一些通用的基本功能模块就能完成任务。 2、本游戏是俯视角赛车游戏,游戏中会遇见山石、河流等障碍阻止选手顺利到达终点,但用户可以依靠熟练的操作、获得的称号,以及从赛道上得到的道具来克服困难。3、菜单的实现方法放弃了相对简单的高级用户界面,采用复杂却灵活多变的低级用户界面技术。游戏中共有五个菜单,虽基本原理大同小异,但由于使用低级用户界面,使它们的外在表现丰富多彩,毫无重复之感。4、作为设计核
14、心的赛道地图采用新增GAME包中的“背景图层(TiledLayer)”和“精灵(Sprite)”技术,赛车始终在屏幕的下方,而地图自动以当前赛车速度向下滚动。在左上角可以看到车辆当前获得的道具数、生命值和速度;右上角显示剩余时间。时间耗尽或车辆生命值小于零,游戏失败。顺利冲过终点则获胜,并根据剩余的时间和生命值获得相应的金钱经验。若达到了某种条件,还能获得称号,对以后游戏有帮助。5、主菜单上的读取游戏选项可将上次存储的游戏参数读出,并继续上次的游戏。6、由于手机的资源非常有限,所以程序还要进行一些内存优化。上述各模块的算法和具体代码将在第四章详细介绍。7、J2ME参考文献很多来自各大网站。32
15、 程序详细流程程序采用面向对象的设计模式。各类是用与类名称相同的文件名存储的,且尽量用其实现的功能命名,以不致混乱。如主菜单类就用MainList命名。进入游戏后,先出现LOGO画面,显示欢迎字样和作者信息,持续三秒,然后进入主菜单。选择“全新游戏”后,填入ID,选择车辆,就进入“大厅”这个主菜单后又一重要的导航界面。可以选择“进入比赛”,选好跑道,就正式开始赛车游戏了。程序中的一个开关语句会根据用户选择的不同跑道调用不同的绘图函数,对背景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。玩家控制的赛车就运行在主线程中,随屏幕
16、刷新的频率而活动。在屏幕重绘的主程序中,将在每次的循环中判断若干事件。如:玩家控制的赛车生命值点数,玩家是否与其它图层碰撞,玩家的道具是否已使用等,由此执行相应的代码产生正确的效果。比赛一开始出现三秒倒计时,然后用户就能控制赛车移动了。胜负判定后,出现“公告板”显示本场游戏所获的金钱、经验,及得到或失去称号的提醒信息。“公告板”界面的两个软键的功能分别是保存游戏和回到“大厅”继续下一盘游戏。游戏详细流程图如下所示:(图3.1 游戏详细流程图)33 游戏相关技术331 MIDlet 2在MIDP中,应用程序称为MIDlet,因为每个MIDP应用程序都需要继承自MIDlet类。MIDlet的生命周
17、期定义了MIDlet的各种状态以及各种状态之间如何转换。它可以利用如图3.2的状态机清楚地对此进行说明。(图3.2 MIDlet状态机)MIDlet运行时,先由应用管理系统创建一个MIDlet的实例,再调用MIDlet.startApp()方法,MIDlet进入活动状态;通过调用MIDlet.pauseApp()使资源暂时可用于其他功能;应用管理系统认为不再需要MIDlet了,则通过调用MIDlet.destroyApp()销毁程序。332 Display类1图形控件都是由Display对象管理的,每一个应用程序都会访问这一对象的惟一实例。该实例可以通过静态的Display.getDispla
18、y()方法获得,该方法通常会把指向该实例的引用保存在一个成员变量里。setCurrent()方法用来为特定屏幕元素设置焦点,getCurrent()方法则用来获取元素焦点。MIDP2.0中增加了用于屏幕设置操作方法,如设置背景灯的方法flashBacklight()、设置振动的方法vibrate()等。本游戏中最常用到的是setCurrent()方法,用来将相应的类的绘图效果调出显示在屏幕上,是 切换游戏界面的重要方法。333 J2ME高级用户界面和低级用户界面用户界面(User Interface,UI)是用户与应用程序进行沟通的渠道,应用程序通过UI将自己所具有的功能,通过一定的方式呈现给
19、使用者。UI又分为高级UI和低级UI。高级UI从类库的角度讲又叫高级API,使用极其简单,只要调用类库中现成的方法,即可方便地做出列表、文本框等界面。但它有非常明显的缺陷,即表现形式不灵活,程序开发者不能精确地按自己的需要和创意来控制屏幕元素,十分死板。而游戏正是要求精确和创意,所以本程序的绝大部分界面都用低级UI来做。低级UI又叫底层API,它对图形元素定位和控制的灵活精确,以及可以获得低级输入事件的功能,得益于从Displayable类继承下来的Canvas类。Canvas提供了键盘事件,并定义了允许将键盘按键映射为游戏控制键的函数。同时Canvas类可与高级API类交互,程序可在需要时在
20、Canvas中掺入高级类的组件。本程序就在ID输入和帮助文档的显示两方面用到了高级类组件。类Graphics提供了相应的在Canvas上2D绘图的能力。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。图像绘制的最终位置由Graphics对象的来源决定。有一个比方,Canvas类相当于画布,Graphics类相当于画笔。Graphics对象的绘制目标包括用户设备显示屏和屏幕外图形缓冲区,在Canvas类中定义的paint()方法,是Graphics对象能够获取绘制画布屏幕目标的唯一方式,并且应用程序只能有paint()方法的运行期间使用这个Graphics对象并绘制图形;Im
21、age对象也可以用作Graphics对象的绘制目标,通过调用这个用作缓冲图象的getGraphics方法来获得绘制的Graphics对象。Graphics类中有很多绘制图形或文本的方法,具体用法在API中有规范,文献1、2、4、5、6和9中有侧重点不同的介绍。334 MIDP 2.0 新增Game包1 5在MIDP 1.0中,游戏开发者只能使用Canvas进行游戏编程。尽管Canvas为游戏开发者提供了各种灵活的界面控制API,开发者的游戏程序设计仍是一个很复杂的工作,对开发者的时间和精力都是极大的浪费。MIDP2.0新增的Game API包括5个类:GameCanvas类,Sprite类,L
22、ayer类,TiledLayer类和LayerManager类。用它们可以省去了开发者们许多不必要的麻烦。上述几个新类本程序中均有用到。GameCanvas类提供游戏基础用户界面,它与Canvas类相比有两点不同:拥有屏幕缓冲和可以直接得到设备键盘的物理状态。Sprite类是Layer类的一个子类,主要用于设计能够独立移动的物体。Sprite类实现的功能类似于电影的胶片功能,它们都是由一幅幅小的图片组合而成。一幅图片称为一帧(frame)。用到时只需指定相应的帧或帧序列,即可将图像或动画在屏幕上绘成。TiledLayer类是Layer类的另一个子类。使用时将源图像分割成大小相等的子图片,将游戏
23、画面分割成大小相同的网格。设计好地图后,在每个网格中填上相应的子图片,即可绘成各种各样的不同地图。LayerManager类提供控制整体画面层的控制。它包括了一系列自动获取了代号和位置的层,简化了各层加入游戏画面的过程,提供了自动排序和绘制的能力。LayerManager存储了一个层的列表,新的层可以用append函数附加、删除和插入。LayerManager中可调用setViewWindow()方法来改变View Window的位置,制造出滚动屏幕的效果。这里只介绍了新增Game包中各类的基本理论,它们在本游戏中的应用详见第四章第四节。335 永久存储系统2在MIDP中,定义了一种面向记录的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于J2ME MIDP2.0的手机游戏的开发与实现 基于 J2ME MIDP2 手机 游戏 开发 实现
限制150内