JAVA手机游戏毕业设计_第1页
JAVA手机游戏毕业设计_第2页
JAVA手机游戏毕业设计_第3页
JAVA手机游戏毕业设计_第4页
JAVA手机游戏毕业设计_第5页
已阅读5页,还剩80页未读 继续免费阅读

下载本文档

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

文档简介

课程名: 手机游戏开发题目: 连连看班级: 学号: 系、专业: 信息系计算机应用姓名: 摘 要信息产业在中国已经成为了非常重要的产业。无线通讯业作为通信业经济的命脉已经占据了很好市场。在中国,3G时代即将到来,Java手机游戏作为手机增值业务的主要增长点,必将迎来蓬勃发展的机遇。本文对J2ME 的概况进行简单的概述,然后介绍了手机游戏利用J2ME为平台的开发流程,随着手机硬件功能的急速提高,手机游戏也会制作的越来越精美.手机游戏在国外已经得到了很好的发展,国内市场潜力也十分巨大,随着移动增值业务的不断扩大,手机游戏已经开始占据了很大的市场。目 录 摘要 2一、前言 4 1.1引言 4 1.2手机游戏状况 4 1.3 手机游戏应具有的特征 4二、检测J2ME 5 21 J2ME定义 .5 22 J2ME的总体架构 .6三、开发环境及相关技术 73.1 开发环境 73.2 关于Eclipse及Eclipseme 73.3 关于Wireless Tool Kit 83.4 MIDP 2.0简介 8四、详细设计 9 4.1 界面详细设计 9 4.2 功能详细设计 11 4.3 打包测试 17六、源代码 17七、总结 84八、参考主要技术资料/文献 85一、前 言 1.1引言随着科技的发展,移动通讯设备己经成为人们生活中不可缺少的通讯工具。随着软硬件技术的发展,移动通讯设备在为人们提供优质通讯功能的同时也在为人们提供越来越多的附加应用。随着 以W AP,JAVA为代表的新的移动增值应用技术迅速崛起,手机用户已不再满足于简单的手机单机版游戏,而是期待更加绚丽、动感的手机应用体验。手机在线游戏因具有实战感强、操作方便、画面生动和娱乐性与趣味性强的特点而逐渐获得人们的青睐。手机在线游戏大大提高了手机的应用范围,使原有手机只能提供固化游戏的方式得到根本改变,同时也为手机运营商提供了更加广阔的运营空 J2ME作为Java技术专为消费嵌入式系统定制的版本,其稳定性、跨平台性、安全性、扩展性使得成为移动通讯设备上主流开发平台。1.2手机游戏现状在诸如Sun Microsystems、Nokia、摩托罗拉等大公司的推动之下,基于J2ME的应用开发逐成热点随着手机性能的不断提供,手机平台之上的游戏应用将逐渐成为继PC游戏应用之后又一新业务增长点。越来越多的厂商和开发者投入其中。目前,国内手机增值业务日益增长,基于J2ME的应用产品市场也逐日扩大。1.3 手机游戏应具有的特征一个手机游戏应该具有以下特征:易于学习: 既然手机游戏面向的是普通消费者而不是计算机专家,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个几元的手动操作的游戏。保持游戏的简单是最基本的要求。可中断性: 多任务处理是手机生活方式的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。基于订阅:手机游戏的盈利成功取决于他们巨大的使用量。一开始开发和设计每个游戏都是昂贵的。如果一个手机游戏开发者要赢利的话,重要的是:同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。 丰富的社会交互: 不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。二、J2ME概述 21 J2ME定义Java 2 Micro Edition (J2ME)是一种针对移动电话和PDA这样的小型设备的Java语言。它是一种新的、非常小的Java 应用程序运行环境,它所定义的构架主要用于在手持式设备上推广使用Java技术。J2ME定制了2种配置:CLDC(Connected Device Configuration ).其中,CLDC是为手机等CPU和内存资源远低于u标准Java要求的设备所提供的一种配置,它是对Java 标准版本做了最大程度的缩减后得到的,其虚拟机和核心类库多于100kB。CDC配置主要用于拥有更多资源的下一代设备。CLDC配置给各种手持设备提供了能运行Java程序的一种环境,但开发者还很难在这种环境下开发程序没,首先因为CLDC核心库提供的是低级API,不适合直接用于构建应用程序;其次,手持设备的系统结构千差万别,很难保证应用程序的图形界面,网络等功能的移植性。因此,为了进一步增强J2ME功能,SUN公司允许设备供应商在实现CLDC的基础上再为自己的设备提供专门的高级API及程序管理方法,即PROFILE,以简化应用程序的开发,使程序有更好的移植性。同时,SUN公司还与50多家知名的移动设备制造商及软件开发商一起,制订了专门用于手机等移动信息设备的配置文件MIDP(Mobile Information Device Profile).J2ME平台是移动信息设备配置文件(MIDP)和在MIDP之上建立的可选软件包。 22 J2ME的总体架构为了支持资源受限设备所要求的灵活性和可定制性,J2ME体系结构分成如图1所示的4层。由配置层定义的Java虚拟机运行于设备的宿主操作系统之上,构成整个平台的基础。配置层提供了基本的语言特性,框架层提供针对设备的特殊功能API和扩展类库。框架层(MIDP)配置层J2ME虚拟机操作系统J2ME的体系结构三、 开发环境及相关技术3.1 开发环境操作系统:Microsoft Windows XP SP2程序语言:Java 2开发包:Sun Java (TM) Wireless Toolkit 2.5.2 for CLDCEclipse SDK Version: Java(TM) 2 Standard Edition(jdk1.5.0_14)IDE:eclipse 关于本作品的开发环境,整合J2DK+Eclipse+NLpack-eclipse + Eclipseme + Wireless Tool Kit,其安装配置过程为另一方面的内容也比较简单,在此不再赘述。可以这么说,JDK提供了虚拟机来运行应用程序,而WTK提供了仿真器, Eclipse及其它插件提供了开发测试程序代码的IDE集成开发环境。此外,这些资源都是免费的,可以从网上直接下载,在下面小节中将做简单的介绍。3.2 关于Eclipse及EclipsemeEclipse是一个开发源代码的、基于java的可扩展开发平台。Eclipse相关的许可证是大多数基于Common Public License (CPL),CPL是一个为Open Source Initiative (OSI)所认可的许可证。由于Eclipse Foundation的建立,Eclipse的许可证将逐渐趋向于使用Eclipse Public License (EPL),EPL是一个与CPL相类似的许可证,正在进行OSI的认证工作。作为当今最流行的java开发IDE之一,java社群使用Eclipse以及基于Eclipse技术而来的IBM Websphere的开发者已经超过了半数。Eclipse本身只是一个框架和一组响应的服务,并不能够开发什么程序。在Eclipse中几乎每样东西都是插件。同时各个领域的开发人员通过开发插件,可以构建与Eclipse环境无缝集成的工具。eclipse的发行版都已经带有最基 本的插件,方便了开发人员。因此,除了搭建移动开发环境之外,也可以下载Jsp插件、Tomcat插件、Jboss插件来进行整合,以用于JSP、J2EE的开发。图2-1 Eclipse集成开发平台在/downloads/index.php可以免费下载到Eclipse的解压安装文件、语言包以及许多实用工具插件。EclipseME作为Eclipse一个插件,致力于帮助开发者开发J2ME应用程序。EclipseME并不为开发者提供无线设备仿真器,而将各手机厂商的实用仿真器紧密连接到Eclipse开发环境中,为开发者提供一种无缝统一的集成开发环境。在/上可以免费下载到EclipseME。3.3 关于Wireless Tool KitWTK(Wireless Tool Kit)是Sun公司针对J2ME推出的用于手机和Palm等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机仿真器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行仿真器的最基本组件,是其他IDE需集成采用的必备元素。当然,你可以从手机厂商下载相关的API及仿真器来进行开发。同样,WTK也是个免费软件,可以在Sun上得到下载。3.4 MIDP 2.0简介MIDP即移动信息简表(Mobile Information Device Profile)针对的是移动信息设备,或者体积较小、能力有限的手持设备(MID),这些设备的共性是具有用户接口即屏幕和输入机制。MIDP目标设备的典型例子就是手机。MIDP 2.0相较之前的1.0版本,加强了对用户接口、多媒体和游戏功能、网络连接功能的支持,主要包括以下几个方面:n MIDP 2.0提供的游戏API使得游戏本身可以充分地利用设备自身的图形处理功能。它的出现大大简化了J2ME游戏的开发工作,同时也使开发者能够更多地控制程序的图形处理功能。n 在通信方面,MIDP 1.0仅支持HTTP,MIDP 2.0增加了对HTTPS、报文、Socket通信以及串口通信的支持。此外,MIDP 2.0还支持Push体系架构,这样,手机能够收到来自服务器的报警、消息或者广播,并根据要求启动手机上的应用程序进行操作。n 支持0ver-The-Air(OTA)Provisioning,它使用户能够动态地部署和更新移动设备上的应用程序。n MIDP OTA Provisioning模型为移动服务提供商提供了单一、标准地部署MIDP应用程序的途径。该模型已经被众多技术领先的移动设备制造商和服务提供商所采纳。n MIDP 2.0增加了强大的“端到端”安全模型。一方面,MIDP 2.0支持HTTPS,可以对所传输的资料进行加密;另一方面,MIDP 2.0采用了和MIDP 1.0不同的安全机制,采用安全与来确保未经授权的MIDlet套件无法访问受权限控制的数据、应用程序以及其他网络和设备资源。四、 详细设计4.1 界面详细设计游戏的界面分为控制区和操作区,控制区是整个游戏的控制按钮的集中区域,操作区是游戏者进行游戏的场所。(1) 控制区控制区中有以下一些按钮:l 开始游戏按钮:进入游戏开始界面,玩游戏显示分数点数与所用时间。l 放弃游戏按钮:放弃本局游戏,进行游戏模式选择重新开始游戏。l 退出按钮:退出游戏程序。l 重新洗牌按钮:把游戏中的图片重新排列。l 暂停按钮:暂停游戏。l 游戏说明按钮:游戏规则的说明。图4-1(2) 操作区操作区是游戏者进行游戏的场所,游戏的规则很简单,就是用不超过两次转折的连线把两个相同的图片连起来,直到把游戏画面中的图片消完为止。游戏采用GameMap类,用来加载图片和连连看的核心算法来选择图片选中以及消除图片的算法,用GameCanvas来接收手机键盘消息来消除图片和重画地图,用UITimer与GameCanvas来控制时间来计算游戏时间与判断是否能成功完成游戏通关。图4-2图4-34.2 功能详细设计功能的详细设计主要采用程序流程图作为工具来阐述。自动游戏开始游戏退出游戏暂停游戏图4-4(1) 游戏结束时的判断 这个主要表现两个问题:每一次消去图片后,均将相应位置的flag数组元素置0,且遍历flag数组是否为0。如果全部为0,则游戏结束。 当游戏结束时,直接向玩家发送gameover指令。 解决的办法:首先,每次消去图片后仅将图片数目(gamevalue变量控制)减2,当为0时,将gameover变量设为真值。而每次都向函数发送图片数目,当图片数目值为0时,即判断玩家已经胜利。(2) 游戏进入前的选择每个MIDlet程序都必须有一个主类,该类必须继承自MIDlet。它控制着整个程序的运行,并且可以通过相应函数从程序描述文件中获取相关的信息。该类中拥有可以管理程序的创建、开始、暂停(手机中很可能有正在运行程序却突然来电的情况,这时应进入暂停状态。)、结束的函数。本程序主类为MainMIDP,并实现接口CommandLIstener。(3) 游戏背景 首先显示的是游戏的背景介绍,在类MainMIDP定义Form类对象m_frmMain,在startApp()函数中判断是否为刚进入游戏,如果为假的话,将创建Form类的实例,并且调用append()方法在表单上放置m_MainList菜单。调用setCommandListener()命令使Form与CommandListener建立关联。调用Displayable显示。seturrent()函数显示背景介绍窗口。当玩家点击ok后将调用display.setCurrent(m_MainList)以显示游戏菜单m_MainList。当玩家按住上或下键时,在函数keyPressed(int code)中的整型变量menuIndex相应的减1或加1,相应的,在paint()函数中会根据menuIndex绘制选项是否被选中。当移动选项条到某项,并点击ok时,在commandAction()方法中根据 menuIndex 来判断是“开始游戏”、“游戏说明”、“关于”、“退出”。例如当选择“关于”时,将调用MainMIDP类中的commandAction ()方法以显示”关于”界面。(4) 游戏逻辑及五个重要类的实现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) 地图的移动根据游戏的设定,游戏中选图片是向下向上移动的,实现此功能的方法。每个创建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类对象,并且使选项“新游戏”改变为”重新开始“。完成此项功能的语句子为MenuScreen.mainmenu0 =”重新开始”。当选择”重新开始“时,使用gamescreen=new gameScreen(this)将使所有变量重新被初始化,如地图的绘制、敌人出现位置的重置、敌人的数量、玩家飞机的当前位置等。使用gamescreen.start()重新开始程序的循环。在方法paint()过程中,除了要重绘地图、图片外还要在上方绘制关卡信息、玩家分数点、及所用时间等。首先使用lm.setViewWindow()和lm.paint()设定可视范围ViewWindow和从哪里画起。其次,使用g.drawString()绘制屏幕上方的关卡信息、战绩、玩家剩余生命标志。当每次刷新绘图页面时,应使用GameCanvas的flushGraphics()将屏幕后台的缓冲区内的图像刷新到前台来(flushGraphics()应该写在paint() 的最后)。(6) 核心算法判断图片是否可擦除两点连接原理原理坐标选中两点,坐标分别为S(sx,sy)、T(tx,ty),判断连接从S点开始,我们可以从四个方向与T点进行连接,分别是上、下、左、右,在此,我们以向上为例进行算法分析。每次向上连接一点时,又有两个方向可以选择,即左和右(即分T在S的左、右边)。在此,我们选择选择向左为例对算法进一步分析。确定了方向的选择,那么连接线的形状就是:SSTT(T在S的左边的连接情况)那么如何判断这一系列连接线是否可连呢?源点S的坐标为(sx,sy),目标点T坐标(tx,ty)在算法中我们定义几个临时变量:x1、x2、 y1、 y2,当然还有游戏地图的边界变量:stMap_x、stMap_y。源点S不需要判断,默认可以作为连接线上的一点。如果sy0,将sy-1赋给y1,如果坐标(sx、y1)没有图片文件(我们在此算法中用empty表示),则标记此点为可连接点(我们在此算法中用SetCntMaps(x, y)表示),如果有图片文件则此路线不可行,也就是选择向上连接是无法满足要求的。我们在这里演示的情况是先向上再向左,所以接下来的判断条件是tx 0y1=sy-1(sx,y1)可连接SetCntMaps(Sx, y1)x2=sx-1(x2,y1)可连接SetCntMaps(x2, y1)x2=txx2=x2-1y2=y1-1(x2,y2)可连接SetCntMaps(x2, y2)y2=y2-1y2=0结束是是是是否否否否4.3 打包测试使用Eclipse完成代码的调试之后,需要使用WTK生成包(即jar和jad文件),其过程如下:首先,使用WTK的新建项目功能建立一个新项目,要求与Eclipse工作区下的项目名称、MIDlet类名相同。 新建项目后,将Eclipse工作区下的.java文件拷入src文件夹,将.class文件拷入class文件夹(需要新建),将pic文件夹拷入res文件夹,点击生成,如一切正常之后,选择项目-包-生成包。生成的jar和jad文件存储在LLK/bin目录下。运行Wireless Toolkit 2.5.2,使用手机模拟器进行测试。点击Lanuch按纽,进入游戏界面,即可以进行游戏测试了。 六、 源代码主类 import javax.microedition.lcdui.*; import javax.microedition.midlet.*; import java.lang.Thread; public class MainMIDP extends MIDlet implements CommandListener,ItemStateListener/显示控制句柄private Display m_display; /游戏显示对象private GameCanvas m_GameCanvas;/启动log信息画面private UICanvas m_uiCanvas;/标志是否已经运行过一次游戏,用于处理在第二次进入游戏的时候,一些资源不需要初始化private boolean m_isOnece;/private UICanvas m_uiCanvase;/private Command cmExit; / Exit midlet/private Command cmOk;/private Command cmBack;/选项的主窗口,多个选项列表private List m_MainList;private Command m_ML_Select;/ 帮助说明框private Form m_Form_Help;private Command m_Frm_Help_Back;private Command m_Frm_About_Back;/游戏画面一节结束后,后游戏一局结束后,在游戏画面下面的COMMAND显示的的:继续和退出 命令按钮private Command m_GUIC_Connitnue;private Command m_GUIC_End;private String strMsg;/*private Form m_frmMain;/主窗口的选项列表private ChoiceGroup cgMain;private Command cmMainMore;*/创建所有的窗口public void CreateForms()m_MainList = new List(Main, List.IMPLICIT);/m_ML_Select = new Command(Dodo,Command.ITEM,0);/m_MainList.addCommand(m_ML_Select);m_MainList.append(开始游戏,null);m_MainList.append(选项,null);m_MainList.append(游戏说明,null);m_MainList.append(关于,null);m_MainList.append(退出,null);m_GameCanvas = new GameCanvas(this);new Thread(m_GameCanvas).start();m_GUIC_Connitnue = new Command(继续,Command.SCREEN,1);m_GUIC_End = new Command(退出,Command.SCREEN,1);m_MainList.setCommandListener(this);m_GameCanvas.setCommandListener(this);/*m_frmMain = new Form(Main Form);cmMainMore = new Command(More,Command.ITEM,1);cgMain = new ChoiceGroup(Preferences, Choice.EXCLUSIVE);/MULTIPLE);cgMain.append(No1,null);cgMain.append(No2,null);cgMain.append(No3,null);m_frmMain.addCommand(cmMainMore);m_frmMain.append(cgMain);*/启动游戏后释放所有的窗口信息,节约内存private void FreeForms()public MainMIDP() super();m_isOnece = true;m_display = Display.getDisplay(this);/CreateForms();/m_GUIC_Connitnue = new Command(Continue,Command.ITEM,1);/m_GUIC_End = new Command(Close,Command.ITEM,1);protected void startApp() throws MIDletStateChangeException /m_MainList.getSelectedIndex()/m_MainList.setItemStateListener(this);if (m_isOnece)m_uiCanvas = new UICanvas(this);new Thread(m_uiCanvas).start();m_display.setCurrent(m_uiCanvas);elsem_display.setCurrent(m_MainList);protected void pauseApp() protected void destroyApp(boolean arg0)public void commandAction(Command c, Displayable d) int iSelect;char chV,chV2;chV = 0x0d;chV2 = 0x0a;/System.out.println(MIDP commandAction );if (c = m_ML_Select) | (c = List.SELECT_COMMAND)iSelect = m_MainList.getSelectedIndex();switch(iSelect)case 0:m_isOnece = false;m_GameCanvas.SetCurrentLevel(1);m_display.setCurrent(m_GameCanvas);/m_uiCanvase = null;/System.gc();break;case 1:break;case 2:/游戏说明/m_TextBox_Help;m_TB_Help_Back/m_TextBox_Help = new TextBox(帮助,hehe,100,TextField.ANY);m_Form_Help = new Form(游戏规则:);strMsg = 需选择一对相同的图形, +/ chV + chV2 +进行连接但此连接是在避 + /chV + chV2 +开其他图形后,呈现的路 + /chV + chV2 +径以不超过二转弯为条件. + /chV + chV2 +如符合规定则消除此一对牌 + /chV + chV2 +而得分.每一局里玩家需要 + /chV + chV2 +在规定的时间内消除所有的 + /chV + chV2 +牌子,当完成任务后,方能 + /chV + chV2 +进行下一关. + /chV + chV2 + 游戏结束后,会出现当前 + /chV + chV2 +的关数、金币数和所用的时 + /chV + chV2 + 间.这时,可以选择继续玩 + /chV + chV2 +游戏或结束游戏. + chV + chV2 + ;m_Form_Help.append(strMsg);m_Frm_Help_Back = new Command(返回,Command.SCREEN,1);m_Form_Help.addCommand(m_Frm_Help_Back);m_Form_Help.setCommandListener(this);m_display.setCurrent(m_Form_Help);break;case 3:m_Form_Help = new Form(关于:);strMsg = 版本:1.0 + chV + chV2 + Mopo Soft 2005 + chV + chV2 + 版权所有 + chV + chV2 + 程序:周运冲 + chV + chV2 + 美工:沈鹏飞、伍海飞 + chV + chV2 + 策划:钟士杰 + chV + chV2 + 冒泡网: + chV + chV2 + ;m_Form_Help.append(strMsg);m_Frm_About_Back = new Command(返回,Command.SCREEN,1);m_Form_Help.addCommand(m_Frm_About_Back);m_Form_Help.setCommandListener(this);m_display.setCurrent(m_Form_Help);break;case 4:exitMIDlet();break;default:break; else if (c = m_Frm_Help_Back)m_display.setCurrent(m_MainList);m_Frm_Help_Back = null;m_Form_Help = null; else if (c = m_Frm_About_Back)m_display.setCurrent(m_MainList);m_Frm_About_Back = null;m_Form_Help = null;else if (c = m_GUIC_Connitnue)ShowGameUICommand(false);m_GameCanvas.SetCurrentLevel(1); else if (c = m_GUIC_End)ShowGameUICommand(false);m_display.setCurrent(m_MainList);public void ShowMainCommand()/System.out.println(MainMIDP ShowMainCommand : );m_display.setCurrent(m_MainList);m_uiCanvas = null;/m_GameCanvas = new GameCanvas(this);/new Thread(m_GameCanvas).start();/System.out.println(MainMIDP ShowMainCommand : );public void ShowGameUICommand(boolean isShow)if (isShow)m_GameCanvas.addCommand(m_GUIC_Connitnue);m_GameCanvas.addCommand(m_GUIC_End);elsem_GameCanvas.removeCommand(m_GUIC_Connitnue);m_GameCanvas.removeCommand(m_GUIC_End);public void itemStateChanged(Item item)public void exitMIDlet() destroyApp(true);notifyDestroyed();Gameanvas类/package LLK;import java.util.Timer;import java.util.TimerTask;import javax.microedition.lcdui.*;import java.lang.Thread;class GameCanvas extends Canvas implements Runnable / implements CommandListener private MainMIDP m_midlet;private String m_KeyName;private TimerTask m_TimerTask; private Timer m_timer; /画游戏屏幕的时间间隔 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; /游戏运行状态标志: /0: 游戏图片文件装载过程,在程序启动的时候,另外一线程装载。 /1:游戏地图文件初始化状态,出现地图初始化的效果 /2:游戏进行中,检查剩下时间,调整状态条,显示分数等信息 /3:单节游戏结束,处理是否继续游戏、退出游戏、保存记录;/4:一局游戏结束,显示画面庆祝 private int m_StatusFlag; /游戏地图信息 private GameMap m_gameMap; public GameCanvas(MainMIDP midlet) this.m_midlet = midlet;m_StatusFlag = 0;m_timeCount = 0;m_gameMap = new GameMap();StartUITimer();m_paintTime = 0;m_timeMcount = 0;m_bPaintCleanFlag = false;m_bPaintCleanStart = false;m_iPaintCleanCount = 0;m_IniGameMapCount = 0;m_GameTimeCount = 0;protected void paint(Graphics g) int iRtn;g.setColor(99, 40, 25);g.fillRect(0, 0,128,160);/getWidth(), getHeight();g.setColor(255, 0, 0);try switch (m_StatusFlag)case 0:br

温馨提示

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

评论

0/150

提交评论