基于J2ME的俄罗斯方块手机游戏58521.doc_第1页
基于J2ME的俄罗斯方块手机游戏58521.doc_第2页
基于J2ME的俄罗斯方块手机游戏58521.doc_第3页
基于J2ME的俄罗斯方块手机游戏58521.doc_第4页
基于J2ME的俄罗斯方块手机游戏58521.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于J2ME的俄罗斯方块手机游戏.txt两个人吵架,先说对不起的人,并不是认输了,并不是原谅了。他只是比对方更珍惜这份感情。 本文由455382237贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 俄罗斯方块手机游戏 基于 J2ME 的俄罗斯方块手机游戏 软件著作权登记申请 文档及源程序材料 申请人: 申请人: 河海大学 电子信息工程 王楷 1 本软件通过采用蓝牙技术使手机用户能在小区内进行联网俄罗斯方块游戏。 在进行设计时通过 NetBeans IDE 5.0 和 Mobility Pack 搭建的 J2ME 编程软件, 编 CLDC 写了游戏程序, 通过对系统和蓝牙技术的分析研究, 确定了系统的架构为: (Connect Limited Device Configuration)有限制的连接设备网络,使用的蓝牙激 素和标准为: JAVA 开发社区 (JCP) 发布了基于 J2ME 平台的蓝牙 API 规范 JSR82 (Java 蓝牙无线技术 APIs,Java APIs for Bluetooth Wireless Technology) 。 下面介绍一下该软件的开发环境、软件功能、设计过程以及软件的操作使用。 开发环境: 开发环境: J2ME 技术 通过对手机的增值应用的开发,Java 的跨平台应用就被完整的移植到手机应用上。Java 对于手机的支持也在很久就提出了,Java Sun 早期对系统应用就定义出三个 Java 平台,每 一项都定义给不同的使用环境,而这三种平台的应用环境分别为:1、Java 标准版 Java 2 Standard Edition(J2SE);2、Java 企业版 Java 2 Enterprise Edition(J2EE) ;3、Java 微型版 Java 2 Micro Edition(J2ME)。这三个平台分别应用于企业和个人平台,且这三种平台环境技术发 展的很完善。如图所示三种环境的关系。 图 J2EE、J2SE、J2ME 之间关系 在提出 J2ME 平台时,将它定义为“一种以广泛的消费性产品为目标的高度优化的 Java 运行环境” 。这样的定义是因为 J2ME 应用起源与一些需要支持类似计算机功能的电子消费 性产品和嵌入式终端的开发, 由于这些小型终端设备与普通大型设备相比较没有统一的硬件 配标准,并且外观、操作方式也是千差万别,同时这些终端设备通常是使用有限电源、有限 网络连接以及有限图形用户界面能力的设备。 为了在应用这些终端设备的时候能够及时考虑到整体设备的发展与规划, 进而创造出能 实际描绘兼容性终端设备的 J2ME 平台应用环境, 所以 J2ME 跟 J2SE 平台标准版规范、 J2EE 平台企业版标准规范相比,J2ME 不是一个单独的技术规范,为是一系列的技术规范总称。 J2ME 所包含的应用环境可以为: 个人化与移动式的终端设备: 具有能够处理间断性的网络连接能力, 列入移动电话、 寻呼机、个人数字助理、个人数字移动式设备; 固定式连接信息设备、不间断网络连接:如机顶盒、网络电视、网络视频电话、高 级终端通信设备、车载娱乐系统、车载导航系统等。 在实际应用中,其应用能力是区分这两种类型设备的最主要条件。J2ME 平台能够给市 场上具有不同功能的终端设备提供不同的服务。J2ME 的设计证明了主要的机器标准设计方 2 式能够支持多种类型的终端设备。 J2ME 平台的开发环境配置 由于 J2ME 平台应用的针对性,对它的配置也有别于其他 Java 语言程序开发平台,且 其支持的 Java 类库等也与其他开发平台有所区别。所以需要使用一些专用的软件对其进行 配置,以下就对这些用于配置的开发软件和其所支持的 Java 语言和类库进行介绍。 JDK、WTK 及开发工具简介 、 JDK(Java Development Kit)是 Sun Microsystems 针对 Java 开发员的产品。 自从 Java 推出 以来,JDK 已经成为使用最广泛的 Java SDK(Software development kit) 。 JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Environment) ,一堆 Java 工具和 Java 基础的类库(rt.jar)。不论什么 Java 应用服务器实质都是内置了某个版本的 JDK。 因此掌握 JDK 是学好 Java 的第一步。最主流的 JDK 是 Sun 公司发布的 JDK,除了 Sun 之 外,还有很多公司和组织都开发了自己的 JDK,例如 IBM 公司开发的 JDK,BEA 公司的 Jrocket,还有 GNU 组织开发的 JDK 等等。 JDK 包含的基本组件包括: (1) javac 编译器,将源程序转成字节码; (2) jar 打包工具,将相关的类文件打包成一个文件; (3) javadoc 文档生成器,从源码注释中提取文档; (4) jdb debugger,查错工具; (5) java 运行编译后的 java 程序(.class 后缀的) ; (6) appletviewer: 小程序浏览器, 一种执行 HTML 文件上的 Java 小程序的 浏览器; (7) Javah:产生可以调用 Java 过程的 C 过程,或建立能被 Java 程序调用的 C 过程的 头文件; (8) Javap:Java 反汇编器,显示编译类文件中的可访问功能和数据,同时显示字节代 码含义; (9) Jconsole: Java 进行系统调试和监控的工具。 WTK 的全称是 Sun J2ME Wireless Toolkit Sun 的无线开发工具包。 这一工具包的 设计目的是为了帮助开发人员简化 j2me 的开发过程。使用其中的工具可以开发与 Java Technology for the Wireless Industry (JTWI, JSR 185)规范兼容的设备上运行的 j2me 应用程 序。 WTK 是用来开发 MIDP 的, 为了让 MIDlet 可以顺利编译和执行, WTK 必须具有 CLDC 和 MIDP 的类库,WTK 可以帮助我们省去额外安装调试这些类库的时间。该工具箱包含了 完整的生成工具、 实用程序以及设备仿真器。 现在人们可以获取的有四个版本, 分别是 1.0.4、 2.0、2.1 和 2.2。每个版本都包括英语、日语、简体中文、繁体中文 4 个语种包。 1.0.4 版只能够开发 MIDP1.0 应用程序; 2.0 版只能够开发 MIDP2.0 应用程序; 2.1 版 则 可 以 同 时 开 发 MIDP1.0 、 JTWI(CLDC1.0,MIDP2.0,WMA1.1) 可 改 用 CLDC1.1 或加入 MMAPI1.1),自定义(自己随机组合 Configuration, Profile 以及 Java 3 Optional Package)三种环境下的应用程序。 在 2.2 版中,WTK 全面的支持 JTWI 规范。具体的说,即 MIDP2.0、CLDC1.1、 WMA 2.0、MMAPI 1.1、Web Services (JSR172)、File 和 PIM APIs (JSR75),Bluetooth 和 OBEX APIs (JSR 82)以及 3D Graphics (JSR 184);同时在开发时也可以使用该版本开发面向 CLDC1.0 和 MIDP1.0 的应用程序。而不同版本的 WTK 包含的程序库内容是不一样的,比如说 2.0 中包 含了 midpapi.jar、wma.jar、mmapi.jar,而在 2.1 中则变为了 cldcapi10.jar、cldcapi11.jar、 midpapi10.jar、 midpapi20.jar、 wma.jar 以及 mmapi.jar; 2.2 中, 在 wma.jar 又细分为 wma11.jar 和 wma20.jar。 常用的 package: (1) java.lang:这个是系统的基础类,比如 String 等都是这里面的,这个 package 是唯 一一个可以不用 import 就可以使用的 Package; (2) java.io:这里面是所有输入输出有关的类,比如文件操作等; (3) :这里面是与网络有关的类,比如 URL,URLConnection 等; (4) java.util:这个是系统辅助类,特别是集合类 Collection,List,Map 等; (5) java.sql:这个是数据库操作的类,Connection,Statememt,ResultSet 等; (6) javax.servlet:这个是 JSP,Servlet 等使用到的类。 配置 J2ME 开发环境 J2ME 开发环境可以由 JDK 加上 jbuilder 或 netBeans 或者 eclipse 进行配置, 由于本课 题是采用 JDK 加上 NetBeans IDE 进行配置开发环境的,所以主要介绍这种配置方法。在上 节以对 JDK 进行了详细的介绍, 下面就对先对本课题采用 NetBeans IDE 和 Mobility Pack 软 件进行介绍。 NetBeans IDE 是由 Sun 建立的开放源码的软件开发工具,是一个开放框架,可扩展的 开发平台,可以运行在 Windows、Mac、Linux、和 Solaris 平台下,可以用于 Java、C/C+ 等的开发,其本身是一个开发平台,并且可以通过扩展插件来扩展功能。 NetBeans IDE 包含以下功能: (1) ava 桌面应用程序使用 NetBeans Java GUI Builder(支持 Swing 应用程序框架和 Bean 绑定)创建专业桌面应用程序; (2) PHP 开发快捷的轻量级 PHP IDE,具有代码完成和快速修复功能,集成了 FTP 和 Xdebug,并支持常用的 Web 服务; (3) Java EE 和 Web 应用程序使用 Ajax、 JavaScript 和 CSS 生成 Web 应用程序。 支持 包括 JSF、Struts、Spring 和 Hibernate 在内的框架。用于进行 EJB 开发的完整工具 集; (4) Ruby 和 Ruby on Rails 开发具有代码完成功能的强大 Ruby 编辑器和调试器,完 全支持 Ruby on Rails。包括 JRuby 运行时; (5) 可视移动开发创建、测试和调试在移动电话、机顶盒和 PDA 上行的 GUI 应用程 序; (6) C 和 C+开发功能完备的 C/C+编辑器、调试器、项目模板,支持多项目配置、 4 远程开发以及对已完成项目进行打包。 Mobility Pack 是 NetBeans IDE 的扩展无线开发模块,Mobility Pack 用于开发、测试和 调试 MIDP 应用程序。同时 Mobility Pack 还可以很容易地与第三方模拟器集成为开发者提 供所需的运行环境。本课题就是通过 Mobility Pack 5 的无线应用开发进行设计的。NetBeans IDE Mobility Pack 具有的一些特性为: (1) 流程设计器:支持 Drag-and-Drop 方式,可以自由定制执行流程,显示窗口以及执 行动作;并且自动生成相应的代码; (2) 无线连接向导: 通过 Midlet 与 Web Service 和服务器端代码进行连接, 支持 JSR-172; (3) 用户定义配置:当开发与配置相关的应用时,可以使用项目模板一次性创建配置, 然后在不同的项目当中重复使用; (4) 部署向导:通过 WebDAV、FTP、SCP 等方式将 Midlet 上传到设备上进行部署; (5) 本地化 MIDP:允许加入本地化的一些 MIDP 模块; (6) CDC 项目向导:添加了对 CDC 项目的直接支持; (7) 可以利用 Matisse 进行 CDC 开发时的界面编辑; (8) 支持 Sony Ericsson CDC Platform 1 和 Nokia S80 平台; (9) 支持第三方模拟器:NetBeans IDE 5.0 可以支持几乎所有主流手机厂商的开发平台 模拟器,包括:Motorola、Nokia、Samsung、iemens、BENQ 和 Sony Ericsson; (10) JUnit 支持:可以使用 JUnit 测试 CDC 应用程序。 在配置 J2ME 环境时, 首先安装 JDK, 在安装 NetBeans IDE 5.0 然后在安装 Mobility Pack 5.0,最后安装所需的开发平台模拟器。在进行本课题设计时,针对本课题需求选择环境架 构。 J2ME 配置层和简表层 配置层(Configuration)和简表层(Profile)是构建 J2ME 标准设计的主要元素,这两种元 素能够为 J2ME 提供支持多样性的终端设备的能力。J2ME 定义了家庭式终端设备的最小 Java 平台, 其需求是内存和处理器的能力, 而简表层则是真正规范与定义出系统设备的可用 程度。 图 J2ME 平台所组成的基本层次 在配置层(Configuration)中规范出三个基本元素: 5 规定了 Java 的编程语言特性; 规定了 Java 虚拟机特性; 规定了所支持的 Java 类库和应用程序接口(API) 。 J2ME 的设计者之定义了两个架构层,为了避免分隔出两个不兼容的平台,定义了两个 架构,这两个架构层为: (1) 个人的、间歇性连接的移动设备:有限连接设备配置(CLDC) ; (2) 经常性连接的网络终端设备:连接设备配置(CDC) 。 Application 应用程序 Foundation 基础规范类 CDC 连接设备配置 Host Operation System 主机操作系统 Device Hardware 硬件设备 Application 应用程序 MIDP 移动信息设备规范类 CLDC 有限连接设备配置 Host Operation System 主机操作系统 Device Hardware 硬件设备 图 CDC 与 CLDC 平台框架 连接设备配置 连接设备配置(The Connected Device Configuration,CDC),这是第一个 J2ME 架构。 这种配置取决于终端设备所提供的必要支持,目标是设备要有 2MB 以上内存,包含 RAM 和 ROM。 配置层中包扩设置 JVM 的性能要能支持其所设置的类库。 CDC 规范中使用 Java 2 平台的虚拟机内存,这里统称为简易虚拟内存(Compact Virtual Machine,CVM) 。而简易 虚拟内存(Compact Virtual Machine,CVM)产品的主要特性为: (1) 可移植性,快速同步化; (2) 提升内存系统,可在 ROM 外执行 Java 类; (3) 最小的平均垃圾收集暂停时间; (4) 内存系统与虚拟机完全分离; (5) 模块化的垃圾收集; (6) 插入式垃圾收集机制; (7) 支持本地线程,Java 线程直接对应到本地线程中; (8) 提供接口支持实时性系统服务。 通过如上所述,从基本架构来看,通过被创建的类的使用情况,指出了 CDC 规划出最 小的类库和 API,它所提供的 Java Package 标准如表所示: 表 CDC 架构提供的 Java 包标准 Java 目录包 java.lang Java 虚拟机系统类 6 说 明 java.util java.io java.text java.security 底层的公用 Java 类 普 通 数 据 封 装 包 通 信 协 议 ( UDP ) 和 输 入 / 输 出 (I/O)类 Jav 文件的(I/O)使用类 支持最小的国际化类库集合 最小的对象序列化所需安全集合加密机制 在上表中可以发现许多的 API 并不包含 Java2 的 SDK。而有一些 package 与 class 是从 Java2 中的 SDK 中延用的,其使用的条件是必须要移除 J2SE 多余的 package 和 class,而不 是要移除 J2SE 的 API。下表列出了 CDC 所支持的 Package。 表 2-2 CDC 所支持的包文件 CDC 目录名称 java.io java.lang java.lang.ref java.lang.reflect java.math java.security java.security.cert java.text java.util java.util.jar java.util.zip java.microedition.io 标准 IO 类和接口 虚拟机类 参考类 参考类和接口 数学运算类库 网络类和接口 安全类与接口 安全认证类 文字目录 底层公用类 Java 文件(jar)公用类 ZIP 压缩公用类 CDC 一般连接架构类和接口 描 述 上表中的 Java.microedition.io 的开发包中的几个接口和类实现了应用程序通用连接框 架。文中提到的 API 的全称为:Application Programming Interface,即应用程序接口。 有限连接设备配置 有限连接设备配置(Connected Limited Device Configuration,CLDC)是第二个 J2ME 架构。CLDC 规范也定义了终端设备具有以下特性: (1) 60KB512KB 以下内存用于 Java 运行; (2) 16-bit 或 32-bit 处理器; (3) 有限能源供应(通常使用电池作为供能设备) ; (4) 有限或间断的网络连接。 有限连接设备配置的目标是给终端设备定义一个标准平台, 主要移动电话上会有不同的 系统软件,同时要在现存的环境中使用最小的配置环境。 CDC 规范和 CLDC 规范所支持 Java 程序语言层度有所不同,在 CLDC 的 Java 语言支 持部分移除了部分 Java 语言的功能特性:1、浮点运算能力;2、对象实例的销毁;3、不支 持 java.lang.Error 的大多数子类。 而有关 Java 虚拟机的和支持库, CLDC 要求必须有虚拟机, 因为它定义了高可移植性并且是为有设备限制小型终端设备所设计。 所以有些在标准的环境 定义的 Compliant VM 特性不予支持。以下为不支持在 CLDC 下的 Compliant VM 的特性: 不支持 Java 本地接口 JNI; 7 不支持用户定义的 Java 类加载; 不支持反射特征; 不支持线程组和守护线程; 不支持类实例的销毁(在 CLDC 类库无 Object.finalize 方法) ; 不支持弱引用; 在错误处理上的限制(J2SE 小型错误自己是支持的) ; 不支持类文件验证。 有限连接设备配置包含一个基本的 J2ME 运行环境,包括了虚拟机和核心的 Java 类库。 有限连接设备配置是专门针对小型设备所设计,对 J2SE 类库进行了大量的简化。CLDC 保 留 Java 规范中所定义的核心 3 个包,即 java.io、java.lang、java.util,并且重新定义一个新 的目录 javax.microedition.io,用来支持通用框架(GCF,Generic Connection Framework) 。这 里可以用前缀来进行区分,如 java.表示核心的 java 目录,而 javax.表示为 java 的扩展目录。 CLDC 中目录所对应的功能如表所示。 CLDC 目录 java.io java.lang java.util javax.microedition.io 描 述 标准 Java IO 类和 J2SE 目录的子集 VM 类和接口,J2SE 目录子集 实用类的 J2SE 标准子集 CLDC 的通用连接框架类和接口 表 CLDC 所支持包文件 移动信息设备简表 移动设备信息简表(Mobile Information Device Profile,MIDP)是位于 CLDC 上层的简 表层。CLDC 因为资源受限的关系,不足以支持标准的虚拟机开发环境和类库以及 Java 语 言程序的一些应用。在使用只有 CLDC 提供的 API 来进行编程是几乎不可能实现的,因为 CLDC 中并没有提供给使用者与用户、相关存储设备或网络做直接交互的工具,CLDC 是一 个基础层次,为了满足个用户使用特性,在 CLDC 层次上构建一系列简表层(Profiles)来 支持 CLDC 所不足的功能。其中“移动性息设备简表”就是简表层中的一种。 MIDP 位于 CLDC 上层的简表层,是目前 J2ME 平台中发展最成熟的部分。MIDP 针对 的是移动信息设备类,这类设备通常指手机或者是 PDA,它们在屏幕、内存或处理器等硬 件特性上有很多限制。因此在 MID 上开发应用程序或游戏,就必须考虑相关的问题。从 MIDP 的规范中定义出移动信息设备的最小特征: 显示屏最小尺寸为 96*54 像素; 显示色彩深度为 1 位; 设备核心:有效运行 KVM 的能力; 网络状态:双向的、无线的、间断的和有限带宽的连接网络; 输入设备: ITU-T 手机键盘 (One-Handed Key Board) 或者是标准键盘 (Two-Handed Keyboard,即 QWERTY 键盘)与触摸屏; 8 128kb 存储空间用于 MIDP 组件中; 8kb 存储空间应用于应用程序生成的永久数据; 32kb 的可变存储用于 Java 运行环境使用。 因为 MID 能力范围有限, MIDP 建立的目标位最少的终端设备能力的共享性质在 MIDP 中规范。其 API 如下: (1) 应用方式(MIDP 应用程序语义和控制) ; (2) 用户界面应用; (3) 持久存储器应用; (4) 网络应用; (5) 计时应用。 MIDP 规范中定义的 Packeg 与 Class 如表显示。 表 MIDP 规范中定义的包文件 MIDP 目录名称 javax.microedition.Icdui javax.microedition.rms javax.microedition.midlet javax.microedition.io java.io java.lang java.util UI 类和接口 记录和管理系统(RMS)支持持久的设备存储器 MIDP 应用程序支持的类 MIDP 通用连接框架的网络支持类和接口 标准 Java.io 类与接口 VM 类和接口 基本的公用类和接口 描 述 上表中 javax.microedition.Icdui 的 UI API 为 MIDP 应用提供了一个用户界面 javax.microedition.rms 中 MIDP 为 MIDlet 提供了一个可以再移 的实现特征集合; 动设备上存储数据数据的机制;javax.microedition.midlet 定义了 MIDP 的应用及 Javax.microedition.io 包含源自 CLDC 的通用连接 该应用在运行时与环境的交互; 框架的网络支持;java.lang、java.io 与 java.util 是 MIDP 从 J2SE 核心类中继承过 来的核心类。 具体环境配置方法 1安装 J2SDK1.4.2 到指定位置; 2安装 NetBeans IDE 5.0,在安装时选择已安装的 J2SDK; 3安装 Mobility Pack 5.0,在安装时需制定为 NetBeans IDE 5.0 的安装目录; 4安装 Nokia_S40。 9 J2ME 开发环境界面图 开发环境的编程窗口、调试窗口、 开发环境的编程窗口、调试窗口、输出结果 的编程窗口 10 软件功能: 软件功能: 移动电话的发展堪称迅猛,是近几年快速成长的新兴产业,其技术越来越成熟,采用的 技术越来越先进,手机已从普通移动通信终端向智能终端转变,所支持的功能越来越多。自 从后 PC 时代(后 PC 时代是指:将计算机、通信和消费产品的技术结合起来,以3C 产品的 形式通过 Internet 进入家庭。 )的来临,市场已经逐步将计算机产业的功能转移到了手机应 用上,使得目前的手机不仅提供单一通话功能,还兼具了娱乐、个人助理、无线数据传输及 无线上网的功能。 随着目前手机的普及和硬件设备性能的提升, 开发手机游戏已经成为了一个新的经济增 长点,一个快速增长的产业。由于手机作为小型终端设备,所拥有的设备、资源有限,所以 对运行的程序有所限制, 通常是需要程序运行时所占用的内存和内核的资源较少。 且由于手 机的生产厂商的不同, 所以各款手机的配置不同, 且同一生产厂家生产地手机配置也可能不 同,所以在进行手机游戏的设计时,需要针对不同手机进行参数配置。 人们通过不断的研究创新, 现在开发出的单机版的手机游戏在交互性和视觉效果上已经 有了很大的提升,在手机现有得软、硬件发展程度下,尤其是手机内核处理能的提高,以及 内存容量的增大,手机游戏质量不断上升,现在单机版手机游戏在游戏画面、游戏音效、游 戏操作性等方面基本上已经发展到极致。 而现在软、硬件的发展程度已经满足了开发无线联网游戏。现有的手机联网的方式有: 红外连接、蓝牙连接以及收费的连接等。手机红外连接利用红外线进行连接,传输距离最大 可达 2m,对障碍物的衍射能力较差,应用时需要进行直线连接。蓝牙一词作为新的无线通 信技术标准的代称, 是一种无线数据与语音通信的开放性标准, 以近距离和低成本无线连接 为基础,将终端设备进行连接,其最远连接距离为 100m,且在使用时不需要进行直线连接。 蓝牙技术经过多年的研究开发,该技术已很成熟,有广泛的用途。根据调查显示,由于网络 流量费用的关系, 手机玩家更加愿意接受在局域网内进行不收费连接的游戏, 在考虑到应用 的可能性及便利性时, 蓝牙连接成为进行手机联机游戏的首选, 这就为蓝牙技术的应用提供 了一个很好的领域。 俄罗斯方块这款游戏是由苏联的游戏制作人阿列克谢.帕基特诺夫在 1985 年 发明的。这款游戏曾风靡一时,已然成为一款经典的游戏,就是现在也有着大量 的玩家。 本次设计的俄罗斯方块游戏系统可以进行单机模式和联网模式的游戏,通过采用蓝牙 技术使手机用户能在小区内进行联网游戏,根据用户自行选择可以满足用户的不同的需求, 增加了趣味性、游戏性。 软件设计过程 软件设计过程 总体设计思路 因为本软件设计的系统为: 实现俄罗斯方块游戏的运行, 并且增加了手机小区内蓝牙联 网的功能。因此考虑到该课题为实现手机的联网游戏,为了便于区分变量,故在程序中定义 了两组类似的类成员变量和常量, 类中除共享的成员变量外, 变量均需要定义本地玩家和远 端玩家两份,默认定义远端的均添加_Remoteh(或者_REMOTE)后缀。 本次软件的设计主要分为两个大的模块,一个是游戏模块,另一个是蓝牙联网模块。在 游戏模块中包括游戏的逻辑控制、屏幕的绘制、游戏地图类等;在蓝牙联网模块主要包括蓝 11 牙设备的发现及服务、数据传输等。 游戏的功能定义:能够实现俄罗斯方块游戏运行,具有单机及联网游戏功能。 知 道了基本条件, 就可以开始设计游戏了, 编写者必须对俄罗斯方块游戏的规则进行严格的描 述。可以这样定义:屏幕上有一个 X 列 Y 层的区域,计算机自动产生多种不同类型的方块, 并出现在区域的最顶端; 然后每过一个固定时间间隔向下落一层, 玩家可以使用键盘控制方 块向三个方向移动和顺逆时针旋转 90 度。 不过前提是方块移动和旋转后的位置必须是空的。 当方块落到区域底部或者另一方块之上将停止移动, 然后新的方块会产生。 当新方块无处放 置的时候:GAME OVER。 各模块方案的选择与论证 考虑到硬件的因素,J2ME 程序不能很大,通过已有的手机游戏来看,多数在 100 KB 以下。而且其中大部分是图片和声音,代码只占其中很少一部分。在 J2ME 程序比较小时, 为了提高程序的执行效率,通常的做法是只用一个类完成整个应用程序。 同时在进行软件设计时,将不同功能按照模块划分,对每个模块的设计提出了很多方 案,在通过研究论证后,逐步找到了最优的方案。下面就对主要的模块进行可行性分析与论 证,寻找最优设计。 游戏逻辑控制 首先是定义游戏相关的数据存储方法,分为两个主要的部分,一个是当前的方块,需要 保存位置、当前的旋转状态;另一个是屏幕区域的状态,这可以用一个二维数组来表示。 其次还有按键分析模块: 分析得到按键的含义, 做出响应; 响应模块: “左”、 “右”、 “下”、 “移动”和“旋转”几个模块,负责改变当前方块的状态数据;画方块模块:位置移动后,把方 块画到新的位置之上;检查模块:在每次状态改变之前,对方块企图占用的区域加以检查。 如果无处可放,则此次移动失败。如果方块到底了,应该固定在当前位置,这可以调用前面 的画方块模块实现,同时再产生一个新的方块。这样还需要产生新方块的模块。还有当每次 方块到底的时候,都需要检查一下是否有新的层排满了,如果有的话应该消层。这就又需要 用到两个模块,检查是否排满和消层。产生新方块时也需要检查其产生的位置,如果这个位 置已被占用,则游戏结束。 同时下坠块通过分文 7 种, 每种下坠块通过 4 个三维数组来表示其状态, 在调用下坠块 时, 通过其三维坐标值和旋转值就可以来确定下坠块的形状。 在设计时还要考虑到下坠块下 坠时间和下坠速度的问题,在一个下坠块位置固定后,则下一个下坠块开始下坠,同时设计 一个定时器通过对其的调用,就可以实现对下坠块速度的控制。 在游戏进行时需要对游戏状态进行判断, 即游戏正常继续运行和游戏结束两种状态, 判 定的依据为游戏容器的最上方坐标与固定的方块坐标进行比较, 若固定的方块超过游戏容器 的高度,则判定游戏结束,调用屏幕绘制程序,显示游戏结束状态;若固定的方块未超过游 戏容器的高度,则继续游戏。 远/近端屏幕绘制 近端屏幕绘制 屏幕的绘制要考虑到单机模式和联机模式, 在两种模式下绘制有所不同。 在单机游戏模 式下,整个手机屏幕被划分为两个部分,左边为游戏容器部分,游戏主要在该容器内进行, 右边显示游戏分数、状态、等级下一个坠落快等。图 a 为单机游戏屏幕示意图。在进行单机 模式下游戏时,通过设定一个固定的时间值来进行屏幕的刷新,控制对下坠块的绘制;且在 有新的下坠块产生或进行消行时也调用函数对屏幕进行重新绘制进行刷新, 这样也就保证了 在游戏时不会有间断感,使游戏感觉流畅。 12 图 a 单机模式屏幕绘制示意图 在联网游戏模式下,屏幕的左半部分绘制两个屏幕,这两个屏幕一大一小,小屏幕显示 的是远端玩家信息, 大屏幕绘制的是本地玩家的游戏状态, 在屏幕的左部分分别显示本地玩 家和远端玩家的分数、状态、等级下一个坠落快等。如 图 b 为联机模式屏幕示意图。 图 b 联机模式下手机屏幕绘制示意图 在图 b 中, 当在进行蓝牙联机模式下游戏时, 通过设定一个固定的时间值来进行对主屏 的刷新, 控制对下坠块的绘制; 且在有新的下坠块产生或进行消行时也调用函数对主屏的屏 幕进行重新绘制进行刷新,而附屏通过传输过来的数据对屏幕进行更新,设定一个时间值, 每过一定的时间则向远端发送一次数据, 且每当本地玩家有消行或新下坠块产生时, 也发送 数据,这样就保证了附屏更新的实时性。 小区内蓝牙联网 越来 越多的移动手 机开始支 持 java 应 用,应 用于无 线蓝牙技术标 准的 java APIs (JABWT) 由 JSR 82(Java 蓝牙无线技术 APIs, , Java APIs for Bluetooth Wireless Technology) 规范定义,支持快速开发便捷、及用途广泛的蓝牙应用。无线设备生产商已对 JABWT 规范 做出反应,他们宣布移动手机和其它产品将支持 JABWT 应用。即本课题选用的蓝牙规范为 13 J2ME Wireless Toolkit 所支持的 JABWT。toolkit 的 Preferences Utility(使用偏好)提供了新 的 Bluetooth/OBEX 标签以进行蓝牙参数设置。在此栏下 OBEX 设置和三个蓝牙子标签,它 们分别是:Internal Properties(内部属性)标签允许你设置设备搜索的超时时间,System Properties (系统属性) 标签允许用户定义一些调用 LocalDevice.getProperty()方法便可得到蓝 牙属性。这里对 JSR82(JABWT)规范进行简单讲解。 蓝牙 API 依赖 java 通用连接框架,Java 蓝牙 API 定义了两个包:一个是 Java 蓝牙 API 的核心 javax.bluetooth,另一个是用于对象的 javax.obex(OBEX) 。根据 JSR 82 规范,所有 潜在蓝牙系统都必须支持蓝牙控制中心(BCC) ,该控制中心是一个控制面板,它的作用类 似于可以让用户或 OEM 给堆栈中的某些配置参数定义具体值得应用程序,特别是,它将应 用于堆栈初始化中。 任何蓝牙应用都有以下这些组件:堆栈初始化组件,设备管理组件,设备发现组件,服 务发现组件和通讯组件。 JSR82 规范定义的 API 中包括 21 个类及接口。JSR82 的最小需求是受限连接设备配置 (CLDC) ,而可靠连接设备配置(CDC)是 CLDC 的超集,所以 JSR82 可以再 CLDC 及 CDC 上实现,即可以再任意 J2ME 环境下支持使用 JSR82 规范。 JSR82 被设计为支持数据传输,不支持语音传输。它从便于开发的角度所规定的 API 分为:设备/服务发现(Discovery) 、通信(Communication) 、设备管理(DeviceManagement) 3 大类。发现类包括设备的发现、服务发现和服务注册的类或接口;通信类包括在串行剖面 层次、RFCOMM 层次、L2CAP 层次和 OBEX 层次建立连接和使用连接的类或接口;设备 管理类包括代表控制和管理的类或接口。 基于 JSR82 的协议栈如图 c 所示,黄色部分为 JSE82 规范提供给 Java 平台开发者的蓝 牙软件栈。 图 c 基于 JSR82 的协议栈 JSR82(JABWT)与 MIDP、CLDC 的关如图 d 所示,CLDC 是 MIDP 和 JSR82 的基础。 14 无论 MIDP 还是 JSR82 均给予 CLDC 而设计。 图 d JSR82 与 MIDP、CLDC 的层次关系 下面介绍设备管理 API。设备管理 API 有 3 个主要的类来支持设备管理:.LocalDevice 类(本地设备类) ;.RemoteDevice 类(远端设备类) ;.DeviceClass 类。 本地设备类(LocalDevice 类)标识了本地蓝牙设备。蓝牙应用程序和 LocalDevice 之间 的关系是典型的一对一关系,如图 e 所示。 图 e 本地设备类 本地设备提供了方法来返回关于本地设备的信息,并且能够进入 Bluetooth manager: (1) .getBluetoothAddress()返回蓝牙设备地址; (2) .getDeviceClass()返回设备类; (3) .getFriendlyName()返回设备友好名称, 蓝牙设备名通常是用户在蓝牙控制中心为其 设置的; (4) .getRecord()返回一个指定蓝牙连接的服务记录; (5) .updateRecord()方法用来为指定的 ServiceRecord 更新 SDDB 服务记录; 15 (6) .getDiscoverable()返回设备的可发现状态; (7) .setDiscoverable()设置设备的可发现状态; (8) .getDiscoveryAgent()返回一个参考给发现代理; (9) .getProperty()返回一个设备的蓝牙属性。 通过调用 getProperty()方法用户可以得到的属性包括: (1) .bluetooth.api.version,蓝牙 API 版本; (2) .bluetooth.sd.attr.retrievable.max,一次性能够被获得的服务记录属性的最大值; (3) .bluetooth.connected.devices.max,支持的连接设备的最大值; (4) .bluetooth.sd.trans.max,同时发生的服务发现处理的最大值; (5) .bluetooth.l2cap.receiveMTU.max,L2CAP 最大发射单元。 远端设备类(RemoteDevice)一个 RemoteDevice 的实例代表了一个远端蓝牙设备。在 一个蓝牙客户端应用程序可以进行服务, 消费之前, 它必须发送一个设备请求来发现远端设 备。典型的蓝牙应用程序和远端设备之间的关系是一对多,如图 f 所示。 图 f 远端设备类 远端设备(RemoteDevice)提供的方法中,有些很类似于本地设备(LocalDevice)里提 供的方法: (1) getBluetoothAddress()返回蓝牙地址; (2) .getFriendlyName()返回蓝牙设备名; (3) .getRemoteDevice()返回相应的被指定蓝牙连接的远端设备; (4) .authenticate()尝试识别验证远端设备; (5) .authorize()为指定的蓝牙连接去尝试批准远端设备访问本地设备; (6) .encrypt()尝试为指定的蓝牙连接开启或关闭加密; 16 (7) .isAuthenticated()测试是否远端设备可以被验证; (8) .isAuthorized()测试是否远端设备已经被蓝牙控制中心授权访问本地设备以进行蓝 牙连接; (9) .isEncrypted()测试是否本地设备和远端设备之间的通信被加密; (10) .isTrustedDevice()测试是否远端设备被蓝牙控制中心指定为可信任的。 DeviceClass 类。一个 DeviceClass 对象代表一个设备的设备类(CoD) ,例如一个打印 机或者一部电话。CoD 包括一个主类,一个辅的类,和服务类型或服务类。DeviceClass 提 供了如下方法: (1) .getMajorDeviceClass()方法获取设备的主类; (2) .getMinorDeviceClass()方法获取设备的辅类; (3) .getServiceClasses()获取设备的服务类。 当一个设备被发现,同时他的类也会被发现;当发现代理调用 deviceDiscovered()时, 其中一个参数就是 DeviceClass。用户可以通过它的 getDeviceClass()方法找到本地设备的 CoD。 系统的最终方案 本软件通过 NetBeans IDE 软件搭建的 J2ME 环境开发平台,编写 Java 应用语言的手机 游戏程序。该课题可以主要分为两大模块: 基于 JSR82 的设备与服务的发现和建立连接; 游戏的控制和屏幕绘制等。 考虑到游戏为联机游戏, 因此在开发时应该注意变量的区分, 应在程序中定义两组类似 的成员变量和常量, 类中除共享的成员变量外, 变量都需要定义成本地玩家和远端玩家两份, 通过对远端变量增加_Remote(或者_REMOTE)后缀来区分本地变量和远端变量。 在程序设计时,应该考虑到下坠块的设计问题,本课题设计采用三维数组来表示,通过 增加其旋转值的设定, 来表示 7 种下坠块旋转形状的改变, 对与 7 种下坠块对于其形状和对 应的颜色都有一个对应的 ID 值,这样方便了值的调用。 同时对与游戏的逻辑控制和地图的控制也是本课题的重点之一,屏幕的绘制方法为两 种,一种是玩家进行时单机模式进行游戏时的绘制方法,另一种为联网模式下屏幕的绘制。 而在联网模式下逻辑控制的判定机制和单机模式下的逻辑控制的判定机制也有所不同, 即游 戏胜利的判定条件不同。游戏在进行单机模式运行时,游戏的判定机制为:当屏幕已被填满 则判定游戏结束;而游戏在进行联网模式下运行时,通过蓝牙接口实现数据的通信,在远端 屏幕被填满, 判定游戏结束, 远端玩家主屏显示游戏结束, 本地玩家游戏主屏显示游戏胜利, 反之亦然。 系统软件设计 系统软件设计 本软件的系统操作流程分为以下几步: (1) 用户启动 MIDlet 后,首先进入 Master/Slave 选择画面,若选择 Slave,则向周围广 播自己的服务,然后等待;若选择 Master,则搜索周围服务。Master 端在搜索到 17 服务后, Slave 端的服务描述信息显示在屏幕上, 将 若选择 Singer 则进行单机游戏; (2) Master 选择想与之进行游戏的 Slave (在搜素已存在的服务时可能不只一个) 建立 , 连接; (3) 按“开始”键,判断远端玩家是否已经同意开始游戏(进入“等待”状态) ,如果 没有同意,则“等待” (GAME_WAIT) ,并且发送“等待”信号给远端玩家; (4) 按 “开始” 如果远端玩家已经 键, “等待”GAME_WAIT)则 ( , “初始化”GAME_INIT) ( 游戏,同时发送该信号给远端玩家; (5) 开始游戏后,再按“开始”键,则进入暂停(GAME_PAUSED)状态,再按次则 继续运行游戏(GAME_RUN)状态,两种状态可以相互切换; (6) 若收到对方游戏结束(GAME_OVER)的信号,则主屏上显示胜利(GAME_WIN) 画面,附屏显示示游戏失败的画面,若本地玩家游戏结束,则本地玩家主屏显示游 戏失败的画面,附屏上显示游戏胜利的画面,并发送该信号给远端玩家; (7)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论