1、上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 I 摘 要 Java 良好的跨平台特性在移动平台的开发中显示出了巨大的威力。 Java 语言面向对象的优势也使得开发游戏变得非常容易。 随着手机的日益普及、 Java 功能在移动设备上的实现, Java 应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于 J2ME 技术的应用,开发一款可商用的手机游戏程序 坦克大战。本程序的界面和运作方式继承于日本任天堂公司在 20 世纪 80 年代开发的 Battle City 游戏,将老少皆宜的经典作品移植到手机上来,为
2、更流行的硬件 平台提供应用软件。 本论文介绍了任天堂红白机的软硬件特性、 J2ME 的相关技术及本程序的结构分析和具体功能的实现。 关键字 : J2ME,手机游戏, Java,坦克大战 ABSTRACT Java has an advantage of running in different platforms that shows its power in developing for the mobile device. The advantage of object-oriented of Java makes development of games easily. When cel
3、l phone is getting ever more popular nowadays, with the implementation of Java technology on mobile equipment, increment of capital on communication service exhibits its force on peoples everyday life, providing them ever fast information just in hand. This dissertation focuses on implementation of
4、J2ME technology and has developed a commercial game suite run on mobile phones Tank. This application inherits many characters of the old fashioned game Battle City which developed by Nintendo in 1980s. It transports the classical product to mobile phones, offering corresponding software for such mo
5、re popular hardware platform. This dissertation introduces the characteristic of Nintendo FC machine and its software, J2ME and its relative technology as well as this programs structure and analysis of implementation in details. Keywords: J2ME, mobile game, Java, tank, Battle City. 上海交通大学本科生学士 学位论文
6、 基于 J2ME 的 Java 游戏开发 II 引 言 自从 Java问世以来 ,Sun公司已经成功的将 Java平台技术推广到台式计算机与服务器。随着移动电话及 PDA 的日益普及 ,Sun 更致力于将 Java 技术向移动设备这个方向发展 . Sun 在 1999 年 6月时推出了 Java 2 袖珍版 (J2ME)来满足消费电子和嵌入设备的需要。 J2ME 是为了那些使用有限的能源、有限的网络连接 (常常是无线连接 )以及有限图形用户界面能力的设备开发的。它最初的目标是 16 位或 32 位处理器, 16 MHz时钟频率, 512K 或更少内存的设备。 近几年,由于微处理器性能的大幅提升
7、 ,加上无线通讯技术的突破,手持式移动设备开始受到大众的青睐。短短几年内,手机已经升级了几代产品,普及率逐年攀升,生产效率不断上升,产品价格比个人电脑的摩尔定律有更惊人的下调,以至手机是大多是城市居民不可缺少的一件随身设备。继短信、彩信等服务之后,中国移动提供基于 Java 的百宝箱业务,应用产品遍及商务应用、信息获取、英汉互译、游戏娱乐等多媒体领域。 根据官方公布的统计数据,我国移动电话用户已突破 3 亿。依托这样的市场,一旦无线 Java 应用大规模开展起来,将会创造出比短信业务更为惊人的利润 。 Java 语言原先的开发目 的与市场的需求不谋而合,并且也已经成为手机应用程序开发的标准,国
8、际大公司如 Nokia、 Motorola及 Siemens 等所设计的手机内都加入 Java 程序的支持,可见在不久的将来, Java将会成为移动设备上最热门的语言。 手机中将 Java 语言引入,作为一种通用的开发标准,并将向市场推广普及仅仅短短几年, J2ME 仍是一种新型的技术,中文资料除台湾出版过相关书籍外,国内相关介绍资源很有限,国内 J2ME开发商也屈指可数,名声较响的 Digital-Red公司也仅成立于 1999 年。本文可算是对新技术的一些尝试,代表对无 线平台应用程序推广的一些努力。 本论文中 : 第一章 介绍游戏机软硬件历史、 Java 语言、 J2ME 及其相关技术;
9、 第二章 介绍了开发工具和相关软硬件环境的背景; 第三章 分析该作品设计的思想和流程,介绍总体结构; 第四章 并详细阐述有关重点实现细节; 第五章 提及了开发过程、心得体会、经验和感想。上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 - 1 - 目 录 摘 要 .- I - Abstract .- I - 引 言 . - 2 - 第一章 绪 论 . - 3 - 1.1 手机软件现状 . - 3 - 1.2 游戏业务及 J2ME 概况 . - 3 - 1.3 任天堂 (Nintendo)的 8位 FC 机器和 Battle City 背景介绍 . - 5 - 1.4 本
10、章小结 . - 5 - 第二章 开发环境及相关技术的介绍 . - 6 - 2.1 开发环境 . - 6 - 2.2 Java 语言的特点 . - 6 - 2.3 关于 JBuilder9. - 6 - 2.4 关于 Wireless Tool Kit. - 7 - 2.5 Java Appication Manager. - 7 - 2.6 本章小结 . - 7 - 第三章 程序结构、思想和相关技术 . - 8 - 3.1 本程序需解决的有关技术问题 . - 8 - 3.2 程序流程 . - 9 - 3.3 绘图与 MIDP2.0 新增的 GameCanvas 包 . - 11 - 3.3.1
11、 提供低级绘制的 Canvas 类 . - 11 - 3.3.2 Graphics 类 . - 11 - 3.3.3 PNG 格式 . - 11 - 3.3.4 Game 包中的新功能 . - 12 - 3.3.5 有关绘图的一些技术 . - 13 - 3.4 坦克的控制和敌方的智能运行 . - 13 - 3.5 子弹的运行和控制 . - 14 - 3.6 RMS 数据库系统 . - 15 - 3.7 内存使用的最佳化 . - 16 - 3.8 混淆器 (Obfuscator)的使用 . - 17 - 3.9 模拟器的相关调试 . - 17 - 3.10 本章小结 . - 18 - 第四章 程
12、序分析和具体实现 . - 19 - 4.1 游戏进入前的选择 . - 19 - 4.2 主游戏逻辑及其涉及到的若干类 . - 20 - 4.3 坦克的共同行为 . - 22 - 4.4 玩家坦克的功能属性 . - 23 - 4.5 敌人坦克的功能属性 . - 23 - 4.6 子弹的运行和控制 . - 25 - 4.7 记分系统 . - 26 - 上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 - 2 - 4.8 本章小结 . - 28 - 第五章 总 结 . - 29 - 5.1 本程序的总结和展望 . - 29 - 5.2 经验和感想 . - 29 - 致 谢 .
13、 - 31 - 参考文献 . - 32 - 上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 - 3 - 第一章 绪 论 1.1 手机软件现状 在信息社会中,手机及其他无线设备越 来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端: 1. 传统手机 出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。 2. 传统手机访问互联网是通过 WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、
14、费用亦很高。 而 Java 技术在无线应用方面的优势非常明显: 1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。 2. Java 技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面 (GUI); 3. Java 技术使 网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。 基于以上分析, Java 手机将是未来手机的发展方向,是业界的热点。 1.2 游戏业务 及 J2ME 概况 虽然 Java 已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。 Java 平台演进到 Jav
15、a2后, Java 平台分别针对不同领域的需求被分成四个版本,亦即 J2EE、 J2SE、 J2ME 以及JavaCard(其结构示意图见图 1-1)。其中 J2ME定位在消费性电子产品的应用上。这 个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,会是未来 Java 平台发展的重点项目。 J2ME 在设计其规格的时候,遵循着“对 各种不同的装置而造出一个单 一的开发系统是没有意义的事” 这个基本原则。于 是 J2ME 先将所有的嵌入式装置大体上区分为两种 : 一种是运算功能有限、电力供应也有限的嵌入式装置
16、 (比方说 PDA 、手机 );另外一种则是运算能力相对较佳、 在电力供应上相对比较充足的嵌入式装置 (比方说冷气机、电冰箱、电视机上盒 (set-top box)。因为这两种型态的嵌入式装置,所以 Java 引入了一个叫做 Configuration 的概念,把上述运算功能有限、电力有限的嵌入式装置定义在 Connected Limited Device 图 1-1 Java 平台的结构 上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 - 4 - Configuration(CLDC)规格之中;而另外一种装置则规范为 Connected Device Configu
17、ration(CDC)规格。也就是说, J2ME 先把所有的嵌入式装置利用Configuration 的概念区隔成两种抽象的型态。 J2ME 平台被认为是最杰出的手机游戏平台,它 为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益。 因为 J2ME 应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。如果没有正确的防范,它则为用户和无线通信公司冒着无数个安全的风险。幸运的是, Java 被设计成一种安全的语言。所有字节码应用在执行之前都要校验; JVM 在执行过程中监督应用的安全性和存储违反问题。 MIDP v2 运行时间包括一个完全特征化的、基
18、于域的安全管理员,它在应用的数字签名者鉴别的基础上赋予应用 API 级许可。 纵观 IT 产业的历史, 就像军事的发展 时常推动计算机的演化一样, 计算机游戏已经成为技术创新背后的动力之一。计算机游戏者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制 无论是将图形强制在人工智能( AI)上 还是网络安全性。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品 游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。 手机游戏的盈利主要是由于它们的涉及面很广。手机已经与现代生活方式紧紧地结合在一起。他们是最普遍携带的个人用品中仅次于
19、钥匙和钱包的东西。传统的台式机游 戏将目标锁定在低级趣味的人和青少年身上,而手机游戏则每个人都可以访问的到 随时,随地。尽管每个手机游戏都不贵,但是巨大的使用量(如:每人每星期一个新游戏)将使得这个市场商机无限。但是,对于开发者来说,将控制台游戏迁移到手机游戏工程很大 。 因为他们所面向的对象、生活方式和分布式模型都有着极大的区别。 一个成功的手机游戏大多具有以下特征: 易于学习 : 既然手机游戏面向的是普通消费者而不是计算机专家 ,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个 3 元的手动操作的游戏。保持游戏的简单是最基本的 要求。 可中断性 : 多任务处理是手机生活方式
20、的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。 基于订阅:手机游戏的盈利成功取决于他们巨大的使用量。 一开始开发和设计每个游戏都是昂贵的。如果一个手机游戏开发者要赢利 的话,重要的是:同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。 丰富的社会交互 : 不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游上海交通大学本科生
21、学士 学位论文 基于 J2ME 的 Java 游戏开发 - 5 - 戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。 利用手机技术的优点: 巨额的手机技术研发费用都花在提高设备和网络的可用性和可靠性上面。因此,手机设备硬件和网络协议与桌面 /控制台世界(如全球定位系统 (GPS)扩展、条形码扫描仪、和短消息服务 (SMS)/多媒体信息服务(MMS)通讯)有着非常大的差别。好的手机游戏应该 利用那些更新的设备特征和网络基础设备的优点。 无违法内容:既然所有年龄 /性别的人群都玩手机游戏并且常常在公共 /工作场合,就 应该避免
22、明显的暴力或者色情内容。 1.3 任天堂 (Nintendo)的 8位 FC 机器和 Battle City 背景介绍 FC(Family Computer)主机在欧美又称 Nintendo Entertainment System(可译作任天堂娱乐平台即 NES)。 FC 主机在游戏业界造成的巨大冲击众所周知,这款主机在当时事实上几乎占领了世界各地多个国家的整个游戏市场,并使得逐 渐 没落的北美游戏市场再度复苏。这款主机的性能比当时的多数主机都要强大,而价格上却便宜得多。主机所采用得处理器为 CMOS 6502,一款已经淘汰的 70 年代中期产品。由于其价格便宜且极易使用,经过任天堂的改造后
23、又焕发了全新活力。 6502 芯片 cpu 主频 为 8 bit,12 MHz, 内存 8k, 画面 52 色 , 同屏最多显示其中的 13 色 , 声音 2 个矩波 ,1个三角波, 1个杂音, 1 个 PCM 音频 (见图 1-2)。 Battle City 是其发售卡带中的一款力作 ,设置了 35 个关卡, 可以双人操纵,画面设置了若干种类的建筑物和阻挡物 ,以消灭所有敌人为通关条件,并有接宝物等增加游戏效果的设置, 画面精美,音效杰出, 在 PC机的 80386 处理器仍未面世的当时,能在硬件上运行这样的 2D 程序不得不 令人惊叹,难怪常有人说游戏 程序 是最大限度发挥硬件水平的载体。
24、 其游戏界面如图 1-3所示。 1.4 本章小结 : 引言和第一章中介绍了手机在无线应用方向的当今概况,并介绍了游戏业务在当前社会的发展潜力。分析了 J2ME 在手机软件开发中起的重要作用,描述了本论文的相关背景。 图 1-2 80 年代中期的 FC 机器 图 1-3 Battle City 的界面 上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 - 6 - 第二章 开发环境及相关技术的介绍 2.1 开发环境 操作系统: Microsoft Windows XP 程序语言: Java 2 开发包: Java(TM) 2 Standard Edition (build
25、1.4.1_02-b06) Sun Micro. J2ME Wireless Tool Kit 2.1 IDE: Borland Jbuilder 9 2.2 Java 语言的特点 1. 平台无关性 Java 引进虚拟机原理,并运行于虚拟机,实现不同平台之间的 Java 接口。使用 Java 编写的程序能在世界范围内共享。 Java 的数据类型与机器无关。 2. 安全性 Java 的编程类似 C+,但舍弃了 C+的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。 3. 面向对象 Java 吸收了 C+面向对象
26、的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。 4. 分布式 Java 建立在 TCP/IP 网络平台上,提供了用 HTTP 和 FTP 协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。 5. 健壮性 Java 致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。 Java 取消了 C语言的结构、指针、 #define 语句、多重继承、goto 语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。 2.3 关于 JBuilder9 JBuilder 是目前最好的 Ja
27、va 开发工具之一,在协同管理、对 J2EE 和 XML的支持等方面均走在其他产品的前面。 JBuilder 是遵循 Sun 公司 J2EE 标准的可视化集成开发工具。 Jbuilder 是一种处于市场领先地位的跨平台环境, 主要用于构建具有行业实力的企业 Java 应用程序。 JBuilder 集成了 Borland 公司开发工具系列的优秀特性,使得使用过 C+Builder,Delphi 的程序员很容易的过度到上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 - 7 - JBuilder 的开发环境当中。 由于 Java 技术的发展迅速,经常有新的组件推出或新的错误
28、修正,致使 JBuilder 的版本升级很快。当两年前还是 JBuilder6 时,现今已推出了 9、 10 的版本。 2.4 关于 Wireless Tool Kit WTK(Wireless Tool Kit)是 Sun 公司针对 J2ME 推出的用 于手机和 Palm 等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。 虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件 ,是其他 IDE 需集成采用的 必备元素。 2.5 Java Appication Mana
29、ger 手机中负责调配程序运行资源的管理后台是 Java Application Manager。它 所使用的 传输媒体 可以是 红外线 、 网络、以及其他可用来传输 的 媒体 。 Java Application Manager 会 从网络 上 下载 代表 该 Application Suite 的 JAR 档 ,接 着 在手 机 上安裝此 MIDlet Suite, 然后 在手 机开 始 执行该应用程序 。整 个详细 的 运作 流程如 图 2-1 所示 。2.6 本章小结 : 第二章介绍了 Java 语言的特点、本程序的开发环境及其相关工具的原理和使用。 存储 媒体 手机 内建浏览器 Ja
30、va Appication Manager KVM 描述档 图示档 JAR 档 Java Servlet HTML 网页 6安装应用程序 8载入并执行应用程序 使用者手机 网站 4.选择应用程序 7.启动 网络 1浏览网页 2.浏览描述档 3.浏览图示 5.下载图示和 JAR 档 图 2-1 JAM 工作流程图 上海交通大学本科生学士 学位论文 基于 J2ME 的 Java 游戏开发 - 8 - 第三章 程序结构、思想和相关技术 3.1 本程序需解决的有关技术问题 1. 游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高 。一个实时运行的 最终作品,每秒都会运行成千上万行程序,绘图事件
31、、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。 因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。 2. 游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在 MIDP2.0 中提供了用于增强游戏功能的 game 包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。 3. 己方坦克的运行可以通过键盘响应事件控制,但敌 方则因为是自动运行,就需要有一定其一定的智能性;同时,出现在屏幕上的敌方可能会有较多的数量,这需要为每个敌方开辟一个线程以便能让其独立运行。
32、Java 的多线程能力为实现这样的游戏提供了可能。 敌人坦克的运行算法也需要进行适当的设置,以免游戏过于简单,单调。 4. 对于双方坦克发出的子弹的控制也需要 对其跟踪控制,子弹也需要处在独立的线程中。敌方子弹仅需要扫描用户坦克,而用户坦克需要在每一步扫描所有的敌方坦克。这需要对所有的对象有较好的控制。 另外,子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界。如 此过多的线程同时在本来效率就不高的 KVM 虚拟机上运行,也许会导致程序的缓慢。 5. 双方的坦克在前进时也需要考虑到是否碰撞到相关物体或对方坦克,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。每一次刷新页面、每
33、前进一步都需要将所有的周围环境都进行扫描。 6. 游戏的结束、开始、动态信息画面作为构成一个完美程序都是必不可少的重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图也需要有一定的考虑。 7. 游戏的地图不可能通过绘图来解决。否则,不仅难于控制和处理过多的元素,也会因过多的大型图片 而不能限制程序的大小,失去手机上程序的原则和Java 的优势。 同时,地图关卡不宜保存在手机有限的内存中,而最好采取外部文件的读入读出方法。 8. 用户运行游戏时需要有分数记录的可能。如何采用合理的记分标准,需要进行适当的设计。记录分数的存储方式也需要有较好的解决方案。手机中由于处理器和内存空间、存储空间都十分有限,其数据库系统与普通 PC 大相径庭。其数据库结构较为简单,被称之为 RMS 系统。 9. Java 是基于虚拟机的半解释型编译系统,其执行效率较 C+等完全编译