




已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 1 页 基于基于 GUI 的手机游戏开发的手机游戏开发 摘摘 要 要 这款游戏的名字叫 大富翁 J2ME Java 2 Micro Edition 是近年来随着各 种不同设备 尤其是移动通信设备的飞速发展而诞生的一项新的开发技术 它定位在消 费性电子产品的应用上 对设备的智能化 多样化 提供了革命性的解决方案 并因其 Write Once run anywhere 的 Java 特性而提高开发的效率 随着手机的日益普及 Java 功能在移动设备上的实现 Java 应用程序产生的手机增 值服务逐渐体现出其影响力 对丰富人们的生活内容 提供快捷的资讯起着不可忽视的 作用 本论文着眼于 J2ME 技术的应用 开发一款可商用的手机游戏程序 本程序将老少 皆宜的经典作品移植到手机上来 为更流行的硬件平台提供应用软件 本论文介绍了 J2ME 的相关技术及本程序的结构分析和具体功能的实现 关键字关键字 J2ME 手机游戏 Java Abstract The game is called the Monopoly J2ME Java 2 Micro Edition in recent years with various equipment particularly mobile communications equipment and the rapid development of the birth of a new development technology It positioning in consumer electronics applications the equipment intelligent diversified providing a revolutionary solution and because of Write Once run anywhere of the Java development and improve the efficiency With the growing popularity of mobile phones Java features on mobile devices the realization Java application of the mobile phone value added services gradually reflect their influence to enrich people s lives to provide fast information can not be ignored to play the role The papers focus on J2ME technology applications the development of a commercial mobile phone can Games This procedure will be the classic works of all ages migrate to the phone line for the more popular hardware platform to provide application software This paper introduced the J2ME technology and the process of structural analysis and specific functions can be achieved Keyword J2ME mobile phone games Java 第 2 页 目 录 第一章 绪论 3 1 1 课题的研究背景与意义 3 1 2JAVA语言的特点和及其与游戏的结合 4 1 2 1 J2ME 介绍 4 1 2 2 Java 语言的特点 5 1 2 3 Java 与网络的结合 6 1 3 手机游戏应具有的特征 7 1 4 需求分析 8 1 4 1 系统初步分析 8 1 4 1 1 用户需求分析 8 1 4 1 2 功能需求分析 9 1 4 1 3 系统的可靠性和可用性需求分析 9 1 4 2 数据流分析 10 1 5 本章小结 10 第二章 开发环境及相关技术的介绍 10 2 1 开发环境 10 2 2 JAVA语言特点 11 2 3 关于 ECLIPSE 11 2 4 关于 WIRELESS TOOL KIT 12 2 5 JAVA APPICATION MANAGER 12 2 6 本章小结 12 第三章 程序结构 思想和相关技术 12 3 1 本程序需要解决的主要技术问题 12 3 2 程序流程 13 3 3 CANVAS类 14 3 4 GRAPHICS类 15 3 5 MIDP1 0 技术下的绘制背景技术 15 3 6 MIDP2 0 新增的 GAMECANVAS包 15 3 7 PNG 图片格式 16 3 8 内存的优化 17 3 9 内存检测器 17 3 10 关于混淆器 17 3 11 本章小结 18 第四章 程序分析和具体实现 18 4 1 游戏进入前的选择 18 4 2 MYBULLETS类 20 4 3 游戏逻辑及GAMESCREEN类 20 4 3 1 gameScreen 类所实现的功能 20 4 3 2 地图的创建 20 4 3 3 地图的移动 21 4 3 4 gameScreen 类的构造函数 21 第 3 页 4 3 5 关于 commandAction 方法 22 4 4 详细设计 22 4 4 1 Player 类的设计与实现 22 4 4 2 Statistic 类的设计与实现 24 4 5 本地翻译包的设计 24 4 5 1 TranslationBoudle 类的设计与实现 25 4 5 2 MapTranslator 类的设计与实现 26 4 6 网络包的设计 29 4 7 人工智能包的设计 34 4 8 其他工具类的设计 37 第五章 测试 42 5 1 打包测试的过程 42 5 2 发现的 BUG 及解决情况 44 5 3 未完善的功能 44 第六章 总 结 45 6 1 本程序的总结和展望 45 6 2 感想 45 致 谢 46 参考文献 47 附录一 代码 48 附录二 操作说明 49 附录三 英文文献及其译文 50 第 4 页 第一章第一章 绪论绪论 1 1 课题的研究背景与意义课题的研究背景与意义 随着计算机日益普及 计算机已然成为人们日常生活的一部分的今天 计算机游戏 也越来越成为人们生活中不可或缺的元素 游戏可以简单地理解为调节人们生活节奏和 缓解人们生活压力的一种手段 现在理解的游戏基本意义都是娱乐性质较浓 要有特定 的行为模式 遵循一定规则以达到游戏者目的的行动 游戏的最初目的就是让游戏者 玩家 在游戏中得到放松 游戏一直存在于人类活动中 如今定义的游戏从早期的猜 谜游戏 发展到如今的单机 RPG 游戏 网络游戏等 已经升华为更高级别意义上的娱乐 活动 对人们的感官刺激也越发强烈 得到的乐趣也更多 而对于编写游戏而言 Java 终于变得足够成熟了 Java 的语言特性和其与游戏的结合请见下一小节 它现在是一种 开发能够在多种平台上运行的中小型游戏的很好的方式 此外 Java 支持和其他的库一 起工作 而且它的速度变得越来越快 Java 并不是以游戏编程为目的而被开发的 事实 上 游戏编程可能是 Java 创造者心中的最后一个目标 在过去 妨碍 Java 发展的是它 的运行环境 浏览器和 Java 类库一起从本质上决定了 Java 应该用来写哪种类型的应用 程序 而高速的游戏和图象则不在其中 这给 Java 带来了不好的影响 因为人们注意的 不是语言 而是它的运行环境 现在 浏览器已经不能控制一切了 Java 作为游戏编程 语言的另一个机会到来了 Java 在过去有一点超前于它的时代 当时市场的动力落后于 Java 但是现在 Java 可以而且已经取得成功 据悉 中国民族网络游戏出版工程将在 5 年内出版 100 种大型民族网络游戏 总投 资预计超过 3 亿元 信息产业部已将网络游戏通用引擎研究及示范产品纳入国家 863 计 划 这是中国首次将网络游戏技术纳入国家科技计划 文化部也向国内 12 家在网络游 戏业的实力厂商首批颁发了 网络文化经营许可证 加大对网络游戏的监管力度 进口 游戏审查制 限制国内对国外的受理措施 科技部制定科技发展规划 将把网络游戏纳 入现代服务业并加以扶持 政府态度和政策都是一种信号 表明 2005 年对本土网络游戏 的扶持力度将加大 国内游戏厂商将可获得发展的核心技术平台 政策有利于保护中国 游戏软件的自主知识产权 这为网络游戏发展创造了良好的政策环境 而 Java 的创建者把 Java 称为 网络编程语言 且由于 JAVA 游戏一般来说简单有 趣 并且对用户硬件要求极小 所以 JAVA 游戏通常对 85 的计算机用户都有吸引力 第 5 页 1 2Java 语言的特点和及其与游戏的结合语言的特点和及其与游戏的结合 1 2 1 J2ME 介绍介绍 虽然 Java 已经被用到许多企业级软体上 可是其实骨子里面还是非常适合用在嵌 入式系统之中 Java 平台演进到 Java2 后 Java 平台分别针对不同领域的需求被分成四 个版本 亦即 J2EE J2SE J2ME 以及 JavaCard 其中 J2ME 定位在消费性电子产品的应 用上 这个版本针对资源有限的电子消费产品的需求精简核心类库 并提供了模块化的 架构让不同类型产品能够随时增加支持的能力 这个版本的应用层面相当广泛 会是未 来 Java 平台发展的重点项目 J2ME 在 1999 年的 JavaOne 开发人员大会上初次亮相 它的目标是面向智能无线设备 和小型计算机设备的开发人员 J2ME 的一个关键优点是 J2ME 与所有支持 Java 的设备 都是兼容的 支持 Java 的设备就是任何运行 Java 虚拟机器的计算机 Motorola Nokia 等生产厂商都生产支持 Java 的设备 J2ME 平台是由配置 Configuration 和简表 Profile 构成的 配置是提供给最 大范围设备使用的最小类库集合 在配置中同时包含 Java 虚拟机 简表是针对一系列设 备 提供的开发包集合 在 J2ME 中还有一个重要的概念是可选包 Optional Package 它 是针对特定设备提供的类库 比如某些设备是支持蓝牙的 针对此功能 J2ME 中制定了 JSR82 Bluetooth API 提供了对蓝牙的支持 目前 J2ME 中有两个最主要的配置 分别是 Connected Limited Devices Configuration CLDC 和 Connected Devices Configuration CDC 作为第一个面对小型设备的 Java 应用开发规范 CLDC 是由包括 Nokia Motorola 和 Siemens 在内的 18 家全球知名公司共同协商完成的 CLDC 是 J2ME 核心配置中的一个 可以支持一个或多个 profile 其目标主要面向小型的 网络连接速度慢 能源有限 主 要是电池供电 且资源有限的设备 如手机 PDA 等 而 CDC 则是主要用于运算能力相对较佳 在电力供应上相对比较充足的嵌入式装置 比方说冷气机 电冰箱 电视机机顶盒 set top box 1 2 2 Java 语言的特点语言的特点 Java 能够取得如此的成功 是因为它在设计时的目标就定位在要解决当今程序员们 第 6 页 所面临的众多问题 Java 的基本目标之一就是要提高生产率 生产率来源于许多方面 但是 Java 希望在语言方面相对于它的前辈有明显的提高 从而为程序员提供更大的便利 1 系统易于表达 易于理解 被设计用来适应问题的 类 在表达问题的能力上显得更强 这意味着当你编写代 码时 你是在用问题空间的术语 而不是计算机 也就是解空间 的术语 来描述 解决方案 可以用更高层的概念来处理问题 并且只用一行代码就可以做更多的事 易于表达所带来的另一个好处就是易于维护 维护在程序生命周期中所占的成本比 例极大 如果程序易于理解 那么他必定易于维护 同时 这也降低了创建和维护文档 的费用 2 类库的巨大影响力 创建程序最快捷的方式就是使用已经编写好的代码 类库 Java 的主要目标之一就 是要使类库更易于使用 这是通过将类库转型为新的数据类型来实现的 因此 引入类 库意味着在语言中添加了新的数据类型 因为 Java 编译器会照管类库的使用方式 确 保正确地初始化和回收垃圾 并保证其他方法被正确地调用 因此 你只需专注于你想 让类库做些什么 而不必关心应如何去做 3 错误处理 在 C 语言中 错误处理一直是一个声名狼籍的问题 而且经常被忽视 经常只能 靠上帝保佑了 如果你在构建一个大型的 复杂的程序 那么没有什么比在程序某处暗 藏了一个错误 而你却没有任何能够暗示它在何处的线索更糟糕的事情了 Java 异常处 理便是一种能够确保错误必须被报告 而且对此必须有所响应的机制 4 大型程序设计 许多传统语言在程序大小和复杂度方面都有内置的限制 例如 BASIC 可能对某类问 题的解决能力非常强 可以快速地创建解决方案 但是如果程序长度超过数页 或者超 出该语言正常的题域之外 它就会像 在非常粘稠的液体中游泳 它没有明确的界线来 表示何时你所使用的语言会导致最终的失败 即使有这样的界线 你也会忽视它 你总 不能说 我的 BASIC 程序太大了 我不得不用 C 来重写它 相反 你会试着将几行 代码硬塞进去 以便在程序中增加新功能 因此 不知不觉中 你就付出了额外的开销 Java 具备编写大型程序的能力 也就是说 它消除了小型程序和大型程序之间的 复杂度界线 在编写 hello world 风格的小应用程序时 你当然不必使用 OOP 但是 第 7 页 当你需要用到时 这些功能随手可得 而且 对小型程序和大型程序 编译器都会一视 同仁地 积极地找出因 bug 而产生的错误 1 2 3 Java 与网络的结合与网络的结合 Java 不仅是一种功能强大的 安全的 跨平台的 国际化的编程语言 而且它还在 不断地被扩展 以提供更多的 语言功能和类库 能够优雅地处理在传统编程语言中很难 解决的问题 例如线程 数据库访问 网络编程和分部式计算 Java 是通过 applet 以及使 用 Java Web Start 来进行客户端编程的 Applet 是只在 Web 浏览中器运行的小程序 它是作为网页的一部分而自动下载的 当 applet 被激活时 它便开始执行一个程序 这正是它优雅之处 它提供一种分发软件的 方法 一旦用户需要客户端软件时 就自动从服务器把客户端软件分发给用户 用户获 取最新版本的客户端软件时不会产生错误 而且也不需要很麻烦的重新安装过程 Java 的这种设计方式 使得程序员只需创建单一的程序 而只要一台计算机有浏览器 且浏 览器具有内置的 Java 解释器 那么这个程序就可以自动在这台计算机上运行 由于 Java 是一种成熟的编程语言 所以在提出对服务器的请求之前和之后 可以在客户端尽可能 多地多做些事情 例如 不必跨网络地发送一张请求表单来检查自己是否填写了错误的 日期或其他参数 客户端计算机就可以快速地标出错误数据 而不用等待服务器作出标 记并给你传回图片 这不仅立即就获得了高速度和快速的响应能力 而且也降低了网络 流量和服务器负载 从而不会使整个 Internet 的速度都慢下来 Java applet 胜过脚本语言程序的优势之一就是 它是以被编译过的形式存在的 因此 其源代码对客户端来说是不可见的 另一方面 虽然反编译 Java applet 并不需要花费多 少力气 但是隐藏你的代码通常并不是一个重要的话题 有另外两个因素很重要 如果 编译过的 applet 很大的话 那么就需要额外的时间去下载它 脚本语言程序只是被作为 Web 页面的一部分文本而集成到了 Web 页面中 这对 Web 网站的响应能力来说很重要 另一个因素是非常重要的 学习曲线 问题 如果你是一个 Visual BASIC 程序员 那么 转而学习 VBScript 可能是最快的解决方案 而且由于它或许能够解决大多数典型的客户 服务器问题 所以你可能很难对学习 Java 报以公正的态度 如果你已经对脚本语言很有 经验了 那么你在考虑使用 Java 之前 应该先看看 JavaScript 是否满足你的要求 这样对 你会很有好处 因为它们能够更方便地满足你的要求 而且使你更具生产力 Java 引起人们的注意很大程度上始于 applet Java 确实是一种通用的编程语言 至少 第 8 页 在理论上可以解决各种其他语言能够解决的问题 正像前面指出的那样 可能存在其他 更有效的方式去解决客户 服务器问题 当你离开 applet 的竞技场时 你便步入了通用应 用系统的世界 这里的系统都是独立运行的 不需要浏览器 就像其他普通程序一样 在这里 Java 的威力不仅在于它的可移植性 还包括它的可编程性 Java 已经具备了许 多功能 让你创建健壮的程序 而花费的时间比使用 Java 之前的任何编程语言都更少 不过 这是好坏参半的事 为 Java 带来的改进 所付出的代价是降低了执行速度 像任何语言一样 Java 也具有不适合解决某类问题的天生的限制 然而 Java 是快速进 化的语言 而且每当发布一个新版本时 它都会因为能够解决更多的问题而变得越来越 具有吸引力 1 3 手机游戏应具有的特征手机游戏应具有的特征 一个手机游戏应该具有以下特征 易于学习 既然手机游戏面向的是普通消费者而不是计算机专家 那么他们不可能 深入的学习游戏技巧 消费者不会花几个小时去研究一个 3 元的手动操作的游戏 保持 游戏的简单是最基本的要求 可中断性 多任务处理是手机生活方式的基本特征 手机用户常常在任务 如等一 个电子邮件或者等车 之间有一小段时间 而游戏 日历管理 通讯和工作数据访问使 用的是同一个设备 所以一个好的手机游戏应该提供短时间的娱乐功能 并且允许用户 在游戏和工作模式之间顺利切换 基于订阅 手机游戏的盈利成功取决于他们巨大的使用量 一开始开发和设计每个 游戏都是昂贵的 如果一个手机游戏开发者要赢利的话 重要的是 同一个游戏引擎 多个标题 基本的故事情节类似 基于订阅的游戏是不断产生收入的最好方法 丰富的社会交互 不管一个游戏设计得多好 只要玩家找到了它的根本模式或者玩 完了所有的游戏路径很快就会厌烦这个游戏 对于一个基于订阅的游戏 重要的是与别 的玩家合作以增强所玩游戏的智力和随机性 在今天纷繁复杂的多玩家游戏中具有丰富 社会交互的游戏证明是成功的 利用手机技术的优点 巨额的手机技术研发费用都花在提高设备和网络的可用性和 可靠性上面 因此 手机设备硬件和网络协议与桌面 控制台世界 如全球定位系统 GPS 扩 展 条形码扫描仪 和短消息服务 SMS 多媒体信息服务 MMS 通讯 有着非常大的差别 好的手机游戏应该利用那些更新的设备特征和网络基础设备的优点 第 9 页 1 4 需求分析需求分析 所谓系统分析 就是指在整个系统开发工程中 解决 做什么 的问题 把要解决 哪些问题 满足用户哪些具体的信息需求调查分析清楚 从逻辑上或是说从信息处理的 功能需求上提出系统的方案 即逻辑模型 为下一阶段进行物理方案设计 解决怎么办 提供依据 1 4 1 系统初步分析系统初步分析 1 4 1 11 4 1 1 用户需求分析用户需求分析 随着 Internet 的发展 进入信息时代后快速获得网络共享资源成为很简单的事情 人 们对互联网也有了很大的依赖性 网络的普及化使得原本单人的游戏已经不能适应人们 的需要 广大的游戏者迫切需要能够和身在异地的朋友一起享受游戏的乐趣 在这种环 境下 网络游戏应运而生 越来越多的游戏者投身到网络游戏中 这样带来的问题自然 成为越来越多的游戏研究者将研究方向转为网络游戏的研究 据目前的网络游戏的调研来看 以运动休闲为主的运动类游戏正在受到越来越多玩 家的支持和爱戴 但是此类网络游戏中 由 Java 开发的网络游戏仍然是一个空白页 但 是它却是一个迫切需要填补的空白页 而 Java 由于其天生的语言特性 请见 1 2 节 很适合用于开发网络游戏 但由于系统环境的问题使得它一直以来未能用于游戏开发 而近来由于 Java 的发展 它已经摆脱了束缚 浮出了游戏开发的水面 若能在网络上出 现高要求多人互动的 Java 游戏 它将是一项极为伟大的发展 这也正是现在许多玩家迫 切要求的 1 4 1 21 4 1 2 功能需求分析功能需求分析 系统功能的需求指定系统必须提供的服务 通过需求分析应该划分出系统必须完成 的所有功能 本作的功能模块主要包括游戏的引擎设计 游戏的界面设计 1 游戏的引擎设计的需求分析 游戏引擎是游戏的灵魂 也就是这个游戏的框架 它的好坏直接决定着游戏的质量 它是控制所有游戏功能的主程序 包括画面的处理 人工智能的实现 接受玩家的设置 以及网络联机的实现等等 所以鉴定一个游戏的好坏 从内部设计的原因上说来 是从游戏的引擎设计体现出 来的 一个游戏的引擎设计 直接关系到游戏设计的其他方面 诸如游戏的图形系统 声音系统及设计的物理模块等等各个方面 就如一台电脑需要 CPU 一样 游戏的引擎也 第 10 页 是直接牵制着整个游戏的设计 它的主要作用就是处理游戏中的事件 运行游戏中的图 象 输出声音及画面 调整游戏的节奏 响应玩家的游戏监听事件等等 所以 游戏的 引擎设计是必要的功能模块 而且游戏的引擎设计必须做好 以使得游戏更具有可玩性 游戏程序是一项精度要求很高的程序系统 因为其代码利用率很高 一个实时运行的最 终作品 每秒都会运行成千上万行程序 绘图事件等都会以极高的频率在后台等待响应 若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误 甚至死循环 因 此 其逻辑设计应当相当严谨 需将所有可能发生的事件及意外情况考虑在设计中 2 游戏界面设计的需求分析 作为一个游戏吸引玩家的重要方面 游戏的界面要很漂亮 图形动画的设计是非常 必要的 本作将采用模拟动画的方式将战争展现在玩家眼前 设计出丰富的战争环境 游戏中为了美观 适用性强 需要采用外部文件引入的图片贴图 而 Java 中提供了用于 处理图片的功能包 使得解决静态或动态 画面背景 屏幕刷新的双缓冲等都有较好的 解决方案 1 4 1 31 4 1 3 系统的可靠性和可用性需求分析系统的可靠性和可用性需求分析 可靠性需求定量地指定系统的可靠性 例如 游戏在运行过程中不能频繁发生错误 而不得不终止游戏 可用性则与可靠性密切相关 它量化了用户可以使用系统的程度 例如 游戏的运 行必须保证随时可以 不能在一段不使用的时间内 游戏产生不可预见的错误而致无法 运行等等 1 4 2 数据流分析 数据流程分析主要包括对信息的流动 传递 处理 存储等的分析 数据流程分析 的目的就是要发现和解决数据流通中的问题 通过对本系统的需求分析 确定了系统的 基本功能 整个系统的数据流图如图 2 1 所示 1 5 本章小结 引言和第一章中介绍了手机在无线应用方向的当今概况 J2ME 的相关内容 分析了 J2ME 在手机软件开发中起的重要作用 描述了本论文的相关背景 第 11 页 第二章第二章 开发环境及相关技术的介绍开发环境及相关技术的介绍 2 1 开发环境开发环境 操作系统 Microsoft Windows XP 程序语言 Java 2 开 发 包 Java TM 2 Standard Edition 5 0 Sun Micro J2ME Wireless Tool Kit 2 2 IDE Eclipse 3 01 2 2 Java 语言特点语言特点 1 平台无关性 Java 引进虚拟机原理 并运行于虚拟机 实现不同平台之间的 Java 接口 Java 的 数据类型与机器无关 2 安全性 Java 的编程类似 C 但舍弃了 C 的指针对存储器地址的直接操作 程序运行时 内存由操作系统分配 这样可以避免病毒通过指针入侵系统 它提供了安全管理器 防 止程序的非法访问 3 面向对象 Java 吸收了 C 面向对象的概念 将数据封装于类中 实现了程序的简洁性和便于 维护性 使程序代码可以只需一次编译就可反复利用 4 分布式 Java 建立在 TCP IP 网络平台上 提供了用 HTTP 和 FTP 协议传送和接收信息的库函 数 使用其相关技术可以十分方便的构建分布式应用系统 第 12 页 5 健壮性 Java 致力与检查程序在编译和运行时的错误 并自动回收内存 减少了内存出错的 可能性 Java 取消了 C 语言的结构 指针 define 语句 多重继承 goto 语句 操作 符 重载等不易被掌握的特性 提供垃圾收集器自动回收不用的内存空间 2 3 关于关于 ECLIPSE Eclipse 是一个开放源代码的 基于 Java 的可扩展开发平台 就其本身而言 它 只是一个框架和一组服务 用于通过插件组件构建开发环境 幸运的是 Eclipse 附带 了一个标准的插件集 包括 Java 开发工具 Java Development Tools JDT 虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用 但 Eclipse 的目标不 仅限于此 Eclipse 还包括插件开发环境 Plug in Development Environment PDE 这个组件主要针对希望扩展 Eclipse 的软件开发人员 因为它允许他们构建与 Eclipse 环境无缝集成的工具 由于 Eclipse 中的每样东西都是插件 对于给 Eclipse 提供插 件 以及给用户提供一致和统一的集成开发环境而言 所有工具开发人员都具有同等的 发挥场所 这种平等和一致性并不仅限于 Java 开发工具 尽管 Eclipse 是使用 Java 语言开 发的 但它的用途并不限于 Java 语言 例如 支持诸如 C C COBOL 和 Eiffel 等 编程语言的插件已经可用 或预计会推出 Eclipse 框架还可用来作为与软件开发无关 的其他应用程序类型的基础 比如内容管理系统 Eclipse 是一个开放源代码的 基于 Java 的可扩展开发平台 就其本身而言 它只是一个框架和一组服务 用于通过插件组 件构建开发环境 2 4 关于关于 Wireless Tool Kit WTK Wireless Tool Kit 是 Sun 公司针对 J2ME 推出的用于手机和 Palm 等移动设备 的开发包 是除手机厂商的专用开发包外唯一的手机模拟器开发包 它通用性高 开发 出的应用程序可保证能运行在大部分设备上 而不像专用厂商具有一定的不兼容性 虽 然它没有强大的功能和完善的调试手段 但它提供运行模拟器的最基本组件 是其他 IDE 需集成采用的必备元素 2 5 Java Appication Manager 手机中负责调配程序运行资源的管理后台是 Java Application Manager 它所使用 的传输媒体可以是红外线 网络 以及其他可用来传输的媒体 Java Application 第 13 页 Manager 会从网络上下载代表该 Application Suite 的 JAR 档 接着在手机上安裝此 MIDlet Suite 然后在手机开始执行该应用程序 2 6 本章小结 本章小结 第二章介绍了 Java 语言的特点 本程序的开发环境及其相关工具的原理和使用 第三章第三章 程序结构 思想和相关技术程序结构 思想和相关技术 3 1 本程序需要解决的主要技术问题本程序需要解决的主要技术问题 1 游戏程序是一项精度要求很高的程序系统 因为其代码利用率很高 一个实时 运行的最终作品 每秒都会运行成千上万行程序 绘图事件 键盘事件都会以极高的频 率在后台等待响应 若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错 误 甚至死循环 因此 其逻辑设计应当相当严谨 需将所有可能发生的事件及意外情 况考虑在设计中 2 游戏中为了美观 适用性强 可能需要采用外部文件引入的图片贴图 有关贴 图 在 MIDP2 0 中提供了用于增强游戏功能的 game 包 使得解决静态或动态 画面背景 屏幕刷新的双缓冲等都有较好的解决方案 3 玩家飞机的运行可以通过键盘响应事件控制 运行算法也要进行相关的设置 已 免游戏过于简单 4 游戏的地图不可能通过绘图来解决 否则 不仅难于控制和处理过多的元素 也 会因过多的大型图片而不能限制程序的大小 失去手机上程序的原则和 Java 的优势 5 Java 是基于虚拟机的半解释型编译系统 其执行效率较 C 等完全编译后的程序 会低很多 程序如果不进行精简和优化 将可能导致运行的不流畅 除开发过程中对结 构上的控制 变量的使用 算法的优化等优化外 还可以使用混淆器 Obfuscator 进行 程序打包后的优化 6 游戏的结束 开始 动态信息画面作为构成一个程序都是必不可少的重要部分 良好的用户界面更是吸引用户的硬指标 相关的美术构图和人性化设置也需要有一定的 考虑 第 14 页 以上相关技术细节和整体流程将分别在以下小节阐述 3 23 2 程序流程程序流程 MIDlet suite 是 MIDP 应用程序的最小单位 JAM 负责将手机内的 MIDlet suite 以 图形化的方式呈现 让用户能够选取欲执行的 MIDlet suite 一旦选取了某个 MIDlet suite 操作系统就会激活 KVM 执行里面的 MIDlet MIDlet 及相关的支持类组成了 MIDP 应用程序的实际内容 而每个 MIDlet 都必须继承 javax microedition midlet MIDlet 这个抽象类 在 MIDP 规范中定义了 MIDlet 的生命周期 以及可以存在的三种状态 包括 Paused Active 以及 Destroyed 每一个 MIDlet 在任何时刻只可能处于其中的一个状态 这三种状态的转换关系如图 3 1 所示 MIDlet 有三个状态 分别是 pause active 和 destroyed 在启动一个 MIDlet 的时候 应用管理软件会首先创建一个 MIDlet 实例并使 得他处于 pause 状态 当 startApp 方法被调用的时候 MIDlet 进入 active 状态 也就 是所说的运行状态 在 active 状态调用 destroyApp boolean unconditional 或者 pauseApp 方法可以使得 MIDlet 进入 destroyed 或者 pause 状态 值得一提的是 destroyApp boolean unconditional 方法 事实上 当 destroyApp 方法被调用的时候 AMS 通知 MIDlet 进入 destroyed 状态 在 destroyed 状态的 MIDlet 必须释放了所有的资 源 并且保存了数据 如果 unconditional 为 false 的时候 MIDlet 可以在接到通知后 抛出 MIDletStateChangeException 而保持在当前状态 如果设置为 true 的话 则必须 立即进入 destroyed 状态 本程序采用面向对象的设计模式 对游戏中的所有物体赋予对象的概念和属性 运 行程序后允许用户选择执行选项菜单 在开始游戏后将先从外部文件载入地图文件 对 消减状态 Destroyed 停止状态 Paused 运行状态 Active StartApp DestroyApp 呼叫 MIDlet 的构 造函数 DestroyApp PauseApp 图 3 1 MIDlet 的流程 第 15 页 背景的所有物体进行绘图 在主程序运行的线程中 画面刷新将以一定的频率采用双缓 冲技术对屏幕重绘 实时反映整个游戏的进行状态 游戏开始后先绘制地图 并将各个对象实例化 在主程序运行的线程中 游戏中所 有的对象都应该运行在同一个线程下 在屏幕重绘的主程序中 将在每次的循环中判断 若干事件 以便程序进入相关的分支执行相关的反应代码 程序为需要完成独立功能的模块设置了单独的类 lzhhdm 类继承自 Midlet gameScrenn 类 MenuScreen 类继承自 GameCanvas mybullets 继承自 Sprite 类 载入程序后首先启动的是程序介绍的信息画面 点击 ok 后调用 MenuScreen 类实现 菜单 如果选择进入游戏 则调用 gameScreen 类 并且中止 MenuScreen 类中的线程运 行 已提高运行速度 3 3 Canvas 类类 为了能有程序开发人员控制接口的外观和行为 需要使用大量的初级用户接口类 尤其在游戏程序中 几乎完全依赖的就是 Canvas 抽象类进行绘图 从程序开发的观点看 Canvas 类可与高级 Screen 类交互 程序可在需要时在 Canvas 中掺入高级类的组件 Canvas 提供了键盘事件 指点杆事件 如果设备支持 并定义了允许将键盘按键映射 为游戏控制键的函数 键盘事件由键代码指定 但这样控制游戏会导致缺乏通用性 并 不是每个设备的键盘布局都适合游戏的操作 应当将键代码转换为游戏键的代码 以便 硬件开发商能定义他们自己的游戏键布局 3 4 Graphics 类类 Graphics 类提供了简单的 2D 绘图功能 它具有 24 位深度色彩的绘制能力 以三原 色分别各占一个字节表示其颜色 程序只能在 paint 函数中使用 Graphics 绘制 GameCanvas 可调用 getGraphics 函数直接绘制在缓冲区上 可以在任何时间请求传输 到前台 其对象会被传给 Canvas 的 paint 函数 以便最终显示 3 5 MIDP1 0 技术下的绘制背景技术技术下的绘制背景技术 在没有 MIDP2 0 前 进行游戏绘图一般需要手动编程使用双缓冲 需要在 paint 方 法内将所想要画的图形画在一张预先准备好的背景上 等所有绘图操作都完成后再将背 景的数据拷贝到实际的屏幕上 Image 类提供了一个建立背景的静态方法 createImage int width int height 再利用 getGraphics 方法取得属于这个背景的 Graphics 对象 所进行的绘图操作都会作用在背景上 等到全部的绘图操作完成后 再 第 16 页 调用 drawImage 方法将背景的数据复制到实际显示的屏幕上 这样的技术在绘制动画时特别有用 绘制动画时经常需要不断地更新画面 而更新 画面的操作就是先将屏幕以 fillRect 的方式清除 再将下一张图片画在屏幕上 然而 反复的清除及重绘会造成屏幕的闪烁现象 flicker 因此使用双重缓冲的好处就是在 背景进行这个清除及重绘的操作 再将完成的绘图拷贝到屏幕上 由于用户看不到清除 的操作 因此就不会出现闪烁的现象了 不过在某些 MIDP 的实现上已经加上了双重缓冲 的支持 因此在处理前应先利用 Canvas 类的 isDoubleBuffer 方法来判断 3 6 MIDP2 0 新增的新增的 GameCanvas 包包 J2ME 的流行促进几个运营商和制造商开发了一些支持游戏的类 但是 这却造成了 游戏缺乏可移植性的问题 例如 很难将使用 Siemens 的 Sprite 类的游戏移植到 Nokia 上 在 MIDP2 0 版本发布后 这些游戏移植性问题初步得到了解决 MIDP2 0 新加入了 GameCanvas Sprite Layer LayerManager TiledLayer 五个与游戏开发相关的类 其 中 Layer 类一般不会直接用到 Game 类的出现不仅降低了错误出现的几率 也使游戏代码变的更小 因为开发者不 需要自己编写象 Sprite 这种例子 下面将简要介绍 Game 类 GameCanvas 类继承自 Canvas 所以具有 Canvas 所具有的功能 还额外增加了一些 便于游戏设计的功能 比如 GameCanvas 类直接提供了 getKeyStates 使程序员可以 在同一个线程自己侦测按键的状态 GameCanvas 类提供了 flushGraphics 的功能 实 现了双缓冲技术 所谓的 Sprite 就是画面上独立移动的图形 Sprite 类是继承自 Layer 的用于存储多桢的基本可视元素 不同的 frame 可交相显 示 构成动态的效果 图片可翻转 颠倒 由一个主角图片就可以方便的得到所有方向 的显示状态 相比原先只能使用 Canvas 绘图 需要将所有方向的主角图象都绘制在 png 图象中简化了许多 Sprite 也可以从整合的图象中读图 读图时将把大图分解为若干等 宽等高的小图 每个小图按照其排列顺序有相应的序号 在程序中调用其序号 就可以 绘制出相应的图片 本程序中的双方飞机 子弹 白云都由 Sprite 继承得到 LayerManager 提供控制整体画面层的控制 它包括了一系列自动获取了代号和位置的层 简化了各层加入游戏画面的过程 提供了自动排序和绘制的能力 LayerManager 存储了一个层的列表 新的层可以用函数附加 删除和插入 层的序 第 17 页 号相当于坐标的 Z 轴 0 层表示最接近用户视觉 层数越高 离用户越远 层号总是连续 的 即使有中间的层被移除 其他层的序号会作相应的调整以保持整体的完整性 LM 中 的 View Window 控制着与 LM 相对坐标的可视区域 改变 View Window 的位置可以制造出 滚动屏幕的效果 TiledLayer 是有一组图象格元素组成的整块虚拟图象 该类使不需要高分辨率的图 象就能创建大幅图面成为可能 这项技术通常应用在 2D 游戏平台的滚动背景的绘图 一 块整图可被分割成等大小的图象格 每块格有其对应的序号 按照行列递增 多块小格 可由大块同时替换组合而模拟动态的背景 这不需要逐块替换所有的静态图象格而显得 非常方便 3 7 PNG 图片格式图片格式 PNG Portable Network Graphics 格式是 MIDlet 唯一支持的图象格式 PNG 具体格 式由 PNG Specification Version 1 0 定义的 PNG 格式提供透明背景的图象 这对绘制 游戏画面和被操纵主角极有帮助 PNG 格式图片中包含许多定义其图片特性的冗余部分 Chunks 这些代码包含在每一 个单独的 png 格式图象中 然而如果将多个 png 图象合并在一张幅面稍大一些的整图中 多个 chunks 就可以得到精简 图片的大小可以得到控制 使用 Image 类中的 createImage 函数可从整图中分割出所需要的元素 在 Game 包中的 TiledLayer 和 Sprite 类都整合了这样的功能 本程序中的地图元素都集成在一张 beijing png 图片中 实现了方便的管理和程序体积的精简 3 8 内存的优化内存的优化 手机内存空间小 所以在程序设计时应该注意以下几点 以尽量减少内存的使用 1 尽量缩短命名的长度 在应用程序内 对于所建立的类 接口 方法及变量名而 言 都需要赋予一个识别的名称 所命名的名称每多一个字符就会在类文件内多产生一 个字节 对于一个较复杂的应用程序而言就会增加为数不小的数据量 所有这些可以借 助混淆器来帮助实现 2 所有代码写为一个类 3 只使用一个线程 4 尽量不使用静态变量 5 将 PNG 图片合并成一张 减少图形数据的大小 将 PNG 格式的小分辨率图象合并在一张大的高分辨率图象中 由于减少了头文件的 第 18 页 大小 将比合并前的总大小减少许多 3 9 内存检测器内存检测器 Wireless Tool Kit 提供了许多在运行时监视运行状态的工具 包括内存状况的检 测 手机上的内存空间十分有限 必须时刻关注机载内存是否大于程序所能使用到的最 大可能的内存空间 网络状况的检测 运行函数的跟踪等 内存检测器是内存跟踪测 试随时间变化的调试器 其中 允许强制垃圾回收 Garbage Collection 由于 Java 语 言中 不像许多其他的如 C 语言 不需要指定回收函数中特定不使用的资源 资源回收 机制将自动清空无效变量占用的空间 在程序运行中也可以调用 System 类的 gc 函数手 动收回废弃的内存 3 10 关于混淆器关于混淆器 Java 语言并没有完全编译成二进制可执行文件 编译出的 class 文件是一种介于源 程序和二进制之间的一中基于半解释的字节码 需要虚拟机来执行 它包括了所有的信 息 然而这样会导致 class 很容易被反编译为源代码 从而不能保护作者的知识成果 目前流行的如 decode JAD 等反编译工具可以以很快的速度生成源文件 如果不加以施行 有效的措施 将造成严重的后果 由此引入混淆器的概念 混淆器将代码中的所有变量 函数 类的名称变为简短的 英文字母代号 如果缺乏相应的函数名指示和程序注释 即使被反编译 也将难以阅读 混淆器的作用不仅仅是保护代码 它也有精简编译后程序大小的作用 由于以上介 绍的减少变量 函数的命名长度的关系 编译后也会从 class 文件中减少这些冗余的信 息 混淆后 体积大约能减少 25 这对当前费用较贵的无线网络传输是有一定意义的 3 11 本章小结本章小结 第三章中介绍了程序的流程 相关技术的思想及其在本程序中的应用 对游戏基本 算法等做了详细叙述 具体算法的代码实现和详细流程将在下章介绍 第 19 页 第四章第四章 程序分析和具体实现程序分析和具体实现 4 14 1 游戏进入前的选择游戏进入前的选择 每个 MIDlet 程序都必须有一个主类 该类必须继承自 MIDlet 它控制着整个程序的 运行 并且可以通过相应函数从程序描述文件中获取相关的信息 该类中拥有可以管理 程序的创建 开始 暂停 手机中很可能有正在运行程序却突然来电的情况 这时应进 入暂停状态 结束的函数 本程序主类为 lzhhdm 并实现接口 CommandLIstener 首先显示的是游戏的背景介绍 图 4 1 为此 在类 lzhhdm 定义 Form 类对象 a 在 startApp 函数中判断 isSplash 是否为真 如果为真的话 将创建 Form 类的实例 a 并且调用 append 方法在表单上放置 StringItem 类的实 例以显示游戏背景信息 使用语句 ok new Command ok Command OK 1 实例化 Command 类对象 ok 调 用 addCommand 命令建立 ok 命令与 Form 之间的关联 调用 setCommandListener 命令使 Form 与 CommandListener 建立 关联 调用 Displayable 的 seturrent 函数显示背景介绍窗口 图 4 1 游戏背景介绍 当玩家点击 ok 后将调用 display s
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 可降解环保材料在烟机配件中的产业化应用瓶颈突破
- 2024年工业噪声控制设备项目项目投资需求报告代可行性研究报告
- 历年医院临床招聘笔试题及答案2025年版
- 口腔临床护士试题及答案2025年版
- 临床成人本科试题答案2025年版
- 2025年文化旅游演艺产业集群文化融合创新可行性分析报告
- 2025年文化创意产业孵化器技术创新与市场拓展可行性研究报告
- 门头设计相关知识培训课件
- 2025轴承销售合同范本
- 2025年4D打印技术的自适应材料应用
- 2025中国农业科学院棉花研究所第二批招聘7人备考考试题库附答案解析
- 重庆西南大学附中2025-2026学年九年级上学期开学考试语文试题
- 2025-2026学年人教版PEP英语二年级上册教学计划(三篇)
- 2025年秋季学期教科版二年级上册科学教学计划(三篇)
- 买家赎楼签协议签合同
- (2025年标准)整容医师聘用协议书
- 煤矿机电考试试题及答案
- 借名购车协议贷款协议书
- 2025年6月四川省高中学业水平合格性考试地理试题(解析版)
- 2025至2030年中国虹膜识别市场深度调查分析及投资前景研究预测报告
- 《3-6岁幼儿学习与发展指南》试题及答案
评论
0/150
提交评论