收藏 分销(赏)

j2me-手机游戏——sudoku数独(终稿).doc

上传人:w****g 文档编号:2281908 上传时间:2024-05-24 格式:DOC 页数:34 大小:204.50KB
下载 相关 举报
j2me-手机游戏——sudoku数独(终稿).doc_第1页
第1页 / 共34页
j2me-手机游戏——sudoku数独(终稿).doc_第2页
第2页 / 共34页
j2me-手机游戏——sudoku数独(终稿).doc_第3页
第3页 / 共34页
j2me-手机游戏——sudoku数独(终稿).doc_第4页
第4页 / 共34页
j2me-手机游戏——sudoku数独(终稿).doc_第5页
第5页 / 共34页
点击查看更多>>
资源描述

1、成绩 数学与计算机科学学院09级 计算机应用专业毕 业 设 计题 目 : J2ME 手机游戏SuDoKu数独年级专业 : 09级计算机应用(2)班学 号: 20095938姓 名: 谢平日 期: 2011 年 12 月 13 日摘要J2ME(Java 2 Micro Edition) 是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“Write Once, run anywhere”的Java特性而提高开发的效率。随着手机的日益普及、Java功能在移动设备上的实现,Java应用

2、程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。特别是手机性能的逐渐增强,手机作为一个游戏平台越来越成熟了。本论文着眼于J2ME技术的应用,开发一款可用的手机游戏程序数独。本文在介绍J2ME的相关技术的基础上,设计并实现了数独游戏。关键词:J2ME、手机游戏、Java 、数独AbstractJ2ME is a kind of fast developing technology implemented on various devices especially mobile communication equipments. It focuse

3、s 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 n

4、owadays, 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. Mobile phone whose capability is greater is more and more mature for game. This disse

5、rtation focuses on implementation of J2ME technology and has developed a commercial game suite run on mobile phonessudoku.This article in introduced that J2ME in correlation techniques foundation, designed and has realized of Soduku game.Keywords: J2ME; mobile game;java; sudoku目 录1. 引言52. 绪论52.1 手机软

6、件现状62.2 手机游戏应具有的特征62.3 本游戏背景介绍73. 开发环境及相关技术的介绍73.1 开发环境73.2 J2ME简介73.3 MIDlet Suites简介83.4 MIDP类库83.5. WTK2.5简介104. 数独游戏的策划和设计114.1.生成数独题目的方法114.2 数独题目的变换134.3.谜题数据的制作134.4.利用回溯法求解数独144.5.游戏的类结构154.6.用户界面流程165. 主要模块设计185.1.主类SuDoKuMIDlet类185.1.1.闪屏界面185.1.2.游戏菜单列表195.1.3. 继续游戏选项195.1.4.填充完成后提示界面205.

7、3游戏菜单MenuList类235.3.1.MenuList类得构造函数235.3.2.游戏当前状态235.3.3.菜单事件处理245.4.总结35参考文献:36致谢:1. 引言虽然J2ME以开发交互式业务为主,属于战略性产品,备受产业连的重视,但是由于自从NOKIA的贪食蛇掀起手机游戏风潮之后,现在已经很难再想像一部时尚的手机里头没有游戏。随着手机从单色屏到灰度屏到彩屏,从蜂鸣器到扬声器,随着手机存储能力的加大和处理能力的加强,手机已经成为合情合理的游戏平台,越来越多的手机厂商和专业的游戏公司开始关注手机游戏这个潜在的市场。基于J2ME的通用解决方案,这种方案不仅仅可以提供高质量的游戏,而且

8、可以提供全方位的软件服务。正是由于无线业务的蓬勃发展,和越来越多的无线厂商支持J2ME技术,J2ME也将拥有一个更广阔的发展空间。在这样的背景下,本文分析了数独游戏的基本原理和关键技术,利用WTK实现了数独游戏的部分模块。2. 绪论2.1 手机软件现状在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端:1. 传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。2. 传统手机访问互联网是通过WAP(Wireless Applicati

9、on Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。而Java技术在无线应用方面的优势非常明显:1. 应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。2. Java技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面(GUI).3. Java技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。基于以上分析,Java手机将是未来手机的发展方向,是业界的热点。2.2 手机游戏应具有的特征 一个手机游戏应该具有以下特征:易于学习: 既然手机游戏面向的是普通消费者而不是计算机

10、专家,那么他们不可能深入的学习游戏技巧,消费者不会花几个小时去研究一个3元的手动操作的游戏.保持游戏的简单是最基本的要求。可中断性: 多任务处理是手机生活方式的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。基于订阅:手机游戏的盈利成功取决于他们巨大的使用量,一开始开发和设计每个游戏都是昂贵的,如果一个手机游戏开发者要赢利的话,重要的是:同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。 丰

11、富的社会交互: 不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。利用手机技术的优点: 巨额的手机技术研发费用都花在提高设备和网络的可用性和可靠性上面。因此,手机设备硬件和网络协议与桌面/控制台世界(如全球定位系统(GPS)扩展、条形码扫描仪、和短消息服务(SMS)/多媒体信息服务(MMS)通讯)有着非常大的差别。好的手机游戏应该利用那些更新的设备特征和网络基础设备的优点。2.3 本游戏背景介绍相传数独源起于拉

12、丁方阵(Latin Square),1970年代在美国发展,改名为数字拼图(Number Place),之后流传至日本并发扬光大,以数字智力游戏智力拼图游戏发表。在1984年一本游戏杂志通信正式把它命名为数独,意思是“在每一格只有一个数字”。拼图是九宫格(即3格宽3格高)的正方形状,每一格又细分为一个九宫格。在每一个小九宫格中,分别填上1至9的数字,让整个大九宫格每一列、每一行的数字都不重复。 数独的玩法逻辑简单,数字排列方式千变万化,不少教育者认为数独是锻炼脑筋的好方法。3. 开发环境及相关技术的介绍3.1 开发环境操作系统:Microsoft Windows XP程序语言:Java 2开

13、发 包:Java(TM) 2 Standard Edition (5.0) Sun Micro. J2ME Wireless Tool Kit 2.5.23.2 J2ME简介Sun公司将J2ME定义为“一种以广泛的消费性产品为目标,高度优化的java运行时环境”。J2ME是为了那些使用有限能源,有限网络连接(正常是无线连接),以及有限图形用户界面的设备而开发的。J2ME不只是一个单独的技术规范,而是一系列技术规范的总称。这些规范定义了java技术在资源限制的设备中的表现形式,而且新规范的不断制定当中,并且这些规范的制定是完全向公众开放的。目前所说的手机游戏其实是其中规范的一种,即MIDP(移动

14、信息设备规范),该规范应用最为普遍,因此习惯上也被人们笼统地称之为J2ME技术。J2ME主要应用于手机等小型嵌入式设备,这些设备由不同的厂商设计生产,功用千差万别。J2ME在应用于这些设备的同时也保留了java的传统特性,即任何时间和任何地点的代码有可移植性,部署灵活性,安全的网络传输性,以及代码稳定性。3.3 MIDlet Suites简介在制定MIDP规范过程中,最重要的一件事情就是定义一个MIDP应用程序的组成。换句话说,它应当回答任何开发人员都可能问的问题,比如,如何将程序正确下载到设备中?程序的入口在哪?设备如何识别该MIDP应用程序是自己想要的?同Applet类似,一个MIDP程序

15、被称为“MIDlet”,MIDlet应用的主类需要从一个特殊的类(javax.microedition.midlet.MIDlet)中继承,并提供共用的默认的构造函数。一个或多个MIDlet打包在一起叫做MIDlet Suite,其表现形式一个以“.jar”为后缀名的文件,这个JAR文件非常重要,它所包含的主要信息如下:包含MIDlet运行所需要的所有类,与Applet不同,MIDlet不运行在运行时下载其他类,而只运行在同一个MIDlet中的类。JAR的Mainfest是文本文件,用于描述JAR文件的内容,定义了在MIDlet中的重要信息,如名称,主类,图标等。其他资源文件,如使用的图像,声

16、音文件。和Java Applet类似,MIDlet应用程序在移动设备上运行时具有应用程序生命周期,显而易见,MIDlet可能处于以下3种状态:暂停,激活和终止状态。各种状态之间的转换规则如图2-1所示。 3.4 MIDP类库 MIDP类库建立在CLDC类库基础之上,因此许多类库都来自J2SE。为了实现特定功能,MIDP增加了一些新的类库,这些类库描述如表2-1所示。核心类库类库描述java.io通过数据流提供系统的输入/输出java.langMIDP语言包,在CLDC中java.lang包的基础上增加了类(来自 J2SE)java.lang.IllegalStateException。当有非法

17、的转换请求时抛出这个异常,比如,在一个TimerTask安排中调用或者在用户界面组件容器中请求时java.utilMIDP工具栏,在CLDC中java.util包的基础之上增加了以下类(来自J2SE): java.util.Timer java.util.TimerTaskTimer用于安排一个后台线程使它在以后执行,TimeTask通过使用Timer安排一个单次执行的任务,或者以一定间隔重复执行的任务应用程序生命周期javax.micorediton.midletMidlet包定义了MIDP应用程序,以及应用程序和它所运行于环境之间的交互用户界面Javax.microedition.lcdu

18、ijavax.microedition.lcdui.game为MIDP应用程序提供用户界面APE为MIDP应用程序提供游戏开发的高级API(MIDP2.0新增)持久存储javax.mircroedition.rms这个包用来为MIDlet提供持久存储的机制,应用程序可以存储数据,在以后需要的时候获取这些数据网络javax.mircroedition.ioMIDP提供了基于CLDC通用连接框架的网络支持,在CLDC这个包的基础之上,增加了类javax.microedition.io.HttpConnection,这个类用于建立HTTP连接在MIDP2.0中除了支持HTTP连接外,还支持HTTPS

19、,报文,Socket通信及串口通信。另外,MIDP2.0还支持服务器Push体系架构公开密钥javax.microedition.pki提供用于鉴别安全网络信息的数字认证(MIDP2.0新增)声音媒体Javax.microedition.mediajavax.microedition.media.control该包为MIDP应用程序提供音,视频等多媒体功能,该包遵循JSR-135规范(MIDP 2.0新增)该包为播放器提供了一些特定的控制功能(MIDP2.0新增) 表21 MIDP中的类库描述3.5. WTK2.5简介WTK(Wireless Tool Kit)是Sun公司针对J2ME推出的用

20、于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素。J2ME WTK包含了为能够支持MIDP设备开发应用程序所需要的全部工具。这些工具包含字节码与校验器(byte-code preverifier),KToolbar,自带的模拟器,以及其他一些用来优化代码和监视程序的工具。在安装WTK2.5以前,需要安装JDK 5 (1.5)或者更高版本,安装完成需要添加环境变量:JA

21、VA_HOME: C:Program FilesJavajdk1.5.0_04 classpath: .;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar; %JAVA_HOME%libhtmlconverter.jar 在原来的path变量前添加 %JAVA_HOME%bin; WTK2.5新建的项目会产生源程序,资源和类库文件,其结构组成如表2-2所示。 目 录描 述src包含所有源程序文件res包含所有的资源文件,如图片,声音,3D数据文件bin包含JAR,JAD和未打包的Manifest(创建项目自动生成)lib包含外部类库文件(JAR或者ZIP

22、文件)tmplib存放临时外部类库(临时目录,编译后生成)cmpclasses使用JDK编译后的类文件(临时目录,编译后生成)classes使用preverify预验证后的类文件(临时目录,编译后生成) 表22 项目文件的组织4. 数独游戏的策划和设计4.1.生成数独题目的方法到底有多少个99的拉丁方阵呢?答案552475149615689284253122560个。但数独的规则除了每行每列都是1到9的数字外,数独的9个小宫格也都要是1到9不同的数字,所以要减少很多。直到2005年底,数学家贝米耳与罗斯坦才算出一共有6670903752021072936960种可能的数独谜题。由于同一个数独可

23、以变形,如列变换,行变换,数字代码变换(比如1和5交换,2和8,3和4.),重复前面几次之后,就分不清是来自同一个数独了,因此,如何产生一道数独题目呢?产生数独题目的方法是从答案反推题目。为了便于理解,可以先从22的4个四宫格(共16个宫格)开始思考,推论。先给出一个22个四宫格的数独解,为了方便解说,我把方阵内的数字位置分区块为A区(黄色),B区(绿色),C区(蓝色),D区(红色),如图3-1所示。推导数独题目的方法如下: 1.任意选取一个方格,并将此空格内的数字挖掉。例如将(3,3)位置的数字4挖掉,如图3-2所示。 2.观察B区得四宫格可以发现,不管(2,2)位置的数字4是否存在,为确定

24、(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个位置的数字就可以得出一个唯一解的数独

25、谜题,如图3-7所示。另外通过以下形式的变换方式,仍然可以得出唯一解的数独谜题。行列变换:将同一四宫格内的行列变换,例如,将第1,2列互掉;第3,4列互掉;第1,2行互掉;第3,4列互掉,如图3-8和图3-9所示。标准的33个九宫格的数独谜题的推出原理与此相同,但过程复杂,在此不再赘述。数字替换:例如数字1换4;数字2换3;如图3-10所示。4.3.谜题数据的制作数独游戏使用到了81个宫格,因此首先联想到使用数组保存谜题数据。使用数组保存数据更加直观,但是如果用非常多的谜题,就会造成代码量庞大而且冗余。因此,使用字符串的格式来保存九宫格的数据。然而,新的问题出现了,通过前面的讨论我们可能发现,

26、谜题的答案是99共81个数字,但给玩家的谜题只是其中的一部分,那么哪些数字应该显示,哪些数字不应该显示呢?这样是否应该使用两个字符串来保存一道谜题?通过类似加密的方法可以使这个问题迎刃而解,能够使用这种方法的前提是char字符类型的数据能够使用一个字符表示0到FFFF得Unicode码(可以把char字符看成是多进制的运算)。例如char字符是1,转化到int字符是49。为此,对谜题答案进行一定的处理(这里采用编码时加10的方法,读取时减10的方法),就能将谜题和空白区域区分开来。运行下面代码,完成了数字和字符的转换:for (int i = 1;i=9;i+) System.out.prin

27、t(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.利用回溯法求解数独回溯法有“通用解题法”之称,将所有的解(问题的解空间)按照一定结构排列,再进行搜索。一般解空间构造成为为树状

28、结构,用深度优先的策略搜索,一般有两种方式:1.只需要一个解的话,找到解就停止。2.需要求所有解,则需做“树的遍历”找到所有解。回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。回溯法是一种搜索算法,其基本思路是:在一个问题中,根据题意给出的边界条件划定出所有可能解的范围(称为可能解)

29、,根据题意确定出约束条件。利用程序顺次在所有可能解中搜索时按照深度搜索的方式进行。即在第一层选定一个满足约束条件的解,然后以该可能解为出发点,搜索第二层的一个可能解(试探)。如果搜索到第二层的一个可能解,则继续搜索第三层得一个可能解。依次类推,直到所有层得可能解都被找到,则得到了该问题的一个完整解。如果第二层所有的肯可能解都不满足约束条件,则返回第一层,放弃原有的可能解,使用第一层的下一个可能解(回溯)。一次类推,寻找第二层的一个可能解。回溯法相对于其他穷举的特点在于,不必把问题的每一层的所有可能解都遍历一遍,只要当前的可能解不满足约束条件就抛弃该解,寻求下一个可能解,而不必求解其余的下层解。

30、当当前层得所有可能解都不满足约束条件,则回溯到上一层,抛弃上一层的当前可能解。从以上分析中结合数独问题的规则,得出数独问题的约束条件为:每一格的数值范围仅限1-9每一格内的数字在当前行不允许重复每一格内的数字在当前列不允许重复每一格内的数字在当前小宫格内不允许重复由此,回溯法通过约束条件的筛选,在所有解中除掉不可能的解,从而获得问题的一个或者全部解。具体实现方法和代码会在后面章节详细说明。4.5.游戏的类结构整个游戏共由10个类组成,如图3-11所示是游戏的类结构。游戏的SuDoKuMIDlet类负责保持display对象,确保在各个屏幕之间切换。所切换的屏幕包括闪屏,菜单,游戏画布,游戏设置

31、表单和游戏说明表单。游戏线程和屏幕绘制由SuDoKuCanvas画布类实现,屏幕绘制包括背景,宫格和数字,游戏循环每隔50ms绘制一次。游戏声效由SoundEffects类实现。游戏控制类SuDoKuModel衔接了游戏画布,游戏存储和游戏逻辑各个功能单元。使用这种结构能很好地保持各个类得抽象性和封装性,例如,逻辑类负责保持宫格数据,判断胜负;而画布类只负责绘制和接收键盘事件;游戏控制类起到中枢神经的功能。图3-11 类结构4.6.用户界面流程游戏启动时,首先显示闪屏画面,等待3秒或者玩家按下任意键之后,进入游戏主菜单。菜单选项有“开始新游戏”“加载游戏”“游戏设置”“游戏说明”和“退出游戏”

32、。玩家选择“开始新游戏”和“加载游戏”则显示游戏画布;玩家选择“游戏设置”,则进入游戏设置表单;玩家按下“游戏说明”则显示游戏说明画面;玩家选择“退出游戏”则退出整个游戏。整个游戏的界面切换流程如图3-12所示,主要的用户界面如图3-13所示。 图3-12 整个游戏的界面切换流程图5. 主要模块设计5.1.主类SuDoKuMIDlet类5.1.1.闪屏界面游戏的主类为SuDoKuMIDlet类,该类继承了MIDlet类,用于在各个屏幕之间切换,并且实现各个功能的调用,是整个程序的中枢核心。游戏启动后显示游戏闪屏,闪屏由SplashScreen类实现,代码如下: public void star

33、tApp() 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

34、void splashScreenDone() menuList = new MenuList(this); /创建游戏菜单 myCanvas = new SuDoKuCanvas(this); /创建游戏画布 Display.getDisplay(this).setCurrent(menuList); /显示游戏菜单游戏菜单有“开始新游戏”,“加载游戏”,“参数设置”,“游戏说明”,“退出游戏”,当玩家选中这些选项时,将会有相应的调用方法。5.1.3. 继续游戏选项当玩家进入游戏后如果中途返回菜单,菜单会增加一项“继续游戏”,选择该项则返回游戏。中途返回菜单将停止计算时间,代码如下: pub

35、lic void menuListContinue() Display.getDisplay(this).setCurrent(myCanvas);/显示游戏画布 myCanvas.start(); /启动游戏线程从游戏,游戏帮助和参数设置界面返回菜单的代码如下,但是注意,从游戏中返回时调用了菜单对象的setGameActive()方法,该方法用于在菜单中插入“继续游戏”选项;当设置好游戏参数返回时,通过主类将参数从对象传递给游戏画布,可见主类起到了中介传递作用,这些方法代码如下:public void gameBack() menuList.setGameActive(true);/在菜单中

36、插入继续游戏选项 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.getDisp

37、lay(this).setCurrent(menuList);/显示菜单 5.1.4.填充完成后提示界面当玩家填好方格内所有数字后,将对结果进行检测,将检测结果保存在布尔变量isSolved中,并且弹出提示框。如果玩家顺利完成了谜题,提示框中将显示玩家耗费的时间和难度级别,并恭喜玩家顺利通过;如果玩家填充了题目,却存在错误,提示框将显示失败图片,并请玩家继续努力。由于持续时间使用的是毫秒单位,还需将时间转换为小时,分,秒单位。由notifyGameOver()方法处理游戏完成,该方法代码如下:public void notifyGameOver(byte level,long gameDura

38、tion,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 + 小时 + strTim

39、e; /获取小时 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); e

40、lse 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类得构造方法加载了闪屏图片,并且启动等待线程,由如下代码实现: SplashScr

41、een( 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 Can

42、vasHeight = 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)

43、/捕捉线程中断异常 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

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 考试专区 > 中考

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服