




已阅读5页,还剩27页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成成绩绩 数学与计算机科学学院 0909 级级 计算机应用计算机应用专业专业 毕毕 业业 设设 计计 题题 目目 J2MEJ2ME 手机游戏手机游戏 SuDoKu 数独数独 年级专业年级专业 0909 级计算机应用 级计算机应用 2 2 班 班 学学 号 号 20095938 姓姓 名 名 谢平 日日 期 期 2011 年年 1212 月月 1313 日日 摘要摘要 J2ME Java 2 Micro Edition 是近年来随着各种不同设备 尤其是 移动通信设备的飞速发展而诞生的一项新的开发技术 它定位在消 费性电子产品的应用上 对设备的智能化 多样化 提供了革命性 的解决方案 并因其 Write Once run anywhere 的 Java 特性而 提高开发的效率 随着手机的日益普及 Java 功能在移动设备上的实现 Java 应用程 序产生的手机增值服务逐渐体现出其影响力 对丰富人们的生活内 容 提供快捷的资讯起着不可忽视的作用 特别是手机性能的逐渐 增强 手机作为一个游戏平台越来越成熟了 本论文着眼于 J2ME 技 术的应用 开发一款可用的手机游戏程序 数独 本文在介绍 J2ME 的相关技术的基础上 设计并实现了数独游戏 关关键键词词 J2ME 手机游戏 Java 数独 AbstractAbstract J2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments It focuses on application for consumptive electronic products providing revolutionary solution to the intelligentization and diversification of the equipment It improve the efficiency of the development process thanks to its Write Once run anywhere nature When mobile 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 people s everyday life providing them ever fast information just in hand Mobile phone whose capability is greater is more and more mature for game This dissertation focuses on implementation of J2ME technology and has developed a commercial game suite run on mobile phones sudoku This article in introduced that J2ME in correlation technique s foundation designed and has realized of Soduku game Keywords Keywords J2ME mobile game java sudoku 目目 录录 1 1 引言引言 5 5 2 2 绪论绪论 5 5 2 1 手机软件现状 6 2 2 手机游戏应具有的特征 6 2 3 本游戏背景介绍 7 3 3 开发环境及相关技术的介绍开发环境及相关技术的介绍 7 7 3 1 开发环境 7 3 2 J2ME 简介 7 3 3 MIDLET SUITES简介 8 3 4 MIDP 类库 8 3 5 WTK2 5 简介 10 4 4 数独游戏的策划和设计数独游戏的策划和设计 1111 4 1 生成数独题目的方法 11 4 2 数独题目的变换 13 4 3 谜题数据的制作 13 4 4 利用回溯法求解数独 14 4 5 游戏的类结构 15 4 6 用户界面流程 16 5 5 主要模块设计主要模块设计 1818 5 1 主类 SUDOKUMIDLET类 18 5 1 1 闪屏界面 18 5 1 2 游戏菜单列表 19 5 1 3 继续游戏选项 19 5 1 4 填充完成后提示界面 20 5 3 游戏菜单 MENULIST类 23 5 3 1 MenuList 类得构造函数 23 5 3 2 游戏当前状态 23 5 3 3 菜单事件处理 24 5 4 总结 35 参考文献 参考文献 3636 致谢 1 1 引言引言 虽然 J2ME 以开发交互式业务为主 属于战略性产品 备受产业连的 重视 但是由于自从 NOKIA 的贪食蛇掀起手机游戏风潮之后 现在 已经很难再想像一部时尚的手机里头没有游戏 随着手机从单色屏 到灰度屏到彩屏 从蜂鸣器到扬声器 随着手机存储能力的加大和 处理能力的加强 手机已经成为合情合理的游戏平台 越来越多的 手机厂商和专业的游戏公司开始关注手机游戏这个潜在的市场 基 于 J2ME 的通用解决方案 这种方案不仅仅可以提供高质量的游戏 而且可以提供全方位的软件服务 正是由于无线业务的蓬勃发展 和越来越多的无线厂商支持 J2ME 技术 J2ME 也将拥有一个更广阔 的发展空间 在这样的背景下 本文分析了数独游戏的基本原理和关键技术 利 用 WTK 实现了数独游戏的部分模块 2 2 绪论绪论 2 1 手机软件现状手机软件现状 在信息社会中 手机及其他无线设备越来越多的走进普通百姓的工 作和生活 随着信息网络化的不断进展 手机及其他无线设备上网 络势在必行 但是传统手机存在以下弊端 1 传统手机出厂时均由硬件厂商固化程序 程序不能增加 删除 有了错误也不能更新 修改 若要增加新功能必须另换一部手机 2 传统手机访问互联网是通过 WAP Wireless Application Protocal 所有网络资源必须接通网络才能在线访问 非常耗时 费用亦很高 而 Java 技术在无线应用方面的优势非常明显 1 应用程序可按需下载 而不是购买由硬件商提供的套件 可升 级空间大 2 Java 技术提供了一个类库 它使的应用开发商可以创建更为直 觉 丰富的用户界面 GUI 3 Java 技术使网络带宽的应用更为有效 因为应用程序可以下载 到器件上 并在本地运行 仅仅是在连接到服务器时才会占用网络 带宽 基于以上分析 Java 手机将是未来手机的发展方向 是业界的热点 2 2 手机游戏应具有的特征手机游戏应具有的特征 一个手机游戏应该具有以下特征 易于学习 既然手机游戏面向的是普通消费者而不是计算机专家 那么他们不可能深入的学习游戏技巧 消费者不会花几个小时去研究 一个 3 元的手动操作的游戏 保持游戏的简单是最基本的要求 可中断性 多任务处理是手机生活方式的基本特征 手机用户常常 在任务 如等一个电子邮件或者等车 之间有一小段时间 而游戏 日历管理 通讯和工作数据访问使用的是同一个设备 所以一个好 的手机游戏应该提供短时间的娱乐功能 并且允许用户在游戏和工 作模式之间顺利切换 基于订阅 手机游戏的盈利成功取决于他们巨大的使用量 一开始开 发和设计每个游戏都是昂贵的 如果一个手机游戏开发者要赢利的话 重要的是 同一个游戏引擎 多个标题 基本的故事情节类似 基 于订阅的游戏是不断产生收入的最好方法 丰富的社会交互 不管一个游戏设计得多好 只要玩家找到了它的 根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏 对于 一个基于订阅的游戏 重要的是与别的玩家合作以增强所玩游戏的 智力和随机性 在今天纷繁复杂的多玩家游戏中具有丰富社会交互 的游戏证明是成功的 利用手机技术的优点 巨额的手机技术研发费用都花在提高设备和 网络的可用性和可靠性上面 因此 手机设备硬件和网络协议与桌 面 控制台世界 如全球定位系统 GPS 扩展 条形码扫描仪 和短 消息服务 SMS 多媒体信息服务 MMS 通讯 有着非常大的差别 好 的手机游戏应该利用那些更新的设备特征和网络基础设备的优点 2 3 本游戏背景介绍本游戏背景介绍 相传数独源起于拉丁方阵 Latin Square 1970 年代在美国发展 改名为数字拼图 Number Place 之后流传至日本并发扬光大 以 数字智力游戏智力拼图游戏发表 在 1984 年一本游戏杂志 通信 正式把它命名为数独 意思是 在每一格只有一个数 字 拼图是九宫格 即 3 格宽 3 格高 的正方形状 每一格又细 分为一个九宫格 在每一个小九宫格中 分别填上 1 至 9 的数字 让整个大九宫格每一列 每一行的数字都不重复 数独的玩法逻辑 简单 数字排列方式千变万化 不少教育者认为数独是锻炼脑筋的 好方法 3 3 开发环境及相关技术的介绍开发环境及相关技术的介绍 3 1 开发环境开发环境 操作系统 Microsoft Windows XP 程序语言 Java 2 开 发 包 Java TM 2 Standard Edition 5 0 Sun Micro J2ME Wireless Tool Kit 2 5 2 3 2 J2MEJ2ME 简介简介 Sun 公司将 J2ME 定义为 一种以广泛的消费性产品为目标 高度优 化的 java 运行时环境 J2ME 是为了那些使用有限能源 有限网络 连接 正常是无线连接 以及有限图形用户界面的设备而开发的 J2ME 不只是一个单独的技术规范 而是一系列技术规范的总称 这 些规范定义了 java 技术在资源限制的设备中的表现形式 而且新规 范的不断制定当中 并且这些规范的制定是完全向公众开放的 目 前所说的手机游戏其实是其中规范的一种 即 MIDP 移动信息设备 规范 该规范应用最为普遍 因此习惯上也被人们笼统地称之为 J2ME 技术 J2ME 主要应用于手机等小型嵌入式设备 这些设备由不同的厂商设 计生产 功用千差万别 J2ME 在应用于这些设备的同时也保留了 java 的传统特性 即任何时间和任何地点的代码有可移植性 部署 灵活性 安全的网络传输性 以及代码稳定性 3 3 MIDletMIDlet SuitesSuites 简介简介 在制定 MIDP 规范过程中 最重要的一件事情就是定义一个 MIDP 应 用程序的组成 换句话说 它应当回答任何开发人员都可能问的问 题 比如 如何将程序正确下载到设备中 程序的入口在哪 设备 如何识别该 MIDP 应用程序是自己想要的 同 Applet 类似 一个 MIDP 程序被称为 MIDlet MIDlet 应用的 主类需要从一个特殊的类 javax microedition midlet MIDlet 中继承 并提供共用的默认的构造函数 一个或多个 MIDlet 打包在 一起叫做 MIDlet Suite 其表现形式一个以 jar 为后缀名的文 件 这个 JAR 文件非常重要 它所包含的主要信息如下 包含 MIDlet 运行所需要的所有类 与 Applet 不同 MIDlet 不运行 在运行时下载其他类 而只运行在同一个 MIDlet 中的类 JAR 的 Mainfest 是文本文件 用于描述 JAR 文件的内容 定义了在 MIDlet 中的重要信息 如名称 主类 图标等 其他资源文件 如使用的图像 声音文件 和 Java Applet 类似 MIDlet 应用程序在移动设备上运行时具有应 用程序生命周期 显而易见 MIDlet 可能处于以下 3 种状态 暂停 激活和终止状态 各种状态之间的转换规则如图 2 1 所示 3 4 MIDPMIDP 类库类库 MIDP 类库建立在 CLDC 类库基础之上 因此许多类库都来自 J2SE 为了实现特 定功能 MIDP 增加了一些新的类库 这 些类库描述如表 2 1 所示 核心类库类库描述 java io通过数据流提供系统的输入 输出 java langMIDP 语言包 在 CLDC 中 java lang 包的基础 上增加了类 来自 J2SE java lang IllegalStateException 当有非 法的转换请求时抛出这个异常 比如 在一 个 TimerTask 安排中调用或者在用户界面组 件容器中请求时 java utilMIDP 工具栏 在 CLDC 中 java util 包的基础 之上增加了以下类 来自 J2SE java util Timer java util TimerTask Timer 用于安排一个后台线程使它在以后执行 TimeTask 通过使用 Timer 安排一个单次执行 的任务 或者以一定间隔重复执行的任务 应用程序生命周期 javax micorediton midlet Midlet 包定义了 MIDP 应用程序 以及应用程 序和它所运行于环境之间的交互 用户界面 Javax microedition lcdui javax microedition lcdui game 为 MIDP 应用程序提供用户界面 APE 为 MIDP 应用程序提供游戏开发的高级 API MIDP2 0 新增 持久存储 javax mircroeditio n rms 这个包用来为 MIDlet 提供持久存储的机制 应用程序可以存储数据 在以后需要的时候 获取这些数据 网络 javax mircroeditio n io MIDP 提供了基于 CLDC 通用连接框架的网络支 持 在 CLDC 这个包的基础之上 增加了类 javax microedition io HttpConnection 这个类用于建立 HTTP 连接 在 MIDP2 0 中除了支持 HTTP 连接外 还支持 HTTPS 报文 Socket 通信及串口通信 另外 MIDP2 0 还支持服务器 Push 体系架构 公开密钥 javax microedition pki 提供用于鉴别安全网络信息的数字认证 MIDP2 0 新增 声音媒体 Javax microedition media javax microedition media control 该包为 MIDP 应用程序提供音 视频等多媒体 功能 该包遵循 JSR 135 规范 MIDP 2 0 新 增 该包为播放器提供了一些特定的控制功能 MIDP2 0 新增 表 2 1 MIDP 中的类库描述 3 5 WTK2 5WTK2 5 简介简介 WTK Wireless Tool Kit 是 Sun 公司针对 J2ME 推出的用于手机和 Palm 等移动设备的开发包 是除手机厂商的专用开发包外唯一的手 机模拟器开发包 它通用性高 开发出的应用程序可保证能运行在 大部分设备上 而不像专用厂商具有一定的不兼容性 虽然它没有 强大的功能和完善的调试手段 但它提供运行模拟器的最基本组件 是其他 IDE 需集成采用的必备元素 J2ME WTK 包含了为能够支持 MIDP 设备开发应用程序所需要的全部 工具 这些工具包含字节码与校验器 byte code preverifier KToolbar 自带的模拟器 以及其他一些用来优化代码和监视程序的 工具 在安装 WTK2 5 以前 需要安装 JDK 5 1 5 或者更高版本 安装 完成需要添加环境变量 JAVA HOME C Program Files Java jdk1 5 0 04 classpath JAVA HOME lib dt jar JAVA HOME lib tools jar JAVA HOME lib htmlconverter jar 在原来的 path 变量前添加 JAVA HOME bin WTK2 5 新建的项目会产生源程序 资源和类库文件 其结构组成如 表 2 2 所示 目 录描 述 src 包含所有源程序文件 res 包含所有的资源文件 如图片 声音 3D 数据 文件 bin 包含 JAR JAD 和未打包的 Manifest 创建项目 自动生成 lib 包含外部类库文件 JAR 或者 ZIP 文件 tmplib 存放临时外部类库 临时目录 编译后生成 cmpclasses 使用 JDK 编译后的类文件 临时目录 编译后 生成 classes 使用 preverify 预验证后的类文件 临时目录 编译后生成 表 2 2 项目文件的组织 4 4 数独游戏的策划和设计数独游戏的策划和设计 4 1 生成数独题目的方法生成数独题目的方法 到底有多少个 9 9 的拉丁方阵呢 答案 552475149615689284253122560 个 但数独的规则除了每行每列都 是 1 到 9 的数字外 数独的 9 个小宫格也都要是 1 到 9 不同的数字 所以要减少很多 直到 2005 年底 数学家贝米耳与罗斯坦才算出一 共有 6670903752021072936960 种可能的数独谜题 由于同一个数独可以变形 如列变换 行变换 数字代码变换 比 如 1 和 5 交换 2 和 8 3 和 4 重复前面几次之后 就分不 清是来自同一个数独了 因此 如何产生一道数独题目呢 产生数 独题目的方法是从答案反推题目 为了 便于理解 可以先从 2 2 的 4 个四宫格 共 16 个宫格 开始思考 推论 先给出一个 2 2 个四宫格的数独解 为了方便解说 我把方阵内的 数字位置分区块为 A 区 黄色 B 区 绿色 C 区 蓝色 D 区 红色 如图 3 1 所示 推导数独题目的方法如下 1 任意选取一个方格 并将此空格内的数字挖掉 例如将 3 3 位置的数字 4 挖掉 如图 3 2 所示 2 观察 B 区得四宫格可以发现 不管 2 2 位置的数字 4 是否存 在 为确定 4 1 位置挖掉的数字 4 3 1 位置的数字 2 必须存在 如图 3 3 所示 3 观察 A 区得四宫格 由于 3 1 位置的数字 2 已存在 为了要 找到 1 2 位置的数字 2 则 2 2 位置的数字 4 必须存在 如 图 3 4 所示 4 观察 C 区得四宫格 由于 2 2 位置的数字 4 已存在 为了要 找到 1 4 位置的数字 4 则 1 3 位置的数字 3 必须存在 如 图 3 5 所示 5 观察 D 区得四宫格 由于 1 3 位置的数字 3 已存在 为了要 找到 3 4 位置的数字 3 则 4 4 位置的数字 1 必须存在 如 图 3 6 所示 4 2 数独题目的变换数独题目的变换 经过以上 5 个步骤可以发现 只需要提供 4 个位置的数字就可以得 出一个唯一解的数独谜题 如图 3 7 所示 另外通过以下形式的变 换方式 仍然可以得出唯一解的数独谜题 行列变换 将同一四宫格内的行列变换 例如 将第 1 2 列互掉 第 3 4 列互掉 第 1 2 行互掉 第 3 4 列互掉 如图 3 8 和图 3 9 所示 标准的 3 3 个九宫格的数独谜题的推出原理与此相同 但过 程复杂 在此不再赘述 数字替换 例如数字 1 换 4 数字 2 换 3 如图 3 10 所示 4 3 谜题数据的制作谜题数据的制作 数独游戏使用到了 81 个宫格 因此首先联想到使用数组保存谜题数 据 使用数组保存数据更加直观 但是如果用非常多的谜题 就会 造成代码量庞大而且冗余 因此 使用字符串的格式来保存九宫格 的数据 然而 新的问题出现了 通过前面的讨论我们可能发现 谜题的答 案是 9 9 共 81 个数字 但给玩家的谜题只是其中的一部分 那么 哪些数字应该显示 哪些数字不应该显示呢 这样是否应该使用两 个字符串来保存一道谜题 通过类似加密的方法可以使这个问题迎刃而解 能够使用这种方法 的前提是 char 字符类型的数据能够使用一个字符表示 0 到 FFFF 得 Unicode 码 可以把 char 字符看成是多进制的运算 例如 char 字 符是 1 转化到 int 字符是 49 为此 对谜题答案进行一定的处理 这里采用编码时加 10 的方法 读取时减 10 的方法 就能将谜题和空白区域区分开来 运行下面 代码 完成了数字和字符的转换 for int i 1 i 9 i System out print i System out println for int i 1 i System out print char i 0 两次的输出结果都是 123456789 但数据类型已经发生了变化 对原有数字加 10 然后再转成 char 字符 for int i 1 i 9 i System out print char i 10 0 运行程序 原来的 123456789 通过加 10 再变换 变成了 ABC 结 果毫无规律 变得不可识别 4 4 利用回溯法求解数独利用回溯法求解数独 回溯法有 通用解题法 之称 将所有的解 问题的解空间 按照 一定结构排列 再进行搜索 一般解空间构造成为为树状结构 用 深度优先的策略搜索 一般有两种方式 1 只需要一个解的话 找到解就停止 2 需要求所有解 则需做 树的遍历 找到所有解 回溯法的基本做法是搜索 或是一种组织得井井有条的 能避免不 必要搜索的穷举式搜索法 这种方法适用于解一些组合数相当大的 问题 回溯法在问题的解空间树中 按深度优先策略 从根结点出发搜索 解空间树 算法搜索至解空间树的任意一点时 先判断该结点是否 包含问题的解 如果肯定不包含 则跳过对该结点为根的子树的搜 索 逐层向其祖先结点回溯 否则 进入该子树 继续按深度优先 策略搜索 回溯法是一种搜索算法 其基本思路是 在一个问题中 根据题意 给出的边界条件划定出所有可能解的范围 称为可能解 根据题意 确定出约束条件 利用程序顺次在所有可能解中搜索时按照深度搜 索的方式进行 即在第一层选定一个满足约束条件的解 然后以该 可能解为出发点 搜索第二层的一个可能解 试探 如果搜索到第 二层的一个可能解 则继续搜索第三层得一个可能解 依次类推 直到所有层得可能解都被找到 则得到了该问题的一个完整解 如 果第二层所有的肯可能解都不满足约束条件 则返回第一层 放弃 原有的可能解 使用第一层的下一个可能解 回溯 一次类推 寻 找第二层的一个可能解 回溯法相对于其他穷举的特点在于 不必把问题的每一层的所有可 能解都遍历一遍 只要当前的可能解不满足约束条件就抛弃该解 寻求下一个可能解 而不必求解其余的下层解 当当前层得所有可 能解都不满足约束条件 则回溯到上一层 抛弃上一层的当前可能 解 从以上分析中结合数独问题的规则 得出数独问题的约束条件为 每一格的数值范围仅限 1 9 每一格内的数字在当前行不允许重复 每一格内的数字在当前列不允许重复 每一格内的数字在当前小宫格内不允许重复 由此 回溯法通过约束条件的筛选 在所有解中除掉不可能的解 从而获得问题的一个或者全部解 具体实现方法和代码会在后面章 节详细说明 4 5 游戏的类结构游戏的类结构 整个游戏共由 10 个类组成 如图 3 11 所示是游戏的类结构 游戏 的 SuDoKuMIDlet 类负责保持 display 对象 确保在各个屏幕之间切 换 所切换的屏幕包括闪屏 菜单 游戏画布 游戏设置表单和游 戏说明表单 游戏线程和屏幕绘制由 SuDoKuCanvas 画布类实现 屏幕绘制包括背 景 宫格和数字 游戏循环每隔 50ms 绘制一次 游戏声效由 SoundEffects 类实现 游戏控制类 SuDoKuModel 衔接了游戏画布 游戏存储和游戏逻辑各个功能单元 使用这种结构能很好地保持各 个类得抽象性和封装性 例如 逻辑类负责保持宫格数据 判断胜 负 而画布类只负责绘制和接收键盘事件 游戏控制类起到中枢神 经的功能 SuDoKuMIDletSplashScreen MenuList SuDoKuCanvas OptionScreen InstructionsScreen SuDoKuModel SoundEffects SuDoKuLogic SuDoKuStore 主类 游戏闪屏 游戏菜单 画布 游戏设置 游戏说明 游戏控制 声效 游戏逻辑 存储 图 3 11 类结构 4 6 用户界面流程用户界面流程 游戏启动时 首先显示闪屏画面 等待 3 秒或者玩家按下任意键之 后 进入游戏主菜单 菜单选项有 开始新游戏 加载游戏 游 戏设置 游戏说明 和 退出游戏 玩家选择 开始新游戏 和 加载游戏 则显示游戏画布 玩家选 择 游戏设置 则进入游戏设置表单 玩家按下 游戏说明 则显 示游戏说明画面 玩家选择 退出游戏 则退出整个游戏 整个游戏的界面切换流程如图 3 12 所示 主要的用户界面如图 3 13 所示 游戏闪屏 确定 游戏菜单 游戏设置 游戏说明 游戏画布退出 启动 图 3 12 整个游戏的界面切换流程图 5 5 主要模块设计主要模块设计 5 1 主类主类 SuDoKuMIDletSuDoKuMIDlet 类类 5 1 1 闪屏界面闪屏界面 游戏的主类为 SuDoKuMIDlet 类 该类继承了 MIDlet 类 用于在各 个屏幕之间切换 并且实现各个功能的调用 是整个程序的中枢核 心 游戏启动后显示游戏闪屏 闪屏由 SplashScreen 类实现 代码 如下 public void startApp Displayable current Display getDisplay this getCurrent if current null Display getDisplay this setCurrent new SplashScreen this 显示闪屏界面 5 1 2 游戏菜单列表游戏菜单列表 当闪屏画面结束之后 将创建并显示菜单 菜单由 Menulist 类实现 此时后台创建 SuDoKuCanvas 游戏画布 private MenuList menuList 游戏菜单 private SuDoKuCanvas myCanvas 游戏画布 public void splashScreenDone menuList new MenuList this 创建游戏菜单 myCanvas new SuDoKuCanvas this 创 建游戏画布 Display getDisplay this setCurrent menuList 显示游戏菜单 游戏菜单有 开始新游戏 加载游戏 参数设置 游戏说明 退出游戏 当玩家选中这些选项时 将会有相应的调用方法 5 1 3 继续游戏选项继续游戏选项 当玩家进入游戏后如果中途返回菜单 菜单会增加一项 继续游戏 选择该项则返回游戏 中途返回菜单将停止计算时间 代码如下 public void menuListContinue Display getDisplay this setCurrent myCanvas 显 示游戏画布 myCanvas start 启 动游戏线程 从游戏 游戏帮助和参数设置界面返回菜单的代码如下 但是注意 从游戏中返回时调用了菜单对象的 setGameActive 方法 该方法 用于在菜单中插入 继续游戏 选项 当设置好游戏参数返回时 通过主类将参数从对象传递给游戏画布 可见主类起到了中介传递 作用 这些方法代码如下 public void gameBack menuList setGameActive true 在菜单中插入继续游戏 选项 Display getDisplay this setCurrent menuList 显 示菜单 public void menuListContinue Display getDisplay this setCurrent menuList 显 示菜单 myCanvas start public void optionsBack byte level byte back byte input byte music myCanvas setOptions level back input music 将参数传递给 游戏画布 Display getDisplay this setCurrent menuList 显 示菜单 5 1 4 填充完成后提示界面填充完成后提示界面 当玩家填好方格内所有数字后 将对结果进行检测 将检测结果保 存在布尔变量 isSolved 中 并且弹出提示框 如果玩家顺利完成了 谜题 提示框中将显示玩家耗费的时间和难度级别 并恭喜玩家顺 利通过 如果玩家填充了题目 却存在错误 提示框将显示失败图 片 并请玩家继续努力 由于持续时间使用的是毫秒单位 还需将时间转换为小时 分 秒 单位 由 notifyGameOver 方法处理游戏完成 该方法代码如下 public void notifyGameOver byte level long gameDuration boolean isSolved String strTime 时间字符串 String s 提示字符串 long temp 转换时间格式临时长整 型变量 temp gameDuration 1000 将毫秒转换成秒 strTime gameDuration 60 秒 获取 秒 if temp 60 temp temp 60 strTime temp 60 分 strTime 获取 分 if temp 60 temp temp 60 strTime temp 小时 strTime 获取小 时 if isSolved s 恭喜 在 strTime 内您顺利完成了本题 else s 未能完成本题 请继续加油 if alert null alert new Alert 游戏结束 创建提示框 alert setTimeout Alert FOREVER 等待用户确认 后消失 alert setType AlertType INFO alert setString s 设置提示框 的文字内容 Image imgGameOver if isSolved imgGameOver createImage win png else imgGameOver createImage lose png alert setImage imgGameOver menuList setGameActive false Display getDisplay this setCurrent alert menuList 5 2 游戏闪屏游戏闪屏 游戏闪屏由 SplashScreen 类实现 该类继承了低级用户界面 Cancas 类 并且开启线程来等待用户确认 该类实现了 Runnable 接口 5 2 1 加载闪屏图片加载闪屏图片 SplashScreen 类得构造方法加载了闪屏图片 并且启动等待线程 由如下代码实现 SplashScreen SuDoKuMIDlet midlet this midlet midlet imgSplash midlet createImage splash png 加载闪屏图片 new Thread this start 5 2 2 绘制闪屏屏幕绘制闪屏屏幕 当显示闪屏画布时 将自动调用 paint 方法 该方法将闪屏图片 绘制到屏幕中心 绘制完成后将图片销毁 以便垃圾回收 代码如 下 private Image imgSplash public void paint Graphics g int CanvasWidth getWidth 获取屏幕宽度 int CanvasHeight getHeight 获取屏幕高度 if imgSplash null g drawImage imgSplash CanvasWidth 2 CanvasHeight 2 Graphics VCENTER Graphics HCENTER 将图片绘 制到屏幕中心 imgSplash null 5 2 3 闪屏的线程闪屏的线程 闪屏的线程等待 3 秒钟后取消闪屏 代码如下 public void run synchronized this try wait 3000L 等待 3 秒 catch InterruptedException e 捕捉线程中断异常 dismiss 5 2 4 闪屏的取消闪屏的取消 除了等待 3 秒外 玩家按下任意键也能取消闪屏 键盘处理调用画 布类的 keyPressed 方法 代码如下 public synchronized void keyPressed int keyCode dismiss Dismiss 方法用于取消闪屏 取消闪屏的同时设置标志位 此时调 用主类的 splahScreenDone 方法 该方法将显示权交给游戏菜单 用如下方法实现 private volatile boolean isDismissed false private void dismiss if isDismissed isDismissed true midlet splashScreenDone 5 3游戏菜单游戏菜单 MenuListMenuList 类类 MenuList 类继承了高级用户界面的 List 类 由于菜单属于 IMPLICT 有软键组成的菜单 因此需要监听各个选项的选定事件 并且还实现了 CommandListener 接口 5 3 1 MenuListMenuList 类得构造函数类得构造函数 MenuList 类得构造函数主要设置菜单名称和增加各个选项 软键 并监听选项的选择事件 构造函数的代码如下 MenuList SuDoKuMIDlet midlet super 数独 List IMPLICIT 设置菜单名称和 List 的类型 this midlet midlet append 开始新游戏 null 添加选项 append 加载游戏 null append 参数设置 null append 游戏说明 null append 退出游戏 null setCommandListener this 监听选中事件 5 3 2 游戏当前状态游戏当前状态 如果玩家在游戏过程中 中途返回菜单 此时玩家会发现菜单中多 了 继续游戏 选项 该功能由 setGameActive 方法实现 当玩家在游戏过程中按下 返回菜单 软键 则会调用主类的 gameBack 方法 该方法先调用菜单的 setGameActive 方法 方 法的布尔参数 active 设置为 true 表示游戏进行中 需要增加 继续游戏 选项 然后才显示菜单 该方法的代码如下 private boolean gameActive false void setGameActive boolean active if active insert 0 继续游戏 null 插入继续游戏 选项 else if active delete 0 删除继续游戏选项 5 3 3 菜单事件处理菜单事件处理 前面提到 游戏菜单实际上由众多软键组成 所以菜单选项的选择 和软键的选择处理方法类似 所不同的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 医疗机构人才培养计划补充协议
- 健康管理服务与慢病管理合同
- 新都区公务员考试题目及答案
- 高效牧场奶牛养殖委托管理与收益分成协议
- 情感出轨过错通知及财产分割协议
- 特殊人群营养餐配送及跟踪服务协议
- 硬件产品检测与质量认证补充协议
- 城市更新项目房产使用权及拆迁补偿协议
- 校招运营专员笔试题目及答案
- 国际旅行意外伤害救援及保障服务协议
- 激光熔覆技术综述
- 公路水运检测师《水运材料》考前冲刺必会题(附答案)
- 2024年学校安全生产月活动实施方案
- 羊初乳知识培训课件
- 企业国际差旅服务标准与实践分享
- 中医与现代科技在健康管理中的合作
- 家纺订货会订货指引
- 驾驶员心理及行车安全
- 2024年图书管理员招聘面试准备试题及答案
- 中山市第三届“南粤家政”技能大赛医疗护理员技术文件
- 2025届湖北联投集团有限公司校园招聘299人笔试参考题库附带答案详解
评论
0/150
提交评论