




已阅读5页,还剩36页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编号(学号)B0785020海南大学毕业论文(2007届本科)题目基于嵌入式系统的JAVA游戏的设计与实现学院应用科技学院专业网络工程姓名安钧指导教师胡竹华老师完成日期2011年06月15日毕业论文设计任务书论文设计题目基于嵌入式系统的JAVA游戏的设计与实现下发任务日期20100626学生姓名安钧指导教师胡祝华老师一论文(设计)主要内容本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序扑克豪斯。本程序的界面和运作方式于台式游戏豪斯,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。本论文介绍了手机的软硬件特性、J2ME的相关技术及本程序的结构分析和具体功能的实现。二论文(设计)的基本要求1有关资料的收集要求尽量收集第一手资料,资料要真实、可靠、有代表性。2资料的整理与分析要求条理清晰,数据分析详尽。3查阅相关文献要求贴近主题,有参考价值。4认真撰写论文,字数在10000字以上。三论文(设计)工作进度安排阶段论文(设计)各阶段名称日期1与老师交流指导2010626201010312数据的分析与处理20101112011313查阅相关文献20113220114104撰写论文初稿201141120115315论文修改20116120116106论文完成2011615备注四应收集的资料及主要参考文献(指导教师指定)1、JAVA设计与实现文献2、嵌入式游戏的研究文献3、基于J2ME的研究资料说明此任务由指导教师填写一式两份,一份发给学生,一份发给指导教师留存。海南大学毕业论文(设计)选题审批表选题名称题目来源学号姓名专业指导教师职称研究内容研究计划特色指导教师意见教研室意见学院意见毕业论文(设计)指导记录学生姓名专业指导教师姓名职称本年度指导毕业生人数论文(设计)题目时间地点指导内容学生签字年月日指导教师签字年月日教研室主任签字年月日目录摘要7ABSTRACT7一前言712引言813手机游戏特征814手机游戏的类型915手机软件现状916本游戏的未来917手机未来的发展方向1018游戏业务及J2ME概述10二开发环境及相关技术的介绍1121JAVA语言的特点1122J2ME是什么1123J2ME智能客户端1224J2ME总体架构1225简单环境的搭建1326MIDP应用程序14三J2ME手机游戏需求分析1431本程序需解决的有关技术问题1432程序流程图1533绘图与MIDP20新增的GAMECANVAS包16331提供低级绘制的CANVAS类16332GRAPHICS类16333PNG格式1634有关绘图的一些技术1635内存使用的最佳化1736混淆器OBFUSCATOR的使用1737模拟器的相关调试18四程序分析和编写手机代码1841游戏进入前的选择1842主游戏逻辑及其涉及到的若干类18422游戏的设定20423游戏中的帮助和程序控制器20424游戏版权声明23425游戏的主要程序24426游戏的主程序33五常见错误分析3451画图错误3452变量没有定义或没有初始化3453在GAMESCREEN类中不能用线程3454在玩游戏时出会发出两张同样的牌35六用户手册36参考资料36致谢36摘要J2MEJAVA2MICROEDITION是近年来随着各种不同设备,尤其是移动通信设备的飞速发展而诞生的一项新的开发技术。它定位在消费性电子产品的应用上,对设备的智能化、多样化,提供了革命性的解决方案,并因其“WRITEONCE,RUNANYWHERE”的JAVA特性而提高开发的效率。随着手机的日益普及、JAVA功能在移动设备上的实现,JAVA应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序扑克豪斯。本程序的界面和运作方式于台式游戏豪斯,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。本论文介绍了手机的软硬件特性、J2ME的相关技术及本程序的结构分析和具体功能的实现。关键词J2ME,手机游戏,JAVA,扑克豪斯ABSTRACTJ2MEISAKINDOFFASTDEVELOPINGTECHNOLOGYIMPLEMENTEDONVARIOUSDEVICESESPECIALLYMOBILECOMMUNICATIONEQUIPMENTSITFOCUSESONAPPLICATIONFORCONSUMPTIVEELECTRONICPRODUCTS,PROVIDINGREVOLUTIONARYSOLUTIONTOTHEINTELLIGENTIZATIONANDDIVERSIFICATIONOFTHEEQUIPMENTITIMPROVETHEEFFICIENCYOFTHEDEVELOPMENTPROCESSTHANKSTOITS“WRITEONCE,RUNANYWHERE”NATUREWHENCELLPHONEISGETTINGEVERMOREPOPULARNOWADAYS,WITHTHEIMPLEMENTATIONOFJAVATECHNOLOGYONMOBILEEQUIPMENT,INCREMENTOFCAPITALONCOMMUNICATIONSERVICEEXHIBITSITSFORCEONPEOPLESEVERYDAYLIFE,PROVIDINGTHEMEVERFASTINFORMATIONJUSTINHANDTHISDISSERTATIONFOCUSESONIMPLEMENTATIONOFJ2METECHNOLOGYANDHASDEVELOPEDACOMMERCIALGAMESUITERUNONMOBILEPHONESPOKERMACHINETHISAPPLICATIONINHERITSMANYCHARACTERSOFTHEOLDFASHIONEDGAMEBATTLECITYWHICHDEVELOPEDBYNINTENDOIN1980SITTRANSPORTSTHECLASSICALPRODUCTTOMOBILEPHONES,OFFERINGCORRESPONDINGSOFTWAREFORSUCHMOREPOPULARHARDWAREPLATFORMTHISDISSERTATIONINTRODUCESTHECHARACTERISTICOFNINTENDOFCMACHINEANDITSSOFTWARE,J2MEANDITSRELATIVETECHNOLOGYASWELLASTHISPROGRAMSSTRUCTUREANDANALYSISOFIMPLEMENTATIONINDETAILSKEYWORDSJ2ME,MOBILEGAME,JAVA,TANK,BATTLECITY一前言12引言手机游戏成绩斐然,成为IT产业中增长最快的部分之一纵观IT产业的历史,计算机游戏已经成为技术创新背后的动者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制无论是将图形强制在人工智能(AI)上还是网络安全性。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品游戏领域总是有充足的空间给那此在这方面有天分的单个创新者。随着技术对游戏经验的促进,游戏市场持续增长。商业IT革命为我们节省了时间力之一。计算机游戏和金钱,从而提高了我们的工作水平,我们因此花费更多的时间和金钱在游戏上,来改善生活的整体质量。甚至在当今困难的经济时代,游戏仍保持快速增长,他仍然是盈利行业的组成部分。JAVA开发者应该注意到这里蕴藏着的巨大的商机。13手机游戏特征手机游戏的盈利主要是由于它们的涉及面很广。手机已经与现代生活方式紧紧地结合在一起。他们是最普遍携带的个人用品中仅次于钥匙和钱包的东西。传统的台式机游戏将目标锁定在低级趣味的人和青少年身上,而手机游戏则每个人都可以访问的到随时,随地。尽管每个手机游戏都不贵,但是巨大的使用量(如每人每星期一个新游戏)将使得这个市场商机无限并且有利可图。但是,对于开发者来说,将控制台游戏迁移到手机游戏工程很大因为他们所面向的对象、生活方式和分布式模型都有着极大的区别。让我们从手机游戏的需求谈起吧。一个成功的手机游戏大多具有以下特征1易于学习既然手机游戏面向的是普通消费者而不是计算机高手,那么他们不可能深入的学习游戏技巧。消费者不会花几个小时去研究一个3美元的手动操作的游戏。所以游戏必须是一下载就可以玩的。保持游戏的简单是最基本的要求。2可中断性多任务处理是手机生活方式的基本特征。手机用户常常在任务(如等一个电子邮件或者等车)之间有一小段时间。而游戏、日历管理、通讯和工作数据访问使用的是同一个设备。所以一个好的手机游戏应该提供短时间的娱乐功能,并且允许用户在游戏和工作模式之间顺利切换。3基于订阅手机游戏的盈利成功取决于他们巨大的使用量。一开始开发和设计每个游戏都是昂贵的。如果一个手机游戏开发者要赚钱的话,重要的是同一个游戏引擎,多个标题,基本的故事情节类似。基于订阅的游戏是不断产生收入的最好方法。4丰富的社会交互不管一个游戏设计得多好,只要玩家找到了它的根本模式或者玩完了所有的游戏路径很快就会厌烦这个游戏。对于一个基于订阅的游戏,重要的是与别的玩家合作以增强所玩游戏的智力和随机性。在今天纷繁复杂的多玩家游戏中具有丰富社会交互的游戏证明是成功的。5利用手机技术的优点巨额的手机技术研发费用都花在提高设备和网络的可用性和可靠性上面。因此,手机设备硬件和网络协议与桌面/控制台世界(如全球定位系统GPS扩展、条形码扫描仪、和短消息服务SMS/多媒体信息服务MMS通讯)有着非常大的差别。好的手机游戏应该利用那些更新的设备特征和网络基础设备的优点。6无违法内容既然所有年龄/性别的人群都玩手机游戏并且常常在公共/工作场合,你应该避免明显的暴力或者色情内容。14手机游戏的类型基于以上标准,最有可能成功的手机游戏就是那些临时小游戏,它可为广泛的玩家在所有的社交场合提供娱乐。特别是,下列类型的游戏将是明天最具有杀伤力的游戏1多玩家游戏这些游戏可以提供手机访问以便建立在线游戏团体。或者,他们利用手机专有特征如多媒体通讯和基于位置的服务,从而创建完全不同的社会结构。好的游戏设计和管理是这种类型游戏成功的关键。2基于内容的游戏这些游戏传送版权的多媒体内容,如名人的图片、视频片断、音频立体声、和私人的体育节目,给那些音乐/电影/体育迷们。它成功的关键就是提供值得订阅的高品质的内容流。3高冲击的视频游戏PC和台式游戏已经从2D进化到3D。手机游戏也会遵循这种趋势。现在已经出现手机3D工具箱和听筒。但是,3D是非常资源集中型的。他们要求开发者和图形设计者都是专家级的。专业的商店最有可能开发这些游戏。在手机游戏的早期,大多数开发者都是想要玩转设备、学习技巧和快速攻关的狂热分子。但是,随着更多的开发者加入这个行业,手机游戏已经进化成涉及到专业设计师、构造师、开发者、产品经销商、律师、和艺术家在内的主导产品。这是行业走向成熟的必然趋势。尽管在某人的业余时间内要开发和推销简单的游戏更加困难,但是更多的专业商店将为许多人提供更多的就业机会。15手机软件现状在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。但是传统手机存在以下弊端1传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。2传统手机访问互联网是通过WAPWIRELESSAPPLICATIONPROTOCAL,所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。而JAVA技术在无线应用方面的优势非常明显1应用程序可按需下载,而不是购买由硬件商提供的套件,可升级空间大。2JAVA技术提供了一个类库,它使的应用开发商可以创建更为直觉、丰富的用户界面GUI;3JAVA技术使网络带宽的应用更为有效,因为应用程序可以下载到器件上,并在本地运行,仅仅是在连接到服务器时才会占用网络带宽。基于以上分析,JAVA手机将是未来手机的发展方向,是业界的热点。16本游戏的未来看过周润发主演的赌神都知道里的豪斯是很好玩的,也很有发展前途。一,这个游戏对手机的要求不高;二,这个游戏简单;三,当这个游戏做成网络游戏时,可以是各个玩家斗智的平台;要实现这点技术要求并不难。在本设计的基础上再加上某些技术就可以了A网络的连接B能读能存网络数据库C牌不再是用随机产生这么简,它应该根据玩家的积分来产生,这样会更好。17手机未来的发展方向手机游戏的盈利主要是由于它们的涉及面很广。手机已经与现代生活方式紧紧地结合在一起。他们是最普遍携带的个人用品中仅次于钥匙和钱包的东西。传统的台式机游戏将目标锁定在低级趣味的人和青少年身上,而手机游戏则每个人都可以访问的到随时,随地。尽管每个手机游戏都不贵,但是巨大的使用量(如每人每星期一个新游戏)将使得这个市场商机无限。只要有好的游戏,就会有更广的使用量。18游戏业务及J2ME概述虽然JAVA已经被用到许多企业级软体上,可是其实骨子里面还是非常适合用在嵌入式系统之中。JAVA平台演进到JAVA2后,JAVA平台分别针对不同领域的需求被分成四个版本,亦即J2EE、J2SE、J2ME以及JAVACARD。其中J2ME定位在消费性电子产品的应用上。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。这个版本的应用层面相当广泛,会是未来JAVA平台发展的重点项目。J2ME在设计其规格的时候,遵循着“对各种不同的装置而造出一个单一的开发系统是没有意义的事”这个基本原则。于是J2ME先将所有的嵌入式装置大体上区分为两种一种是运算功能有限、电力供应也有限的嵌入式装置比方说PDA、手机;另外一种则是运算能力相对较佳、在电力供应上相对比较充足的嵌入式装置比方说冷气机、电冰箱、电视机上盒SETTOPBOX。因为这两种型态的嵌入式装置,所以JAVA引入了一个叫做CONFIGURATION的概念,把上述运算功能有限、电力有限的嵌入式装置定义在CONNECTEDLIMITEDDEVICECONFIGURATIONCLDC规格之中;而另外一种装置则规范为CONNECTEDDEVICECONFIGURATIONCDC规格。也就是说,J2ME先把所有的嵌入式装置利用CONFIGURATION的概念区隔成两种抽象的型态。J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益。因为J2ME应用在不同设备上都是便携式的,他们常常可在网络上下载和执行。如果没有正确的防范,它则为用户和无线通信公司冒着无数个安全的风险。幸运的是,JAVA被设计成一种安全的语言。所有字节码应用在执行之前都要校验;JVM在执行过程中监督应用的安全性和存储违反问题。MIDPV2运行时间包括一个完全特征化的、基于域的安全管理员,它在应用的数字签名者鉴别的基础上赋予应用API级许可。纵观IT产业的历史,就像军事的发展时常推动计算机的演化一样,计算机游戏已经成为技术创新背后的动力之一。计算机游戏者渴望更加强大的硬件计算能力;渴望不受不同的软件的限制无论是将图形强制在人工智能(AI)上还是网络安全性。游戏开发者和玩家常常是前沿计算机技术的最早的采用者。由于他们的创新天性,游戏不再是由大型采购公司控制的技术产品游戏领域总是有充足的空间给那些在这方面有天分的单个创新者。手机游戏的盈利主要是由于它们的涉及面很广。手机已经与现代生活方式紧紧地结合在一起。他们是最普遍携带的个人用品中仅次于钥匙和钱包的东西。传统的台式机游戏将目标锁定在低级趣味的人和青少年身上,而手机游戏则每个人都可以访问的到随时,随地。尽管每个手机游戏都不贵,但是巨大的使用量(如每人每星期一个新游戏)将使得这个市场商机无限。但是,对于开发者来说,将控制台游戏迁移到手机游戏工程很大。因为他们所面向的对象、生活方式和分布式模型都有着极大的区别。二开发环境及相关技术的介绍21JAVA语言的特点1平台无关性JAVA引进虚拟机原理,并运行于虚拟机,实现不同平台之间的JAVA接口。使用JAVA编写的程序能在世界范围内共享。JAVA的数据类型与机器无关。2安全性JAVA的编程类似C,但舍弃了C的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样可以避免病毒通过指针入侵系统。它提供了安全管理器,防止程序的非法访问。3面向对象JAVA吸收了C面向对象的概念,将数据封装于类中,实现了程序的简洁性和便于维护性,使程序代码可以只需一次编译就可反复利用。4分布式JAVA建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。5健壮性JAVA致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存出错的可能性。JAVA取消了C语言的结构、指针、DEFINE语句、多重继承、GOTO语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。22J2ME是什么据J2ME应用程序调用的API,J2ME应用程序分为标准应用程序和不易移植的应用程序两种。据J2ME应用程序调用的API,J2ME应用程序分为标准应用程序和不易移植的应用程序两种。术语CDC连接设备配置CLDC连接限制设备配置JREJAVA运行环境MIDPMOBILEINFORMATIONDEVICEPROFILE规范OTAOVERTHEAIR非OTA数据线、蓝牙(BLUETOOTH)、红外线(IRDA)、多媒体信息服务(MMS)、EMAIL附件23J2ME智能客户端J2ME平台被认为是最杰出的手机游戏平台,它为开发者、设备制造商、网络通信公司和消费者广泛接受。它有一些非常重要的特征对所有组织都有益24J2ME总体架构J2ME使用配置和简表定制JAVA运行时环境JRE。作为一个完整的JRE,J2ME由配置和简表组成,配置决定了使用的JVM,而简表通过添加特定于域的类来定义应用程序。配置将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特定JVM。我们将在J2ME配置一章中详细讨论配置。简表定义应用程序;特别地,它向J2ME配置中添加特定于域的类,定义设备的某种作用。我们将在J2ME简表一章中深入介绍简表。下面的图表描述了不同的虚拟机、配置和简表之间的关系。它同时把J2SEAPI和它的JAVA虚拟机进行了比较。虽然J2SE虚拟机通常被称为一种JVM,但是J2ME虚拟机、KVM和CVM都是JVM的子集。KVM和CVM均可被看作是一种JAVA虚拟机它们是J2SEJVM的压缩版,并特定于J2ME。移动通信的时代即将来临,通信相关待业变得前景可期,而除了移动通信的主要通信工具手机,其功能越来越强大之外,有更多的厂商相继投入移动通信设备的生产与开发,其平台和操作系统的复杂度比目前混乱的PDA有过之而不及,除了SYMBIAN针对手机推出操作系统SYMBIANOS(过去称做EPOC,)操作系统之外,微软也针对手机推出操作系统SMARTPHONE2002STINGER,但是日前市面上的手机仍以使用厂商自行开发的操作系统者居多。平台的复杂纷乱对一般用户当然没什么影响,但是对于程序开发人员来说,这么多不同的程序发展平台,光看完头就昏了。如果每个平台都有自己的程序写法以及程序库,那么光是看上面这些平台至少就要学习五种以上程序的写法。当然,只专精一种平台当然是很好的事情。可是程序员不禁要说“如果我们写出来的软件可以在不经过修改源代码的情况下就能够在这些平台上执行,那不是更完美吗“对程序开发人员来说,这样的投资报酬率当然是最大的。要在那么多平台上开发程序,对程序员来说的确是很大的挑战,如果要把所有的时间和精力放在软件的可用性上,那么相对而言很多时候我们根本没有那么多时间撰写各种平台的程序。要解决这个问题,一般来说程序员会选用一个可以跨平台的FRAMEWORK来达成至少SOURCECODELEVEL的跨平台。利用JAVA的“WRITEONCE,RUNANYWHERE”特性,我们可以真正达到程序只要写一次,拿到任何平台上都可以执行。利用JAVA撰写手机上的程序当然有其缺点,最广为人知的可能就是执行效率的问题,JAVA在执行速度这个议题上一直让人诟病。不过笔者认为,随着技术的发达,将会有更快更省电的嵌入系统专用CPU出现,JAVAONE中也传出将针对J2ME开发专用芯片,让JAVA在手机上的程序可以跑得更快,因此效率上的总是其实是可以忽略的。更何况,当SUN在设计J2ME的时候,也用了很多方式企图加快JAVA在手机上的执行速度。因此,目前的移动通信设备大厂几乎采用J2ME平台。搭建J2ME环境25简单环境的搭建1、下载JDK和J2ME无线工具包(WWWSUNCOMCN)安装SUNJDKJ2SDK1_4_0_03WINDOWSI386安装SUNJ2MESDKJ2ME_WIRELESS_TOOLKIT1_0_3WIN2关于WIRELESSTOOLKITWTKWIRELESSTOOLKIT是SUN公司针对J2ME推出的用于手机和PALM等移动设备的开发包,是除手机厂商的专用开发包外唯一的手机模拟器开发包。它通用性高,开发出的应用程序可保证能运行在大部分设备上,而不像专用厂商具有一定的不兼容性。虽然它没有强大的功能和完善的调试手段,但它提供运行模拟器的最基本组件,是其他IDE需集成采用的必备元素。3,用于手机游戏开发的环境不是只建立一个JAVASDK就可以了,它还需要了一个一个库类,叫JAVATOOLKIT。首先安装JAVASDK再在原来的目录下安装JAVATOOLKIT这个新的环境就可以满足我们的需要了。然后我们编写一个最简单的程序用来验证这个环境是否可以用来编写我们的手机程序。编写以下代码保存成HELLOJAVA文件。IMPORTJAVAXMICROEDITIONMIDLETIMPORTJAVAXMICROEDITIONLCDUIPUBLICCLASSHELLOEXTENDSMIDLETPRIVATEDISPLAYDISPLAYPUBLICHELLODISPLAYDISPLAYGETDISPLAYTHISPUBLICVOIDSTARTAPPTEXTBOXTNEWTEXTBOX“HELLOMIDLET“,“HELLOMIDP“,256,0DISPLAYSETCURRENTTPUBLICVOIDPAUSEAPPPUBLICVOIDDESTROYAPPBOOLEANUNCONDITIONAL启动KTOOLBAR新建一个工程,取名HELLO。把以上文件拷到HELLO文件的目录编译。能通过编译并能运行,说明这个开发环境就能满足我们的需要了。26MIDP应用程序MIDP应用程序是指遵循由应用程序主体(JAR文件)和应用程序描述文件(JAD文件)组成。按部署方式可分OTA和非OTA两种。MIDLET是JAVE一个类,扩展了JAVAXMICROEDITONMIDLETMIDLET抽象类。MIDLET生命周期分3种状态运行状态,暂停状态,销毁状态等。261JAVAAPPICATIONMANAGER手机中负责调配程序运行资源的管理后台是JAVAAPPLICATIONMANAGER。它所使用的传输媒体可以是红外线、网络、以及其他可用来传输的媒体。JAVAAPPLICATIONMANAGER会从网络上下载代表该APPLICATIONSUITE的JAR档,接着在手机上安装此MIDLETSUITE,然后在手机开始执行该应用程序。整个详细的运作流程如图21所示。27预先审核审核动作一般在PC上执行,速度可以接受。为了是对安全的考虑,任何来自本地或者远程机器,都必须经过BYTECODE审核器的验证,以防止程序在传输途中遭到恶意更改。如图28J2ME、J2SE与J2EE之间的比较下面的图表描述了支持J2ME应用程序的设备,同时说明了J2ME适合JAVA平台之处三J2ME手机游戏需求分析31本程序需解决的有关技术问题1游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在MIDP20中提供了用于增强游戏功能的GAME包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。3一开始就把牌全部分配好,这样就可以简单而有效地避免了牌的重复,也可以大大地简化了程序代码的编写。4牌的转化可以用一个函数来实现,这样就可以使代码更模块化,利用也就可以更高5牌慢慢移动的实现。牌的移动是用线程来实现的,用THREADSLEEP这个函数来作时间延迟,让坐标变量缓慢地变化。然后通过刷新画图,就会使人觉得牌是在缓慢地移动。6是否是要牌还是放弃(认输),它通过向右键(要牌)和向左键(放弃)来操作的。当点击向右键时,发生点击事伯,变量发生相应的变化,然后触发画图事件。7当玩家都跟到5张牌时,就要判断牌的大小了,它通过多次循环,来确定其大小。8JAVA是基于虚拟机的半解释型编译系统,其执行效率较C等完全编译后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器OBFUSCATOR进行程序打包后的优化。以上相关技术细节和整体流程将分别在以下小节阐述。32程序流程图MIDLETSUITE是MIDP应用程序的最小单位,JAM负责将手机内的MIDLETSUITE以图形V化的方式呈现,让用户能够选取欲执行的MIDLETSUITE,一旦选取了某个MIDLETSUITE,操作系统就会激活KVM执行里面的MIDLET。MIDLET及相关的支持类组成了MIDP应用程序的实际内容。每个MIDLET都必须继承JAVAXMICROEDITIONMIDLETMIDLET这个抽象类。在MIDP规格中定义了MIDLET的生命周期,以及可以存在的三种状态,包括PAUSED、ACTIVE以及DESTROYED,每一个MIDLET在任何时刻只可能处于其中的一个状态这V三种状态的转换关系如图所示本程序采用面向对象的设计模式,对游戏中的所有物体赋予对象的概念和属性。运行程序后允许用户选择执行选项菜单,在开始游戏后将先从外部文件载入牌的图文件,对背景的所有物体进行绘图。在主程序运行的线程中,画面刷新将以一定的频率采用双缓冲技术对屏幕重绘,实时反映整个游戏的进行状态。用户控制的牌运行在主线程中,随屏幕刷新的频率而移动。牌将在游戏开始时逐渐新增线程,每增加一个牌对象就新增加一条线程,一旦线程数满到最大值(本程序暂设置最大值为几千多个),就不允许线程的再增加。这个线程问题就是本设计的一个BUG。本程序主要的流程如图32所示流程简略解释程序一开始执行是先从主类TESTJAVA来开始。这个类从MIDLET类继承过来,在程序的开始函数STARTAPP中我用NAVIGATORCURRENTNAVIGATORMAIN_SCREEN这个等式把程序的执行转到MAINSCREENJAVA文件程序的画面来。而这个类继承LIST,这个LIST类可以更方便地控制程序的选择。在这个文件中列出一个菜单供用户去选择,如下开始设定版权声明离开当点击开始时,程序转到GAMESCREEN这个类去。GAMESCREEN这个类继承CANVAS,CANVAS专门是用来控制游戏的。里面包括屏幕的绘图,一些变量的初始化。当点击设定时,程序转到SETSCREEN这个类。这个类用于登录帮助网站的,当然这个是需要网络支持的。当点击版权声明时,程序转到COPYSCREEN这个类,这个类继承ALERT,它用于描述版权的一些信息。当点击离开时,程序退出TEST类。33绘图与MIDP20新增的GAMECANVAS包331提供低级绘制的CANVAS类为了能有程序开发人员控制接口的外观和行为,需要使用大量的初级用户接口类,尤其在游戏程序中,几乎完全依赖的就是CANVAS抽象类进行绘图。从程序开发的观点看,CANVAS类可与高级SCREEN类交互,程序可在需要时在CANVAS中掺入高级类的组件。CANVAS提供了键盘事件、指点杆事件(如果设备支持),并定义了允许将键盘按键映射为游戏控制键的函数。键盘事件由键代码指定,但这样控制游戏会导致缺乏通用性,并不是每个设备的键盘布局都适合游戏的操作。应当将键代码转换为游戏键的代码,以便硬件开发商能定义他们自己的游戏键布局。本程序中,操纵用户坦克运行的按键都定义为游戏控制键,这样便能适应所有的机器。332GRAPHICS类GRAPHICS类提供了简单的2D绘图功能。它具有24位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在PAINT函数中使用GRAPHICS绘制,GAMECANVAS可调用GETGRAPHICS函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。其对象会被传给CANVAS的PAINT函数,以便最终显示。333PNG格式PNGPORTABLENETWORKGRAPHICS格式是MIDLET唯一支持的图象格式,PNG具体格式由PNGSPECIFICATION,VERSION10定义的。PNG格式提供透明背景的图象,这对绘制游戏画面和被操纵主角极有帮助。坦克之间或与障碍物碰撞时就不会因为背景有特定的颜色,显示出的效果像贴上的图片而缺乏真实感,物体之间轻微重叠时最上层图片也不会覆盖超过其有效象素外的部分。PNG格式图片中包含许多定义其图片特性的冗余部分CHUNKS。这些代码包含在每一个单独的PNG格式图象中,然而如果将多个PNG图象合并在一张幅面稍大一些的整图中,多个CHUNKS就可以得到精简,图片的大小可以得到控制。使用IMAGE类中的CREATEIMAGE函数可从整图中分割出所需要的元素。在GAME包中的TILEDLAYER和SPRITE类都整合了这样的功能。本程序中的地图元素都集成在一张TILEPNG图片中,实现了方便的管理和程序体积的精简。34有关绘图的一些技术在没有MIDP20前,进行游戏绘图一般需要手动编程使用双缓冲。需要在PAINT方法内所想要画的图形画在一张预先准备好的背景,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。IMAGE类提供了一个建立背景的静态方法CREATEIMAGEINTWIDTH,INTHEIGHT,再利用GETGRAPHICS方法取得属于这个背景的GRAPHICS对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用DRAWIMAGE方法将背景的数据复制到实际显示的屏幕上。这样的技术在绘制动画时特别有用。绘制动画时经常需要不断地更新画面,而更新画面的操作就是先将屏幕以FILLRECT的方式清除,再将下一张图片画在屏幕上,然而反复的清除及重绘会造成屏幕的闪烁现象(FLICKER),因此使用双重缓冲的好处就是在背景进行这个清除及重绘的操作,再将完成的绘图拷贝到屏幕上,由于用户看不到清除的操作,因此就不会出现闪烁的现象了。不过在某些MIDP的实现上已经加上了双重缓冲的支持,因此在处理前应先利用CANVAS类的ISDOUBLEBUFFER方法来判断。35内存使用的最佳化通常在MIDP应用程序的手机执行环境中,所牵涉的内存有下列三种应用程序存储内存RECORDSTORE存储内存执行时期内存JAVAHEAP其中前两种是持久性的内存,关闭电源后还能保持数据的正确性,通常这两种内存所能存储的容量是合并计算的,这个上限对每种手机都不一样,大部分在一两百KB内。在这样的情况下需要在不影响原有功能的情况下适当的缩减JAR文件的大小,除了可以克服内存空间的限制外,也能大幅度缩短下载的时间(费用也降低了),势必会有更多的人愿意下载所开发的程序。其方法有第一就是尽量缩短命名的长度。在应用程序内,对于所建立的类、接口、方法及变量名而言,都需要赋予一个识别的名称,所命名的名称每多一个字符就会在类文件内多产生一个字节,对于一个较复杂的应用程序而言就会增加为数不小的数据量。所有这些可以借助混淆器来帮助实现。第二是减少复杂的程序结构,为一些共同的行为建立一个抽象类ABSTRACTCLASS来表示继承的子类的共通性。第三是减少图形数据的大小。将PNG格式的小分辨率图象合并在一张大的高分辨率图象中,由于减少了CHUNKS,将比合并前的总大小减少许多。36混淆器OBFUSCATOR的使用JAVA语言并没有完全编译成二进制可执行文件,编译出的CLASS文件是一种介于源程序和二进制之间的一中基于半解释的字节码,需要虚拟机来执行。它包括了所有的信息。然而这样会导致CLASS很容易被反编译为源代码,从而不能保护作者的知识成果。目前流行的如DECODE,JAD等反编译工具可以以很快的速度生成源文件。如果不加以施行有效的措施,将造成严重的后果。由此引入混淆器的概念。混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号,如果缺乏相应的函数名指示和程序注释,即使被反编译,也将难以阅读。混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的减少变量、函数的命名长度的关系,编译后也会从CLASS文件中减少这些冗余的信息。混淆后,体积大约能减少25,这对当前费用较贵的无线网络传输是有一定意义的。为了能与各种IDE集成,就像JAVA2SDK一样,混淆器采用命令行参数的形式,以便可被其调用。目前流行的OBFUSCATOR有RETROGUARD等。37模拟器的相关调试IDE整合的WIRELESSTOOLKIT提供了许多在运行时监视运行状态的工具。包括内存状况的检测(手机上的内存空间十分有限,必须时刻关注机载内存是否大于程序所能使用到的最大可能的内存空间),网络状况的检测,运行函数的跟踪等。如图34,是内存跟踪测试随时间变化的调试器。其中,允许强制垃圾回收GARBAGECOLLECTION。由于JAVA语言中,不像许多其他的如C语言,不需要指定回收函数中特定不使用的资源,资源回收机制将自动清空无效变量占用的空间。在程序运行中也可以调用SYSTEM类的GC函数手动收回废弃的内存。四程序分析和编写手机代码41游戏进入前的选择每个MIDLET程序都必须有一个主类,该类必须继承自MIDLET。它控制着整个程序的运行,并且可以通过相应函数从程序描述文件中获取相关的信息。该类中拥有可以管理程序的创建、开始、暂停(手机中很可能有正在运行程序却突然来电的情况,这时应进入暂停状态。)、结束的函数。本设计程序进入时,首先载入画面的不是游戏运行状态,而是提供选项,当选择开始时正式运行。因此,在MAINSCREEN的构造函数中分配了LIST类,即选项画面的内存空间。在STARTAPP函数中,随即调用了DISPLABLE的SETCURRENT函数将当前屏幕设置为NAVIGATORMAIN_SCREEN。在版权声明界面前,建造了一个ALERT类。ALERT对象用于显示提示、警告,还有版权信息等告之用户信息的临时闪现的屏幕,它可作为SETCURRENT的参数,提前显示在最终需要显示的屏幕前。当程序转到GAMESCREEN时,画面将永久显示游戏本身,直到用户点击相应按钮手动结束。但是当显示的画面元素超过一屏大小时,将自动转换为永久状态。GAMESCREEN继承了接口COMMANDLISTENER,这样,就可以使用高级界面的COMMAND按钮。继承了COMMANDLISTENER的类必须拥有COMMANDACTION,以决定对按键采取什么样的行为。即按钮事件触发后需执行的函数。在设置好COMMANDLISTENER后,需要调用SETCOMMANDLISTENER以将按钮事件激活。键盘事件中,可用GETCOMMANDTYPE返回的COMMAND类型来确定选择的是什么按钮。MAINSCREEN继承了LIST类,用于显示列表选项,使用其APPEND函数可将选项加入到列表中。GETSELECTINDEX可检测到选择的项目的序号,序号从0开始递增。其中,当选择第一项时将载入正式游戏画面GAMESCREEN类,第二项将显示转到设定画面,第三项用来显示用户信息,版权声明等。第四项是离开游戏选项。42主游戏逻辑及其涉及到的若干类421程序的菜单选项这个写在MAINSCREENJAVA文件中,这个类继承LIST。同时也继承了接口COMMANDLISTENER,这样,就可以使用高级界面的COMMAND按钮。继承了COMMANDLISTENER的类必须拥有COMMANDACTION,以决定对按键采取什么样的行为。即按钮事件触发后需执行的函数。在设置好COMMANDLISTENER后,需要调用SETCOMMANDLISTENER以将按钮事件激活。用APPEND方法来加入菜单APPEND“开始“,NULLAPPEND“设定“,NULLAPPEND“版权声明“,NULLAPPEND“离开“,NULLSETCOMMANDLISTENERTHIS再用GETSTRINGINT函数来获得菜单的选项。MAINSCREENJAVA文件IMPORTJAVAXMICROEDITIONLCDUIPUBLICCLASSMAINSCREENEXTENDSLISTIMPLEMENTSCOMMANDLISTENERPRIVATESTATICDISPLAYABLEINSTANCESYNCHRONIZEDPUBLICSTATICDISPLAYABLEGETINSTANCEIFINSTANCENULLINSTANCENEWMAINSCREENRETURNINSTANCEPRIVATEMAINSCREENSUPER“进入GAME“,IMPLICIT/菜单选择APPEND“开始“,NULLAPPEND“设定“,NULLAPPEND“版权声明“,NULLAPPEND“离开“,NULL/事件侦听SETCOMMANDLISTENERTHISPUBLICVOIDCOMMANDACTIONCOMMANDC,DISPLAYABLES/事件侦听STRINGCMDGETSTRINGGETSELECTEDINDEX/把得到的值传给程序控制器,用程序控制器来决定指引程序的执行。NAVIGATORFLOWCMD422游戏的设定这个写在SETSCREENJAVA文件中,而这个类继承FORM类,同时也继承了接口COMMANDLISTENER,这样,就可以使用高级界面的TEXTFIELD按钮。继承了COMMANDLISTENER的类必须拥有COMMANDACTION,以决定对TEXTFIELD值获取采等行为。在设置好COMMANDLISTENER后,需要调用SETCOMMANDLISTENER函数来把值传入程序中。SETSCREENJAVA文件IMPORTJAVAXMICROEDITIONLCDUIPUBLICCLASSSETSCREENEXTENDSFORM/继承COMMANDLISTENER接口IMPLEMENTSCOMMANDLISTENERPRIVATESTATICDISPLAYABLEINSTANCESYNCHRONIZEDPUBLICSTATICDISPLAYABLEGETINSTANCEIFINSTANCENULLINSTANCENEWSETSCREENRETURNINSTANCE/定义TEXTFIELD(文本输入框)TEXTFIELDURLGAUGEVOLUMEPRIVATESETSCREENSUPER“设定“URLNEWTEXTFIELD“请输入服务器位置“,“SOCKET/12700199“,40,TEXTFIELDURLAPPENDURLVOLUMENEWGAUGE“音量“,TRUE,10,3/软键菜单ADDCOMMANDNEWCOMMAND“辅助说明“,COMMANDHELP,1ADDCOMMANDNEWCOMMAND“返回“,COMMANDBACK,1/事件侦听SETCOMMANDLISTENERTHISPUBLICVOIDCOMMANDACTIONCOMMANDC,DISPLAYABLESNAVIGATORFLOWCGETLABEL423游戏中的帮助和程序控制器首先调用HELPSCREEN类,然后赋一个值辅助说明给NAVIGATOR类,当NAVIGATOR接收到这个值时,就显示帮助字符串。HELPSCREENJAVAIMPORTJAVAXMICROEDITIONLCDUIPUBLICCLASSHELPSCREENEXTENDSFORMIMPLEMENTSCOMMANDLISTENERPUBLICHELPSCREENSTRINGCSUPER“辅助说明“APPENDADDCOMMANDNEWCOMMAND“返回“,COMMANDBACK,1SETCOMMANDLISTENERTHISPUBLICVOIDCOMMANDACTIONCOMMANDC,DISPLAYABLESNAVIGATORFLOWCGETLABEL这个写在NAVIGATORJAVA里,它接收SETSCREEN,MAINSCREEN等类传过来的值。然后根据它触发的按钮事件,来调用相对应的事件。/NAVIGATORJAVAIMPORTJAVAXMICROEDITIONLCDUIIMPORTJAVAXMICROEDITIONMIDLETIMPORTJAVAUTILPUBLICCLASSNAVIGATORFINALPUBLICSTATICINTMAIN_SCREEN1FINALPUBLICSTATICINTGAME_SCREEN2FINALPUBLICSTATICINTSET_SCREEN3FINALPUBLICSTATICINTGAME_HELP_SCREEN4FINALPUBLICSTATICINTSET_HELP_SCREEN5PUBLICSTATICMIDLETMIDLETPUBLICSTATICDISPLAYDISPLAYPUBLICSTATICINTCURRENT/自定义一个类/重载函数PUBLICSTATICVOIDSHOWOBJECTOBJSWITCHCURRENTCASEMAIN_SCREENDISPLAYSETCURRENTMAINSCREENGETINSTANCEBREAKCASEGAME_SCREENDISPLAYSETCURRENTGAMESCREENGETINSTANCEBREAKCASESET_SCREENDISPLAYSETCURRENTSETSCREENGETINSTANCEBREAKCASEGAME_HELP_SCREENDISPLAYSETCURRENTNEWHELPSC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 社会认知与文化影响研究试题及答案
- 超员客车考试题及答案
- 乘船考试题目及答案
- 沙湖小学考试试题及答案
- 安监局双拥工作计划
- 电解制氢试题及答案
- 彩陶鉴赏试题及答案
- 崇文今年考试题及答案
- 初中特色考试题及答案
- 聚焦考试要点2025年初级会计实务考试试题及答案
- 2025年北京大兴区中考一模数学试卷及答案详解(精校打印)
- 2025年甘肃省武威第二十中学生物七年级下册新人教版期中模拟练习题(含答案)
- 制造业产品全生命周期管理流程
- 冷库安全培训
- 2024-2025北师版七下数学-第五章 图形的轴对称-章末复习【课件】
- 物业管理答辩5分钟
- 屋面保温工程施工方案
- 土木工程专业就业能力展示
- GB/T 17145-2024废矿物油回收与再生利用导则
- 园区人员管理制度内容
- 一科一品老年病科
评论
0/150
提交评论