西南交通大学课程设计报告西南交通大学Java游戏编程技术课程设计报告坦克大战游戏编程课程设计报告年级:2008级学号:20082961姓名:陈锦添专业:信息管理与信息系统二零一零年六月分数:教师签名:西南交通大学课程设计报告-1-摘要Java良好的跨平台特性在移动平台的开发中显示出了巨大的威力。Java语言面向对象的优势也使得开发游戏变得非常容易。随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序——坦克大战。本程序的界面和运作方式继承于日本任天堂公司在20世纪80年代开发的BattleCity游戏,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。本论文介绍了任天堂红白机的软硬件特性、J2ME的相关技术及本程序的结构分析和具体功能的实现。[关键字]:J2ME,手机游戏,Java,坦克大战手机中将Java语言引入,作为一种通用的开发标准,并将向市场推广普及仅仅短短几年,J2ME仍是一种新型的技术,中文资料除台湾出版过相关书籍外,国内相关介绍资源很有限,国内J2ME开发商也屈指可数,名声较响的Digital-Red公司也仅成立于1999年。本文可算是对新技术的一些尝试,代表对无线平台应用程序推广的一些努力。目录摘要...................................................................................................................-I-Abstract....................................................................................................................-I-第一章程序结构、思想和相关技术....................................................................-3-1.1本程序需解决的有关技术问题..............................................................-3-1.2程序流程..................................................................................................-4-1.3绘图与MIDP2.0新增的GameCanvas包..................................................-6-1.3.1提供低级绘制的Canvas类..........................................................................-6-1.3.2Graphics类.....................................................................................................-6-1.3.3PNG格式...........................................................................................................-6-1.3.4Game包中的新功能.......................................................................................-7-第二章游戏的设计思路......................................................................................-8-2.1坦克的控制和敌方的智能运行..............................................................-8-2.2子弹的运行和控制....................................................................................-9-2.3RMS数据库系统.......................................................................................-10-2.4内存使用的最佳化..................................................................................-11-2.5混淆器(Obfuscator)的使用................................................................-12-西南交通大学课程设计报告-2-第三章程序分析和具体实现..............................................................................-12-3.1游戏进入前的选择................................................................................-12-3.2主游戏逻辑及其涉及到的若干类......................................................-13-3.3坦克的共同行为....................................................................................-15-3.4玩家坦克的功能属性............................................................................-16-3.5敌人坦克的功能属性............................................................................-16-3.6子弹的运行和控制................................................................................-18-3.7记分系统................................................................................................-19-3.8本章小结:..............................................................................................-21-第四章总结..............................................................................................-21-4.1本程序的总结和展望..............................................................................-21-4.2经验和感想............................................................................................-22-参考文献................................................................................................................-23-西南交通大学课程设计报告-3-第一章程序结构、思想和相关技术1.1本程序需解决的有关技术问题1.游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件及意外情况考虑在设计中。2.游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,有关贴图,在MIDP2.0中提供了用于增强游戏功能的game包,使得解决静态或动态、画面背景、屏幕刷新的双缓冲等都有较好的解决方案。3.己方坦克的运行可以通过键盘响应事件控制,但敌方则因为是自动运行,就需要有一定其一定的智能性;同时,出现在屏幕上的敌方可能会有较多的数量,这需要为每个敌方开辟一个线程以便能让其独立运行。Java的多线程能力为实现这样的游戏提供了可能。敌人坦克的运行算法也需要进行适当的设置,以免游戏过于简单,单调。4.对于双方坦克发出的子弹的控制也需要对其跟踪控制,子弹也需要处在独立的线程中。敌方子弹仅需要扫描用户坦克,而用户坦克需要在每一步扫描所有的敌方坦克。这需要对所有的对象有较好的控制。另外,子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界。如此过多的线程同时在本来效率就不高的KVM虚拟机上运行,也许会导致程序的缓慢。5.双方的坦克在前进时也需要考虑到是否碰撞到相关物体或对方坦克,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。每一次刷新页面、每前进一步都需要将所有的周围环境都进行扫描。6.游戏的结束、开始、动态信息画面作为构成一个完美程序都是必不可少的重要部分。良好的用户界面更是吸引用户的硬指标,相关的美术构图也需要有一定的考虑。7.游戏的地图不可能通过绘图来解决。否则,不仅难于控制和处理过多的元素,也会因过多的大型图片而不能限制程序的大小,失去手机上程序的原则和Java的优势。同时,地图关卡不宜保存在手机有限的内存中,而最好采取外部文件的读入读出方法。8.用户运行游戏时需要有分数记录的可能。如何采用合理的记分标准,需要进行适当的设计。记录分数的存储方式也需要有较好的解决方案。手机中由于处理器和内存空间、存储空间都十分有限,其数据库系统与普通PC大相径庭。其数据库结构较为简单,被称之为RMS系统。9.Java是基于虚拟机的半解释型编译系统,其执行效率较C++等完全编译西南交通大学课程设计报告-4-后的程序会低很多,程序如果不进行精简和优化,将可能导致运行的不流畅。除开发过程中对结构上的控制、变量的使用、算法的优化等优化外,还可以使用混淆器(Obfuscator)进行程序打包后的优化。以上相关技术细节和整体流程将分别在以下小节阐述。1.2程序流程MIDletsuite是MIDP应用程序的最小单位,JAM负责将手机内的MIDletsuite以图形化的方式呈现,让用户能够选取欲执行的MIDletsuite,一旦选取了某个MIDletsuite,操作系统就会激活KVM执行里面的MIDlet。MIDlet及相关的支持类组成了MIDP应用程序的实际内容。每个MIDlet都必须继承javax.microedition.midlet.MIDlet这个抽象类。在MIDP规格中定义了MIDlet的生命周期,以及可以存在的三种状态,包括Paused、Active以及Destroyed,每一个MIDlet在任何时刻只可能处于其中的一个状态。这三种状态的转换