基于J2ME的手机连连看游戏开发


摘 要


J2ME虚拟机在手机上的普及为手机游戏的发展提供了最适合的土壤,随着MIDP2.0的发布,特别是其中新增的GameAPI使得手机游戏开发者可以更专注于游戏性的增强而不再是繁琐的动画处理与地图设计,让开发过程变得更加方便迅捷,它是手机游戏发展的重要里程碑。

随着社会节奏的加快,平常工作的竞争强度也加大,生活的压力也跟着加重。所以休息时或下班后大家都需要个休闲的娱乐工具,来放松自己,缓解自己的压力,消除紧张的疲劳状态。连连看游戏是一种意趣休闲的小游戏,不仅能调节精神,还能在游戏中锻炼我们的眼力视野,注意力的专心的程度,开发我们的思维能力,同时可以充实自己,向高等级挑战,培养我们面对困难时自己所具有攻克困难的信心。

本文完整地描述了如何在Jbuilder平台应用J2ME技术,特别是MIDP2.0中新增加的GameAPI在手机上实现连连看游戏(原型为电脑上游戏《连连看》),核心在于其GameMap类这一模块的构建。其中涉及到的技术有Midlet框架、游戏状态机、线程、精灵、地图、关卡、程序优化及兼容性设计等。

第一章介绍了J2ME游戏背景,及对论文中术语的约定;

第二章介绍了本游戏的开发平台及要使用的主要技术;

第三章对游戏进行了简单的需求分析;

第四章是游戏的具体实现,并描述一些关键性技术;

第五章是对整个过程的实现与测试。


关键词:J2ME,Midlet框架连连看地图







BUSINESS RULE DISCOVERING AND RULE

ENGINE APPLICATION RESEARCH



ABSTRACT



J2ME virtual machine on your phone penetration of the cell phone game development offers the most suitable soil, With MIDP2.0 releases, particularly with the new GameAPI makes mobile phone games developer can concentrate more on the game instead of strengthening cumbersome to deal with the animation map is designed to allow the development process more conveniently and quickly, It is a important milestone in the development of cell phone games.

With the quickening of social rhythm, the intensity of competition of working usually is strengthened, the pressure of life follows to aggravate too. So everybody needs an amusement tool of recreation when coming off duty or having a rest, relax one, alleviate one's own pressure, dispel the tense fatigue state.

 This paper describes the integrity of how the Jbuilder platform in J2ME technology, especially MIDP2.0 newly added GameAPI on cell phones to achieve a LLK-Game (prototype onlinecomputer game "LLK-Game"), the core of its game GameMap class building. With respect to the technology Midlet framework, state game machine, thread, clever, maps, hurdles Process optimization and compatibility design. The first chapter describes the J2ME games, and the paper agreed terms; The second chapter describes the development of the game and to use the platform of the main technologies; Chapter III of the game for a simple needs analysis; Chapter 4 is a concrete realization of the game, and describe some of the key technology; Chapter 5 is about the process of summing upand how to finish this design.



KEY WORDS:J2ME,MIDlet framework,LLK,maps 


目 录


前 言

第1章 J2ME游戏背景

第2章 游戏的开发平台及要使用的主要技术

§2.1 什么是J2ME

§2.2 J2ME的开发工具和环境搭配

§2.2.1 J2ME开发工具

§2.2.2 J2ME环境搭配

第3章 需求分析

§3.1 需求分析基础知识

§3.1.1 游戏的功能需求

§3.1.2 游戏开发环境的需求

§3.2 游戏的开发环境

第4章 详细设计

§4.1 游戏的详细设计

§4.1.1 界面的详细设计

§4.1.2 功能的详细设计

第5章 编码的实现与测试

§5.1 游戏进入前的选择

§5.2 游戏逻辑及五个重要类的实现

§5.2.1 GameCanvas类所实现的功能

§5.2.2 地图的创建

§5.2.3 地图的移动

§5.2.4 关于commandAction()方法和paint()方法

结 论

参考文献

附 录


前 言


J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益。因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。如果没有正确的防范,它则为用户和无线通信公司冒着无数个安全的风险。幸运的是,Java被设计成一种安全的语言。所有字节码应用在执行之前都要校验;JVM在执行过程中监督应用的安全性和存储违反问题。MIDP v2 运行时间包括一个完全特征化的、基于域的安全管理员,它在应用的数字签名者鉴别的基础上赋予应用API级许可。

纵观IT产业的历史,就像军事的发展时常推动计算机的演化一样,计算机游戏已经成为技术创新背后的动力之一。计算机游戏者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制——无论是将图形强制在人工智能(AI)上 还是网络安全性。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品——游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。 手机游戏的盈利主要是由于它们的涉及面很广。手机已经与现代生活方式紧紧地结合在一起。他们是最普遍携带的个人用品中仅次于钥匙和钱包的东西。传统的台式机游戏将目标锁定在低级趣味的人和青少年身上,而手机游戏则每个人都可以访问的到——随时,随地。尽管每个手机游戏都不贵,但是巨大的使用量(如:每人每星期一个新游戏)将使得这个市场商机无限。

在手机游戏的早期,大多数开发者都是想要玩转设备、学习技巧和快速攻关的狂热分子。但是,随着更多的开发者加入这个行业,手机游戏已经进化成涉及到专业设计师、构造师、开发者、产品经销商、律师、和艺术家在内的主导产品。这是行业走向成熟的必然趋势。尽管在某人的业余时间内要开发和推销简单的游戏更加困难,但是更多的专业机构将为许多人提供更多的就业机会。   手机游戏成绩斐然,成为IT产业中增长最快的部分之一.纵观IT产业的历史,计算机游戏已经成为技术创新背后的动者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制,无论是将图形强制在人工智能(AI)上 还是网络安全性。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品。游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。随着技术对游戏经验的促进,游戏市场持续增长。商业IT革命为我们节省了时间力之一。计算机游戏和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。Java开发者应该注意到这里蕴藏着的巨大的商机。

以J2ME为开发平台,以EclipseME或UltraEdit+WTK或JBuilder为开发工具。利用Java 语言,开发小游戏连连看。随着社会节奏的加快,平常工作的竞争强度也加大,生活的压力也跟着加重。所以休息时或下班后大家都需要个休闲的娱乐工具,来放松自己,缓解自己的压力,消除紧张的疲劳状态。连连看游戏是一种意趣休闲的小游戏,不仅能调节精神,还能在游戏中锻炼我们的眼力视野,注意力的专心的程度,开发我们的思维能力,同时可以充实自己,向高等级挑战,培养我们面对困难时自己所具有攻克困难的信心。我们决定将整个项目分成五个部分,分别是前面介绍的Images、Draw,还有UITimer和GameMap和GameCanvas。Images和Draw类功能简单、结构固定,因此很多项目我们都使用这两类,这里直接拿来改改就能用了。Player类是用来创建播放器。播放音乐文件。Displayable1是一个继承了Canvas类的画布,它用来处理程序的主要控制逻辑和一部分控制逻辑所需的辅助函数,主要函数应该包括用来绘图的paint()函数、用来控制操作的keyPressed()函数、用来控制选择区域的setRange()函数、用来控制选择要移动到区域的setMoveRange()函数、用来移动选中区域的Move()函数和判断是否完成任务的win()函数,更具体的分析,我们放到详细设计中去细化。MIDlet1实际上就是一个控制整个J2ME应用的控制程序。详细设计: 详细设计是程序开发过程中至关重要的一个环节,我们要在各个阶段中搭建项目所需的一些工具以及实现的具体方法与步骤。还有游戏实现与维护。

完成本任务需了解J2ME框架的基本知识,知道它与无线开发技术结合的有关方面,通过J2ME框架,用JAVA语言设计算法,来完成本游戏的开发。所以必须精通JAVA语言,来有效设计算法。现在,我还不是太熟悉J2ME框架,所以正在看《J2ME与无线网络技术》以此了解关于J2ME框架的知识与用法,然后掌握JAVA语言程序设计方法,最后是设计连连看算法,在手机上实现,即在虚拟机上(手机)上模拟实现。

本设计开发一个基于J2ME的手机连连看游戏。主要包括以下模块:游戏引擎模块、游戏界面模块。要求学生按照软件工程的方法,从需求分析入手,到概要设计、详细设计,然后编码、测试,最终完成。能够培养学生理解并掌握软件开发基本流程和方法,掌握基于J2ME的基本开发技术、游戏开发技术。


第1章 J2ME游戏背景



随着技术对游戏经验的促进,游戏市场持续增长。商业IT革命为我们节省了时间和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。Java开发者应该注意到这里蕴藏着的巨大的商机。

在今天计算已经无处不在。越来越多的人开始认为,经过了许多人共用一台计算机的大型主机时代,一人一台计算机的个人PC时代之后,下一个时代就是一人多台计算设备的普及计算时代(Ubiquitous Computing,IBM称之Pervasive Computing)。计算设备将从单一的PC扩展到各种各样的大小和功能,从家庭消费电子产品,到个人随身携带,穿着,车载的各种移动信息处理设备,多样化是这个领域的最大特点。网络是这个领域最重要的增值特性。当手机可以随时随地无线上网,PDA可以和个人PC同步,车载PC可以获得网上GPS地图数据时,这些孤立的设备才能够发挥最大的作用。 而平台无关性和网络功能正是Java的设计目标和能力(事实上,Java最初的设计目标就是用于消费电子领域,但是后来在PC和服务器上得到了发展)。"一次编写,到处运行"的平台无关性,对网络,多重设备间联网的机制(JINI)显然对这个领域是至关重要的软件条件。这个领域内的Java标准就是J2ME。

J2ME的由来

Java的最大目标和特点,就是"一次编写,到处运行"的平台无关性。但是,很自然的,正如Sun认识到的,"One size does'nt fit all",一套标准无法适应各种不同的需求。因此,Java技术目前共有三套,分别针对不同的平台和应用。

Standard Edition(J2SE,标准版):针对桌面端PC和工作站的个人和低端商务应用。

Enterprise Edition(J2EE,企业版):针对服务器端企业级应用,支持Servlets, JSP和XML等等。

Micro Edition(J2ME,袖珍版,也有翻译为小型版或者移动版的。)针对有限内存,显示和处理能力的设备,主要是消费电子和嵌入式设备领域(这实际正是Java语言设计最初的目标领域)。  

在消费电子和嵌入式设备领域,内存从几百K到几十M,从没有屏幕到Web-TV,CPU从低功耗的嵌入式处理器到206MHz的RISC处理器,硬件条件的差异是相当大的。这就使得J2ME的标准需要有不同的层次和类别来适应这个复杂的领域,因此相比之下J2ME就比J2SE和J2EE的标准要复杂得多。关于J2ME标准的文章已经有了不少,但是很少有文章清晰扼要地讲清楚J2ME的体系结构划分的原因,而只有清楚了划分的根据和为什么这么划分,才能够更好地理解标准。尤其是因为硬件发展速度是很快的,很有可能一段时间之后,如果还按最初标准的字面定义区划分设备就会陷于迷惘。作者阅读和浏览了相当多的文章和介绍,但有些问题也还是最近才认识得比较清楚,在此和读者分享我的认识,也希望得到建议和指正。因此,下面的介绍尽量不去重复其他文章中都已介绍过的一些具体细节,不去翻译规范的字面定义,而是分析规范制定的原因,类别划分的真正标准,从开发者的角度,让读者能够在这个复杂而多变的领域中更准确地把握技术的区别和趋势脉搏,更好地为将来广阔的机会做好准备。

J2ME体系结构――Configuration和Profiles

针对消费电子和嵌入式设备领域丰富多样的设备和彼此相差极大的计算能力及各种硬件条件,J2ME首先根据最基本的一些特征把它们划分为两类。具备间断网络通讯能力的个人移动信息设备:如手机,双向呼机,PDA(Personal Digital Assistant,个人数字助理,也称掌上电脑)等等。

有固定的不间断网络连接的共享连接信息设备:如置顶盒(set-top boxes),Web-TV,支持Internet的有屏幕电话,汽车娱乐/导航系统等等。Sun的J2ME FAQ(常见问题集)里有一个很好的概括:J2ME技术有两个设计中心�D�D手持的设备,和可以插到墙上插座的设备。第一类设备往往是个人化的,移动的,使用电池,体积和功耗都有限制,因此功能和计算能力有限。第二类设备一般是固定的,因此体积没有太大限制。由于固定,可以有持续电源供应,因此功耗没有太大问题,计算能力相对充裕。计算能力是这两类设备的主要区别,对其上可能的应用和环境显然有着本质影响,不同类别的设备不可能采用同样的Java平台,必须分别定义。针对这两大类设备的平台规范就是Configuration(有译为配置的,不过我认为最好不译)。第一类设备的Configuration称为CLDC(Connected, Limited Device Configuration),第二类称为CDC(Connected Device Configuration)。属于同一类的设备计算能力是相似的,但是其他功能和条件还有非常大的区别。作为Java平台必须保证相容性,这就必须舍弃所有的设备特殊性。因此,Configuration就是支持一组通用设备的最小Java平台,作为这些设备的最小公分母来保证不同设备间的平台相容性。这里的Java平台主要是指Java虚拟机(JVM)和核心库。

在Configuration中舍弃了设备的特殊性来保证Java平台的相容性,但是仅仅有Configuration显然是不够的,特殊的具体设备其独有的功能和硬件条件都没有得到支持。为此,在Configuration的基础上,根据设备具体功能再进行一次划分,比如智能手机,PDA等等。功能的划分也就是其他硬件条件的划分,比如屏幕大小,内存,计算能力,电力供应等等都是从属于功能的,因此同功能的设备的硬件条件都是非常相似的。Profile(译为简表或者简档)就是针对每一类功能设备的特殊性定义的与设备特性相关的API,建筑于Configuration之上,作为Configuration的扩展和补充。例如MIDP(Mobile Information Device Profile,移动信息设备Profile)就定义了关于移动信息设备(主要指智能手机和一部分具有无线通信功能的PDA)的图形界面,输入和时间处理,持久性存储,短消息等等的API,并且考虑到了移动信息设备的屏幕和内存限制。而正在制定中的PDA Profile则定义了针对PDA的API,其屏幕,内存条件都要大于MIDP,但是网络方面的要求则显然和手机有所不同。如下图所示,同属于一个Configuration的设备根据功能不同由不同的Profile来支持,Profile体现设备的特殊性,但是都建筑在一个共同的基础Configuration平台之上。  

基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏

关于J2ME的体系结构,我们可以这样总结:

 Configuration的分类是根据计算能力的不同来划分的,同类设备的计算能力相近。Configuration是一个规范,定义了这类设备的共同Java平台,定义与设备无关的Java虚拟机和核心库,是平台相容性的基础。Profile的分类是根据设备功能划分的,同类功能的设备其他各种硬件条件和需求也相近。Profile是一组API,在某一Configuration的基础上扩展了针对设备特定功能的API,使得标准能够完全适应特殊的设备,彻底发挥设备的功能。J2ME体系的一般结构是:由Configuration定义的Java虚拟机运行于设备的宿主操作系统之上,构成整个平台的基础。Configuration提供了基本的语言特性,Profile提供针对设备的特殊功能API和扩展类库。应用程序的运行环境需要一个Configuration和至少一个Profile,多个Profile可以共存,也可以叠加。 我们用两个具体设备的实现作为例子说明。在一个运行Palm OS的PDA上,Configuration采用CLDC,虚拟机采用KVM(虚拟机和Configuration是紧密相连的,KVM只是CLDC定义的一个参考实现(reference implementation),并不是唯一的选择),然后采用PDA Profile的Profile。在另一个运行Symbian的智能手机上,则可以采用KVM,CLDC,MIDP。  

基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏_02

注:在JCP(Java Community Process,J2ME标准在这里制定)的网站上已经提出了JSR 68(Java Specification Request,标准提案),将在下一代J2ME标准中用Building Block概念来取代Configuration。其原因是,Profile经常需要提供J2SE中已有的功能,为了能够利用已有的J2SE API而不是重新制定新API,引入了Building Block概念。一个Building Block定义一个来自J2SE或者J2EE的API以用于J2ME。这样,Profile就可以通过Building Block来利用已有的API。


第2章 游戏的开发平台及要使用的主要技术



§2.1 什么是J2ME

很多人把J2ME等同于手机程序开发,其实这是一个非常错误的说法。也有人认为J2ME是一个标准,一个规范,这同样是不正确的。

Sun 公司将 J2ME (Java 2 Micro Edition,Java 2微型版)定义为“一种以广泛的消费性产品为目标的、高度优化的 Java 运行时环境”。自从 1999 年 6 月在 JavaOne Developer Conference 上声明之后,J2ME 进入了小型设备开发的行列。通过 Java 的特性,遵循 J2ME 规范开发的 Java 程序可以运行在各种不同的小型设备上。

J2ME是Sun公司为嵌入式开发所定义的一个框架,一系列标准的规范所组成。所以J2ME是一个协议簇,而不是单一的规范。

J2ME是一个非常大的概念,下面的一幅图可以看看J2ME的适用范围。

CDC 和CLDC 是支持J2ME的两类设备的配置的简称,分别是:

l         CDC (Connected Devicel Configuration,连接设备配置),运行在这一配置上的程序称为J2ME Application,在CVM上进行解释。

l         CLDC(Connected Limited Devicel Configuration,连接限制设备配置),运行在这一配置上的程序称为MIDlet ,在KVM上进行解释。

可以把CDC 和CLDC 理解为对硬件的定义,就如同PC机和小型机一样,这些设备提供Java程序运行的硬件环境。  

J2ME 使用配置(CDC或CLDC)和简表(Profile)定制JRE(Java Runtime Environment, Java 运行时环境)。一个完整的 JRE由配置和简表组成,配置决定了所使用的 JVM(可能是CVM 或 KVM),而简表通过定义特定的类来为应用程序提供功能上的支持,一个简表定义了设备所提供的 API 集合。

如果把CDC 、CLDC 理解称为硬件配置的话,Profile可以理解为硬件上的操作系统,这个操作系统提供了程序可以调用的所有功能集合,也就是说Profile定义了各种功能的 API 函数集。当然这个比喻并不完全恰当,因为CVM 和 KVM 才充当了解释Java程序执行的角色。又或者可以把Profile理解称为虚拟机上提供的开发包,不同的开发包提供不同的核心功能调用。不管怎么理解都好,只要便于自己理解。

这里再补充说明一点:CDC规范和CLDC规范中也都定义了基本的API集合,这些API提供Java 的基本功能,例如:java.io、java.lang、java.util 、javax.microedition.io 这些包就是定义与CDC 和CLDC中的。不过这些包都是Java最基本的功能,更多的面向设备的功能性 API 必须还是通过简表来提供。

下面介绍一下几种常见的简表:

l      MIDP (Mobile Information Devices Profile,移动信息设备简表):定义了移动信息设备的类型和提供相关的API集合, MIDP 所定义的功能更加面向用户,而且比 CLDC 更高级。

l      IMP (Information Device Profile,信息模块简表):定义了提供网络连接,但是显示方式比较单一的设备简表,例如告警器。

l      Foundation Profile(基础简表):提供除了用户界面以外 J2SE 所能够提供的标准类库。

l      Personal Profile(个人简表):针对那些资源相对有限,但是对网络访问要求很高,基于AWT图形界面的设备,例如Web-TV、汽车导航系统等。

除这里提到的三个简表外还有其他类型的简表,但是上面的四个简表是Sun公司所推荐的,而且是开放的简表。例如以前的KJava就是和MIDP 类似的简表。

这些规范都是J2ME中的基础规范,例如说CLDC 设备必须要支持 CLDC规范,同时要选择支持一个简表规范,可能是MIDP 或者其他简表。对于CDC 设备来说也必须支持 CDC 规范,同时选择支持一个简表规范,可能是FP,也可能是PP。

   J2ME,即Java 2 Micro Edition,是SUN公司推出的在移动设备上运行的微型版Java平台,常见的移动设备有手机,PDA,电子词典,以及各式各样的信息终端如机顶盒等等。

由于移动终端的类型成千上万,而且计算能力差异非常大,不可能像桌面系统那样仅仅两三个版本的JVM即可满足Windows,Linux和Unix系统,因此,J2ME不是一个简单的微型版的JVM。为了满足千差万别的移动设备的需求,SUN定义了一系列的针对不同类型设备的规范,因此,J2ME平台便是由许多的规范组成的集合。

最重要的移动终端当然是手机了,因此,我们主要讨论手机相关的J2ME规范。

Configuration

SUN把不同的设备按照计算能力分为CLDC(Connected Limited Device Configuration)和CDC(Connected Device Configuration)两大类,这两个Configuration是针对设备软硬件环境严格定义的,比如CLDC1.0定义了内存大小为64-512k,任何设备如果支持CLDC1.0,就必须严格满足定义,不能有可选的或者含糊的功能。

CLDC1.0是针对计算能力非常有限的设备定义的,只支持整数运算,不支持浮点运算,早期的Java手机大部分都支持CLDC1.0,如Nokia 3650,Siemens 6688i。CLDC1.1则增加了浮点运算,因此,在支持CLDC1.1的设备上,可以使用float和double类型的变量。现在的Java手机很多都能支持CLDC1.1,如Nokia 9500,Siemens S65。

CDC则是针对计算能力比较强的设备定义的,如PPC等,CDC平台的JVM基本上和桌面的JVM很接近了,只是可以使用的Package大大少于J2SE的包。支持CDC的非常高端的Java手机也会很快上市。

Profile

和Configuration相比,Profile更多是针对软件接口的定义,Profile有必须实现的,也有可选的功能,因此,Profile更灵活。最重要的Profile当然是MIDP(Micro Information Device Profile),MIDP定义了能在Java手机上运行的Java程序的规范,包括应用程序生命周期,各种UI界面组件,支持Record存储和Http连接等等,符合MIDP规范的Java小程序被称为MIDlet,可以直接通过无线网络下载到手机并运行。早期的MIDP1.0规范使我们能在手机上运行有UI界面的Java程序,但是MIDP1.0对游戏的支持不够,必须自己实现许多代码,因此,MIDP2.0规范大大加强了对游戏开发的支持,使开发者能编写更少的代码来创建游戏。

MIDP规范的图形界面基本上都是独立于J2SE的AWT和Swing组件,因为目前手机的计算能力还比较有限,但是,随着手机的CPU越来越快,使得AWT和Swing移植到手机上也将成为可能,因此,基于CDC规范的最新的PBP 1.0(Personal Basic Profile)和PP 1.0(Personal Profile)提供了部分AWT和Swing的支持,目前,部分高端PDA已经可以运行PBP和PP的Java程序了。可以预见,将来大部分的AWT和Swing组件都能移植到手机上。前面已经说过,和Configuration相比,Profile有许多可选包,比较实用的Profile还有在JSR135定义的MMAPI(Mobile Media API),实现多媒体播放功能;在JSR184定义的M3G API(Mobile 3D Graphics API),实现3D功能;在JSR120定义的WMA(Wireless Messaging API),实现短消息收发。如果你的手机支持某一Profile,如M3G,那么便可以在MIDlet中使用M3G的3D API实现3D游戏。如果你准备在手机上开发J2ME应用,选择手机时就需要注意厂商支持的CLDC规范,支持MIDP1.0还是2.0,是否支持MMAPI,M3G,WMA等可选包。Profile虽然定义了Java API接口,但是底层如何实现是由各厂商自己决定的,如M3G定义了3D接口,但是底层实现既可以使用硬件加速,也可以由C程序模拟,或者部分由硬件实现,部分由软件实现。

比J2ME更精简的Java平台被SUN称为JavaCard,运行在信用卡等芯片中,实现电子支付等功能,目前SUN还没有把JavaCard并入J2ME平台。

J2ME平台体系结构

J2ME平台是本着Configuration和Profile结合来设计的。Configuration是提供支持最大范围设备的最小的平台。Profile是针对特定的设备提供相应的开发包集合。在J2ME的两个基本配置CDC和CLDC是按照如下的标准进行区分的。

CLDC:

512 KB 以下内存

有限能源供应(通常使用电池)

有限或非持续网络连接

简单的用户界面

16位或者32位的处理器

CDC:

2M以上内存

具有网络连接能力,通常为无线网络

需要实现java虚拟机规范的全部功能

32位或者64位的处理器

    从上述的要求中我们不难看出CLDC主要针对那些资源非常受限的设备比如手机、PDA、双工寻呼机等。而CDC主要面对那些家电产品,比如机顶盒、汽车导航系统等。


下面我们来看看J2ME平台的结构图:

基于J2ME的手机连连看游戏开发的计算机毕设_Java_03

我们可以看出J2ME的核心是Configuration,在它里面定义了java的虚拟机,通过它来和底层的Host OS打交道。Profile提供了访问设备的IO或者图形界面的能力,这样Configuration和Profile共同构成了J2ME的运行环境。比如CLCD/MIDP可以提供给你开发手机程序的环境。在Profile之上针对不同的设备还可以提供不同的可选开发包。

    由于CLDC/MIDP大家都比较熟悉了,我们下面主要介绍一下基于CDC的J2ME系统构架,同样还是看它的系统图:

基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏_04

    基于CDC的设备可以支持全部的Java2语言规范和Java虚拟机规范,它是CLDC的超集并且远大于CLDC,因此基于CLDC的程序是可以无修改的移植到基于CDC的设备的。Foundation Profile是对CDC进行扩展的Profile,但是他并没有提供GUI的开发包,GUI是在Personal Basic Profile中进行定义的,它提供了AWT的一个子集给开发人员。它还提供了Xlet应用程序模式——针对java TV。Personal Profile是Personal Basci Profile的超集。他提供了对Applet的支持,丰富了AWT的组件,添加了java.awt.datatransfer包。

§2.2 J2ME的开发工具和环境搭配


§2.2.1 J2ME开发工具

J2ME 高级开发工具

高级的MIDP应用程序开发工具能够帮助开发人员简化J2ME开发过程,包括Sun提供的官方开发工具WTK和手机厂商提供的专属SDK.

J2ME Wireless Toolkit:

WTK 的全称是Sun J2ME Wireless Toolkit —— Sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。

a. WTK 2.2

b. WTK 2.5

手机厂商SDK:

目前各大手机厂商往往把WTK经过自身的简化与改装,推出适合自身产品:

a. Sony Ericsson J2ME SDK 2.2.1

b. Motorola J2ME SDK 5.1.2

c. Nokia J2ME SDK 3.0

d. Samsung J2ME SDK

J2ME 集成开发工具

市场上存在多种J2ME平台,针对如此多样化的环境,各家厂商都会推出属于自己的开发工具。针对这种情况,工具厂商提供了集成开发工具,让开发人员可以在统一环境下,随时抽换开发时或测试时所使用的底层开发工具。

Eclipse:

Eclipse是一个开发源代码的、基于java的可扩展开发平台。Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。在Eclipse中几乎每样东西都是插件,实际上正是运行在Eclipse平台上的种种插件提供我们开发程序的各种功能。同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。

EclipseME作为Eclipse一个插件,致力于帮助开发者开发J2ME应用程序。EclipseME并不为开发者提供无线设备模拟器,而将各手机厂商的实用模拟器紧密连接到Eclipse开发环境中,为开发者提供一种无缝统一的集成开发环境。

JBuilder:

JBuilder是目前进行Java程序开发中使用较为广泛的开发工具。作为大厂商,Borland当然会为不同的开发人群设计更为全面和专业的IDE环境。作为J2ME应用开发,JBuilder是非常理想的开发环境,从第九版以后到现在的2005版,JBuilder都自带了MobileSet,它内附J2ME Wireless Toolkit。

若要开发基于各个手机厂商机型的应用程序,最好同时到各个厂商的developer站点(如Nokia Forum、motocoder等)下载并在JBuilder中配置相关机型的SDK模拟器,这样可以使您的应用程序更好地适应相对应的真机机型。

NetBeans:

NetBeans是一套完全以Java撰写而成、并且开放原始码的开发工具。Java Studio Micro Edition大致上是把NetBeans IDE和J2ME Wireless Toolkit结合在一起的产品。可以方便J2ME应用程序的开发者更容易追踪问题与除错。

§2.2.2 J2ME环境搭配

WTK:由于WTK自身并没有附带Java的运行环境JDK,所以,在WTK安装之前你需要安装自己的JDK

安装JDK 1.4.2

安装J2ME Wireless Toolkit (J2ME WTK) 2.2

参考文章:《搭建开发平台WTK》

Eclipse:除了Eclipse与EclipseME之外,你还需要java运行环境和一些手机模拟器来完成整个搭建工作安装JDK 1.4.2

安装Eclipse SDK 3.1

安装EclipseME 1.0

安装Sun WTK V2.2

安装Nokia Developer's Suite 3.0(Nokia开发者套件)

参考文章:《搭建开发平台Eclipse》

JBuilder:从第九版以后到现在的2005版,JBuilder都自带了MobileSet,它内附J2ME Wireless Toolkit,所以开发人员仅需配置好环境变量,便可直接进入JBuilder进行开发了。

安装JBuilder

参考文章:《搭建开发平台JBuilder》

NetBeans:NetBeans本身并没有开发MIDP应用程序的能力,必须外挂J2ME开发模块才能开发MIDP应用程序

安装JDK 1.4.2

安装NetBeans4.1

安装netbeans_mobility-4_1

参考文章:《NetBeans的使用(1)》 《NetBeans的使用(2)》

CodeWarrior:CodeWarrior与摩托罗拉的SDK结合得很好

安装JDK 1.4.2

安装J2ME WTK 2.2

安装CodeWarrior

安装Motorola J2ME SDK 5.1.2



第3章 需求分析



§3.1 需求分析基础知识

需求分析是软件生命周期的一个重要阶段,它最根本的任务是确定为了满足用户的需要系统必须做什么。具体的说,应该确定系统必须具有的功能和性能,系统要求的运行环境,并且预测系统发展的前景;必须仔细分析系统中的数据,既要分析系统中的数据流又要分析长期使用的数据储存。通过分析应该得出用数据流图、ER图、数据字典和简洁的算法描述所定义的详细的系统逻辑模型。图形工具比文字叙述能更好地表达重要的细节,数据流图能够极好地概括描述一个系统的信息。ER图能直观、准确地描绘系统的数据要求。数据字典也是重要的,数据是把一个系统的各个组成元素连接在一起的“黏合剂”,为了成功地把所有系统元素连接起来,这些元素必须共享公共的数据定义,数据字典正是这些数据定义的集合。算法同样是重要的,分析的目的是确定系统必须做什么,广意的说,任何一个计算机系统的基本功能都是把输入数据转变成输出信息,算法定义了转变的规则。因此,没有对算法的了解就不能确切知道系统必须做什么。

软件的需求分析是从用户的业务中提取出软件系统能够帮助用户解决的业务问题,通过对用户业务问题的分析,规划出我们的软件产品。这个步骤是对用户业务需求的一个升华,是一个把用户业务管理流程优化,转化为软件产品,从而提升管理而实现的质的飞跃,这一步是否成功,直接关系到开发出来的软件产品能否得到用户认可,顺利交付给客户,客户能否真正运用我们的产品帮助他解决业务或管理问题。

需求分析的结果是软件开发的基础,必须仔细验证它的正确性,开发人员必须和用户取得完全一致的意见,需求分析的文档应该被用户所确认。然而这并不意味着分析员应该不加分析地全盘接受用户提出的所有要求,对用户提出的笼统要求应该加以细化,对用户提出的含混要求需要进一步澄清,对用户提出的不切实际的要求必须做深入细致的解释说服工作,以便动员用户放弃不合理的要求。

为了提高软件质量,确保软件开发成功,降低软件开发成本,一旦对目标系统提出一组要求之后,必须严格验证这些需求的正确性。一般来说,应该从以下述四个方面进行验证:

一致性  所有需求必须是一致的,任何一条需求不能和其他的需求矛盾。

完整行  需求必须是完整,规格说明书应该包括用户需要的每一个功能或者性能。

现实性  指定的技术应该是用现有的硬件技术和软件技术基本上可以实现的。对硬件技术的进步可以做些预测,对软件技术的进步则很难做出预测,只能从现有的技术水平出发判断需求的现实性。

有效性  必须证明需求是正确有效的,确实能解决用户面对的问题。

需求分析阶段的具体任务包括以下几个方面:

确定对系统的综合要求(包括系统功能要求、系统性能要求、运行要求、将来可能提出的要求。)、分析系统的数据要求、导出系统的逻辑模型、修正系统的开发计划、开发原型系统。

一、 于需求分析的软件工具应该满足以下几点要求:必须有形式化的语法(或表),因此可以用计算机自动处理使用这种语法说明的内容;

2、使用这个软件工具能够导出详细的文档;

3、必须提供分析(测试)规格说明书的不一致性和冗余性的手段,并且应该能够产生一组报告指明对完整性分析的结果;

4、使用这个软件工具之后,应该能够改进通信状况。








基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏_05

图3-1 软件需求各组成部分关系



§3.1.1 游戏的功能需求

为了便于游戏者操作,游戏的界面简洁明了,控制区和操作区分别在游戏界面的上部分和下部分,这样游戏者不至于在进行游戏时搞混。控制区由一排按钮组成,里面包括游戏的模式选择,游戏的开始、暂停,游戏成绩分数点,游戏的帮助主题以及游戏的设置选项。游戏开始由函数调用来完成游戏图片的加载,随机产生图片排列。游戏操作区是用手机的上下左右键来控制图片的移动,用中间键作为选中键,当连续选定两个相同图片后,且两者的连线在算法允许消去的范围内,则消去这两个相同的图形。当游戏者一时找不到可消去的相同的图片时,就可以利用控制区中的提示按钮,则会随机的产生一对可消去的图片。当游戏中还有图片且不可消去时,则可利用控制区中重新洗牌按钮,则会把存在的图片打乱后重新组合,就可以继续游戏。





基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏_06

图3-2数据流图





基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏_07

图3-3 数据流图


§3.1.2 游戏开发环境的需求

为了游戏者安装的方便以及游戏的兼容性,考虑到游戏者大多数用的都是Windows操作系统,游戏在Windows操作系统下开发,把游戏的兼容性问题降低到最低限度。游戏是Jbuilder的环境下开发的。

§3.2 游戏的开发环境

现在的操作系统的市场份额上,微软的Windows操作系统可以说是一统天下,虽然说Linux 等操作系统也有不少人的喜爱,但仍旧不能撼动微软操作系统的老大的地方,对Linux编程不是很感兴趣的用户是很少会去抛弃Windows而选择其他的操作系统。本游戏面对的各年龄段各职业的游戏者,所以选择Windows操作系统,这样游戏在被安装到游戏者电脑后就不用担心游戏兼容问题,把兼容问题降低到最低点。而且在Windows操作系统下开发游戏软件,操作相对简单,没有像Linux等操作系统需要各种指令。现在的开发环境对Windows操作系统兼容的相对来说数量上和质量上都占有一定的优势,对开发者来说在游戏的开发以及游戏的测试和修改都很方便。

Sun公司的JBuilder是一个可视化的编程工具。既像Visual Basic简单易用,又具有Visual C++的强大功能,是一个编程的理想选择。





第4章 详细设计



§4.1 游戏的详细设计

§4.1.1 界面的详细设计

游戏的界面分为控制区和操作区,控制区是整个游戏的控制按钮的集中区域,操作区是游戏者进行游戏的场所。

控制区中有以下一些按钮:

开始游戏按钮:进入游戏开始界面,玩游戏显示分数点数与所用时间。

放弃游戏按钮:放弃本局游戏,进行游戏模式选择重新开始游戏。

退出按钮:退出游戏程序。

重新洗牌按钮:把游戏中的图片重新排列。

暂停按钮:暂停游戏。

游戏说明按钮:游戏规则的说明。

基于J2ME的手机连连看游戏开发的计算机毕设_Java_08

      图4-1


操作区是游戏者进行游戏的场所,游戏的规则很简单,就是用不超过两次转折的连线把两个相同的图片连起来,直到把游戏画面中的图片消完为止。

游戏采用GameMap类,用来加载图片和连连看的核心算法来选择图片选中以及消除图片的算法,用GameCanvas来接收手机键盘消息来消除图片和重画地图,用UITimer与GameCanvas来控制时间来计算游戏时间与判断是否能成功完成游戏通关。

基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏_09

图4-2

基于J2ME的手机连连看游戏开发的计算机毕设_API_10

图4-2


§4.1.2 功能的详细设计

功能的详细设计主要采用程序流程图作为工具来阐述。

程序流程图是详细设计的一种工具,能指明控制流程、处理过程、数据组织以及其他的方面的实现细节,从而在编码阶段能把对设计的描述直接翻译成程序代码。程序流程图一直是软件设计的主要工具,优点是对控制流程的描绘很直观,便于初学者掌握。


基于J2ME的手机连连看游戏开发的计算机毕设_手机游戏_11

游戏结束时的判断

这个主要表现两个问题:

      每一次消去图片后,均将相应位置的flag数组元素置0,且遍历flag数组是否为0。如果全部为0,则游戏结束。

     当游戏结束时,直接向玩家发送gameover指令。

解决的办法:首先,每次消去图片后仅将图片数目(gamevalue变量控制)减2,当为0时,将gameover变量设为真值。而每次都向函数发送图片数目,当图片数目值为0时,即判断玩家已经胜利。


第5章 编码的实现与测试



§5.1 游戏进入前的选择

每个MIDlet程序都必须有一个主类,该类必须继承自MIDlet。它控制着整个程序的运行,并且可以通过相应函数从程序描述文件中获取相关的信息。该类中拥有可以管理程序的创建、开始、暂停(手机中很可能有正在运行程序却突然来电的情况,这时应进入暂停状态。)、结束的函数。本程序主类为MainMIDP,并实现接口CommandLIstener。

首先显示的是游戏的背景介绍(图4-1),为此,在类MainMIDP定义Form类对象m_frmMain,在startApp()函数中判断是否为刚进入游戏,如果为假的话,将创建Form类的实例,并且调用append()方法在表单上放置m_MainList菜单。调用setCommandListener()命令使Form与CommandListener建立关联。调用Displayable显示。

图4-1游戏背景介绍                

seturrent()函数显示背景介绍窗口。当玩家点击ok后将调用display.setCurrent(m_MainList)以显示游戏菜单m_MainList(图4-1)。

当玩家按住上或下键时,在函数keyPressed(int code)中的整型变量menuIndex相应的减1或加1,相应的,在paint()函数中会根据menuIndex绘制选项是否被选中。

当移动选项条到某项,并点击ok时,在commandAction()方法中根据 menuIndex

开始游戏

游戏说明

关于

退出

MainMIDP类主要关系流程图

例如当选择“关于”时,将调用MainMIDP类中的commandAction方法以显示”关于”界面。

§5.2 游戏逻辑及五个重要类的实现

§5.2.1 GameCanvas类所实现的功能

画游戏屏幕的时间间隔:private int m_paintTime;

玩得时间计数:private int m_timeCount;

一局游戏总共花费的时间 :private int m_GameTimeCount;

定时次调用次数计数:private int m_timeMcount;

显示地图装载效果状态计数:private int m_IniGameMapCount;

画连接线标志

private boolean m_bPaintCleanFlag;

private boolean m_bPaintCleanStart;

private int m_iPaintCleanCount;

游戏运行状态标志:private int m_StatusFlag; 

0: 游戏图片文件装载过程,在程序启动的时候,另外一线程装载。

1:游戏地图文件初始化状态,出现地图初始化的效果

2:游戏进行中,检查剩下时间,调整状态条,显示分数等信息

3:单节游戏结束,处理是否继续游戏、退出游戏、保存记录;

4:一局游戏结束,显示画面庆祝

游戏地图信息: private GameMap m_gameMap;

接收键盘状态信息,调用keyPressed()函数来消除相同图片后的设置以及画面的重画。并调用GameMap类来进行游戏算法和规则的调用与判断。

§5.2.2 地图的创建

由于手机存储空间的限制,不可能将整张地图完整地存储在手机中,为了节约空间,往往提出地图中相同的图片组成一张PNG格式的图片,然后象拼图一样拼出地图来,专业的游戏设计者往往自己写一个地图编辑器,以使拼图过程不是那么痛苦。

创建地图就需要使用TiledLayer。TiledLayer指的是由一块一块类似用瓷砖拼凑起来的画面。地图实际即为TiledLayer的一个对象。先利用TiledLayer的构造函数建立TiledLayer,根据构造函数的参数可以给定Cell数组 的大小,并且地图图片切割成等尺寸的画面,并调用setCell()设置具体的图象格内容。

   因此,创建一个返回TtiledLayer的方法createBackGround(),以便在gameScreen()的构造函数中调用。在方法中,定义整型数组map1[]以存储Cell的索引值。并使用tiledLayer.setCell(column,row,map1[i])设定TtiledLayer的内容,以形成地图。其中i的值由循环for(int i=0;i<map1.length;i++)取得,column由语句column=i%15取得、行由row=(i-column)/15取得。画出地图后,由lm.append()将地图添加到LayerManager类对象lm中。由于地图位于Layer的最低层,即离用户视线最远的层,所以Tiledlayer最后一个被添加到lm中。

§5.2.3 地图的移动

根据游戏的设定,游戏中选图片是向下向上移动的,实现此功能的方法;

public int RoleMove(int GameAction) {

int iRtn;

iRtn = 0;

switch (GameAction) {

case Canvas.LEFT:

if ((m_role_x - 1) >= 1) {

{

m_role_x--;

}

}

iRtn = 1;

break;

case Canvas.RIGHT:

if ((m_role_x + 1) < stMap_x - 1) {

{

m_role_x++;

}

}

iRtn = 1;

break;

case Canvas.UP:

if ((m_role_y - 1) >= 1) {

{

m_role_y--;

}

}

iRtn = 1;

break;

case Canvas.DOWN:

if ((m_role_y + 1) < stMap_y - 1) {

{

m_role_y++;

}

}

iRtn = 1;

break;

case Canvas.FIRE:

//是否在空区域做了选择动作

if (m_map[m_role_y][m_role_x] == ISEMPTY)

break;


if (!m_SelectOne) {

//第一次选择

m_select_x = m_role_x;

m_select_y = m_role_y;

m_SelectOne = true;


} else {

//是否重复点,如果重复点,取消上次所选择的

if ((m_select_x == m_role_x) && (m_select_y == m_role_y)) {

m_SelectOne = false;

break;

}

//第二次选择

if ((m_map[m_select_y][m_select_x] == m_map[m_role_y][m_role_x])

&& (!m_cleanFlag))//还没有处理完已经连接好的块

{

if (CheckPoint(m_select_x, m_select_y, m_role_x, m_role_y) == 0) {

m_SelectOne = false; //选择的与规则相符

m_cleanFlag = true;

m_cf_sx = m_select_x;

m_cf_sy = m_select_y;

m_cf_ex = m_role_x;

m_cf_ey = m_role_y;

iRtn = 2;


m_iLeaveImageCount = m_iLeaveImageCount - 2;

break;

}

}

//选择的不合符规则

m_select_x = m_role_x;

m_select_y = m_role_y;

m_SelectOne = true;

}

iRtn = 1;

break;

default:

iRtn = 0;

}

return iRtn;

}; 

§5.2.4 关于commandAction()方法和paint()方法

每个创建Command实例的J2ME的应用程序也必须创建实现CommandListener接口的实例。每当用户通过commandAction()方法的方式与命令进行交互的时候,就会通过CommandLIstener.所以实现CommandListener的类必须实现commandAction()方法。在commandAction()方法中,使用getabel()方法获取命令的标签。如果getLabel()=“暂停”时,表示玩家点击了暂停键,此时,conti赋值为false,游戏画面的绘制及游戏相关的运算暂停,并且,使用removeCommand(c)语句将“暂停”移除,使用addCommand(new Command("继续",Command.OK,2));将”继续“按纽”添加进来。当玩家点击“继续“时,conti赋值为true,并且,一定要调用start()方法,否则继续功能不可用。必须调用start()方法的原因是:J2ME的线程已stop()方法拿掉,如果想停止线程的运做,就必须依靠一个旗标(flag),在本程序中,flag就是boolean型变量conti。所以一旦此标识变量被设为false,那么while(conti)循环就会结束,线程也会跟着结束。当用户按下“继续”的时候,start()将重新产生一个线程继续执行相关的运算和画面绘制。

当玩家通关时或者任务失败时,将显示相应信息,并使用上面的方法将“暂停”键变为“返回”键盘,当点击“返回”键时,将返回主菜单选项,调用类lzhhdm里的方法menuscreensecond(),在此方法中,实例化一个MenuScreen类对象,并且使选项“新游戏”改变为”重新开始“(图4-7)。完成此项功能的语句子为MenuScreen.mainmenu[0] =”重新开始”。当选择”重新开始“时,使用gamescreen=new gameScreen(this)将使所有变量重新被初始化,如地图的绘制、敌人出现位置的重置、敌人的数量、玩家飞机的当前位置等。使用gamescreen.start()重新开始程序的循环。

在方法paint()过程中,除了要重绘地图、图片外还要在上方绘制关卡信息、玩家分数点、及所用时间等。首先使用lm.setViewWindow()和lm.paint()设定可视范围ViewWindow和从哪里画起(见4.3.3)。其次,使用g.drawString()绘制屏幕上方的关卡信息、战绩、玩家剩余生命标志。当每次刷新绘图页面时,应使用GameCanvas的flushGraphics()将屏幕后台的缓冲区内的图像刷新到前台来(flushGraphics()应该写在paint(){ }的最后)。


§5.3 打包测试的过程和未完善的功能

打包测试的过程

使用Eclipse完成代码的调试之后,需要使用WTK生成包(即jar和jad文件),其过程如下:首先,使用WTK的新建项目功能建立一个新项目,要求与Eclipse工作区下的项目名称、MIDlet类名相同。  新建项目后,将Eclipse工作区下的.java文件拷入src文件夹,将.class文件拷入class文件夹(需要新建),将pic文件夹拷入res文件夹,点击生成,如一切正常之后,选择项目-包-生成包。生成的jar和jad文件存储在LLK/bin目录下。运行Motorola SDK v4.2 for J2ME,使用MOTOA760手机模拟器进行测试。点击Lanuch按纽,进入游戏界面,即可以进行游戏测试了。

测试的过程,实际上就是找不同的同学玩这款游戏,以期望发现BUG。实际上,几乎每一版本都会产生很多BUG。几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。即使是作为操作系统的各种版本的Windows也时常会发生许多类型的错误和bug。本游戏程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此产生了大量BUG,其中一些BUG还没有解决,如一关失败结束还可以

进入下一关,不过就是过了也说失败。


结 论


J2ME针对嵌入式和移动设备,提供了开发和运行应用程序的平台,随着新的规范的不断推出和众多制造商、软件开发商的支持,J2ME正在飞速向前发展。JTWI将保证J2ME应用程序在不同制造商的产品上的兼容性。今后J2ME将借助Web Services的力量,真正成为企业级信息解决方案中不可或缺的一部分。 J2ME是一种针对移动电话和PDA这样的小型设备的Java语言。大部分的手机厂商都迫切希望Java手机推广应用。上千万的Java手机已经到了消费者的手中。J2ME与台式机中的Java相比还是有很大的限制,但是它已经极大的提高了移动电话支持游戏的能力。它有比SMS或WAP更好控制的界面,允许使用子图形动画,并且可以通过无线网络连接到远程服务器。支持Java的手机的普及,所以它成为目前最好的移动游戏开发环境,我们在这里将详细研究J2ME游戏的开发。J2ME不是手机上配置的唯一的解释语言,但是它是一个许多厂商支持的行业标准。一些专用的解释语言也在某些区域有上佳的表现,如北美的Qualcomm的BREW ( Binary Runtime Environment for Wireless,用于无线应用程序的二进制运行环境)和一些韩国移动运营商支持的名为GVM的标准。




参考文献


[1] 米川英树.J2ME MIDP手机游戏程序设计. 北京:.中国铁道出版社.2005

[2] Rogers Cadenhead. 淡文刚 于红梅 译 循序渐进Java2教程.(第三版) 人民邮电出版社

[3] H.M.Deitel,P.J.Deitel. java 程序设计教程. 清华大学出版社

[4] 詹建飞.J2ME 开发精解. 北京.电子工业出版社.2006.1

[5] Keogh,J.潘颖,王磊译 . J2ME开发大全. 北京:.清华大学出版社.2004

[6] Wells,M.J.J2ME 游戏编程. 北京:.清华大学出版社.2005.11

[7] 张小玮.J2ME无线平台应用开发. 北京:.清华大学出版社.2004

[8] 印薅.Java语言与面向对象程序设计. 北京:.清华大学出版社.2000

[9]Joshua Bloce著. 潘爱民译. Effective Java中文版.2004年7月第4版. 机械工业出版社.

[10]Bruce Eckel.侯捷译.Java编程思想. 2005年3月第1版. 机械工业出版社出版社

[11]王森著.Java手机/PDA程序设计入门.2005年2月第3版.电子工业出版社.

[12]James Keogh著.潘颖王磊译.J2ME开发大全.2004年2月第1版清华大学出版社.

[13]Ian Sommerville著.程成等译.软件工程.2003年1月第1版.机械工业出版社.

[14]Jason Lam著.Deabo way Chou译 J2ME&Gaming 2004年末

[15]陈立伟 张克非 黎秀红著.精通JAVA手机游戏与应用程序设计.中国青年出版社.2005年5月

[16]飞思科技产品研发中心.精通Jbuilder9.电子工业出版社.2004年

[17]微型爪哇人.Java手机程序开发.中国铁道出版社,2003年

[18]Frand M.Carrano,Janet J.Prichard .著 韩志宏 译.数据抽象和问题求解——JAVA语言描述.清华大学出版社2005年4月

[19]袁海燕 王文涛著.JAVA实用程序设计100例.人民邮电出版社.2005年5月

[20]Jonathan Knudsen.What's New in the J2ME Wireless Toolkit 2.2  2004年4月

[21]张小玮著. J2ME无线平台应用开发.  清华大学出版社. 2003年11月


致 谢



附 录


代码