1、 南 京 工 程 学 院 毕业设计说明书 (论文 ) 作 者: 超人 学 号: 1 院 系: 康尼学院 专 业: 计算机科学与技术 题 目: 基 于 java 的坦克大战游戏开发 指导者: 实验师 (姓 名 ) (专业技术职务 ) 评阅者: 讲师 (姓 名 ) (专业技术职务 ) 2009 年 6 月 南 京 毕业设计说明书(论文)中文摘要 J2SE 是近年来随着各种不同技术的发展,尤其是编程语言飞速发展而诞生的一项新的开发语言。 随着信息技术的飞速发展,计算机的使用也日渐普及,本文从实际应用出发,向大家介绍坦克大战游戏的设计与实现。 Eclipse 平台模拟器开发调试。玩家坦克的运行是通过键
2、盘响应事件控制,敌方坦克则是自动运行并具有了一定的智能性。程序进行了精简 和优化,游戏运行流畅,具有一定的吸引力。 论文中介绍了游戏的总体设计思路和开发游戏的多线程、高级、低级图形界面的使用。本论文介绍了坦克大战的历史、 java 的相关技术及本程序的结构分析和具体功能的实现。游戏是在 Eclipse3.5.1 环境下编程。它的主要功能有: 能够四处移动、能够发射子弹打击敌人、敌人能够移动、 能够模拟爆炸、能够产生障碍、能够增长生命 。 关键词 游戏 Java 坦克 智能 南京工程学院毕业设计说明书(论文) 毕业设计说明书(论文)外文摘要 Title Java Tank War Game De
3、velopment Abstract J2SE is a kind of fast developing technology implemented on various devices especially equipments.With the rapid development of information technology, computer use has become more popular, the practical application of this paper to introduce the design and implementation of the g
4、ame Battle City .It transports the classical product to computer, offering corresponding software for such more popular hardware platform. Eclipse platform simulator. The players tank is controlled by keyboard respo nse events, while the enemys tank is operated automatically and is of intelligence.
5、Having been streamlined and optimized, the game system can run fluently and attract the players. This paper describes the history of Battle City, java related technologies and the procedures of structural analysis and the realization of specific functions. Game programming environment in Eclipse3.5.
6、1. Its main features are: to move around. capable of firing bullets against enemy. the enemy can move. to simulate the explosion. to create an obstacle. to increase the life Key words game, Java, tank, Smart 南京工程学院毕业设计说明书(论文) - i - 目 录 前言 . 1 第一章 系统开发环境介绍 . 2 1.1 开发环境 . 2 1.2 JAVA 语言的特点 . 2 1.3 关于 E
7、CLIPSE . 6 第二章 软件需求分析 . 8 2.1 可行性分析 . 8 2.2 游戏规则和系统功能介绍 . 8 2.3 程序运行流程 . 9 第三章 系统总体设计 . 12 3.1 主体模块 . 12 3.2 子弹模块 . 12 3.3 坦克模块 . 13 3.4 墙模块 . 13 3.5 血液模块 . 14 3.6 爆炸模块 . 15 第四章 系统详细设计与实现 . 16 4.1 游戏窗口与我方坦克 . 16 4.2 子弹与一辆敌人坦克 . 22 4.3 爆炸与多辆敌人坦克 . 27 4.4 墙、坦克互相穿越、超级炮弹和生命值 . 30 4.5 血块与加入图片 . 33 第五章 坦克
8、大战打炮弹功能系统测试 . 36 5.1 抬 CTRL 打炮弹的测试要点 . 36 5.2 坦克大战 系统采用的测试方法 . 36 南京工程学院毕业设计说明书(论文) - ii - 5.3 功能测试用例 . 36 结 论 . 38 参考文献 . 39 致谢 . 40 附录:英文技术资料翻译 . 41 南京工程学院毕业设计说明书(论文) 1 前 言 如果要从精品云集的 FC游戏中找一款经典之作,坦克大战绝对是 FC上所有经典中的经典,当年 NAMCO 的 Battle City在国内又称坦克大战,以其极为出色的游戏性令全球众多玩家为之疯狂。 该游戏是一款以红白机为平台操作射击游戏, 1名玩家可控
9、制自己的坦克进行移动和射击 , 歼灭对方为胜利目标。每个关卡的地形不同,玩家可利用各种地形对敌人进行打击,并会得到补给。其操作简单且娱乐性强,是一款男女老少皆宜的游戏。游戏附带地图编辑器,玩家可自行编辑地图进行游戏。游戏中的众多经典关卡至今还让许多玩家记忆犹新,在 80 年代时曾经在无数家庭中带来了无尽的欢乐。 JAVA 语言是当今最为流行的程序设计语言之一,作为非常优秀和极为健壮 的编程语言,它同时有的面向对象,与平台无关,分布式应用,安全,稳定和多线程等优良的特征,使用 JAVA 语言,不仅可以开发出功能强大的大型应用程序,而且 JAVA 语言本身突出的跨平台的特性也使得它特别适合于Int
10、ernet 上的应用开发,可以这样说, JAVA 的出现使得所开发的应用 程序“一次编写,处处可用”的实现成为了可能 。 网络化的市场让游戏变成人和人的交战,而不是人和电脑的对战,这样可以增加游戏的难度,游戏的时间和游戏的寿命。立体化是为了适应现在越来越3D的趋势,游戏有必要做的更加的完善,趋向 3D 并且加重环境描 写。多样化则是增加游戏的任务,游戏的耐玩性而在坦克大战里增加更多的内容加大其可玩性,比如:装备,对战方式,任务合作模式等等。可以想像,如果坦克大战还是人机对战的模式,并且协作性不提高的化,玩家对该游戏的选择性将大大降低,最终成为历史。 本课题就是想对该游戏进行分析研究,借助于它的
11、游戏规则,用 JAVA 语言模拟开发一个类似的,功能相对简单的小游戏。 南京工程学院毕业设计说明书(论文) 2 第一章 系统开发 环境介绍 1.1 开发环境 操作系统: Microsoft Windows 7 程序语言: Java 开发工具: Eclipse 1.2 Java语言的 特点 1) 平台无关性 平台无关性是指 Java 能运行于不同的平台。 Java 引进虚拟机 原理,并运行于虚拟机,实现不同平台的 Java 接口之间。使用 Java 编写的程序能在世界范围内共享。 Java 的数据类型与 机器无关, Java 虚拟机( Java Virtual Machine)是建立在硬件和操作
12、系统之上,实现 Java 二进制代码的解释执行功能, 提供于不同平台的接口的。 2) 安全性 Java 的编程类似 C+,学习过 C+的读者将很快掌握 Java 的精髓。 Java舍弃了 C+的指针对存储器地址的直接操作,程序运行时,内存 由操作系统分配,这样可以避免病毒通过指针侵入系统。 Java 对程序提供了安全管理器,防止程序的非法访问。 3) 面向对象 Java 吸取了 C+面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁性和便于维护性。类的封装性、继承性等有关对象的特性,使程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和应用上。
13、 Java 提供了众多的一般对象的类,通过继承即可使用父类的方法。在 Java 中,类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。 Java 提供的 Object 类及其子类的继承关系如同一棵倒立的树形,根类为 Object 类, Object 类功能强大,经常会使用到它及其它派生的子类。 4) 分布式 Java 建立在扩展 TCP/IP 网络平台上。库函数提供了用 HTTP 和 FTP 协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样南京工程学院毕业设计说明书(论文) 3 容易 , 使用其相关技术可以十分方便的构建分布式应用系统。 5)
14、健壮性 Java 致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。 Java 自己操纵内存减少了内存出错的可能性。 Java 还实现了 真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发 Java 应用程序的周期。并且 Java 还提供了 Null 指针检测、数组边界检测、异常出口、Byte code 校验等功能。 Java 取消了 C 语言的结构、指针、 #define 语句、多重继承、 goto 语句、操作符、重载等不易被掌握的特性,提供垃圾收集器自动回收不用的内存空间。 6) 简单性 Java 删除了许多极少被使用、不容易理解和容易令人混淆的 C+功能
15、。剔除的功能主要包括运算符重载、多重继承以及广泛的自动强迫同型。与 C+相比, Java 语言也提供重载函数,不过它 重载的对象是函数而非变量或是运算符。 Java 还增加了自动内存收集功能,从而简化了 Java 程序的工作,不过同时也让系统变得稍微复杂了一些。 Java 的目标之一是要协助开发能独立地在小型机器上顺利执行的软件。Java 的基本解释器和对象类支持约占 40KB 空间,而若增加基本的标准程序库和线程支持则需增加约 175KB。体积小对于在嵌入式系统中的使用是很重要的,正因为这样, Java 才能够通过网络轻易下载。 7) 中立性 Java 的设计目标是要支持网络应用程序。一般而
16、言,网络是由许多不同的平台系统构成,包括各种 CPU 与操 作系统结构。为了让 Java 应用程序能够在网络上任何地方执行,其编译器将会生成一种具备结构中立性的目标文件格式。编译后的程序码可以在提供 Java 运行系统的多种不同处理器上面执行。Java 的这种中立性结构不仅对网络应用很有帮助,而且也很适合单一的系统软件流通。 Java 编译器是通过生成与某一特定电脑结构无关的字节代码指令,以达到上述功能的。这些字节代码指令能很容易在任何机器上解释执行。 结构中立性是确保程序可移植的最重要部份,不过除此之外还需很多必须南京工程学院毕业设计说明书(论文) 4 配合的条件和 C 与 C+不同的是,
17、Java 规范中并无任何与机器结 构相依存的陈述存在。它指定了基本数据类型的大小,及其算术运算元的执行行为。例如:“ int”代表一个有符号的二进制补码 32Bit 整数,而“ float”代表一个32BitIEEE754 浮点数。这些选择在今天的环境很适用,因为几乎所有 CPU 都具备这些特性。 程序运行库属于系统的一部份,它定义了一些可移植的程序接口。例如,它包括一个抽象的 Windows 类,并且提供了该类在 Unix、 Windows 和 Macintosh平台上的 实现。 8) 解释执行性 Java 解决器可以直接在任何已移植该解释器的机器上解释、执行 Java 字节代码。再者,由于
18、其链接过程比较倾向于逐步增量与轻量过程,因此程序开发更快、更精密。 9) 高效能性 虽然解决过的字节代码性能已相当不错,不过有些情形下还是要求程序达到更高执行效能。字节代码可以动态地解释为执行应用程序特定 CPU 的机器码。这对于习惯使用一般编译器与动态载人器的程序设计者而言,有点类似将最终的机器码生成器放到动态载入器之内。 字节代码格式在设计上即已考虑了机器码的产生,因此实际的机器码生成程序相当简单。其生成的机器码是有效的,编译器自动分配寄存器,而在生成字节代码期间也会进行一些优化。 我们以解 决码在一台 Sun Microsystem SPARC Station10 上执行时,达到每秒三十
19、万个函数调用速率。字节代码转换至机器码的速度性能,几乎和直接生成机器目标代码的 C 或 C+没有什么两样。 10) 多线程性 Java 拥有一组复杂的同步化基本单元,它们是以广泛使用的 C.A.R.Hoare监视器与条件变量图为基础的。将这些概念融合到语言中之后,它们就变得更容易使用且更为健壮。这种融合方式大部分来自 Xerox 的 Cedar/Mesa 系统。 多线程所带来的其它好处包括更好的交互式回应能力与实时运行能力。然而这会 受到底层平台的限制:独立执行的 Java 运行环境有着很好的实时执行能力,而若在其他系统例如 Unix、 Windows、 Macintosh 或 Windows
20、NT 等平南京工程学院毕业设计说明书(论文) 5 台上执行时,则会由于底层平台的原因而使实时响应能力受到影响。 11) 动态特性 就各方面而言, Java 是一种比 C 或 C+更具动态特性的语言。它在设计上强调为不断发展的运算环境提供支持。 Java 能了解由 Objective C 引用过来的接口概念。简单地说,接口就是规范一组与对象相对应的成员函数,但对象如何实现这些成员函数则亟待解决。一个类实现一个接口是要提供 这个接口所包含的所有成员函数的实现,与此相反,派生子类则从父类继承了一组成员函数以及它们的实现。一个 Java 类可以实行多个接口,但只能从一个父类继承。接口告诉连接对象它可以
21、做什么而不是怎么做,使得它在代码上更具有灵活性和可复用性。在 C 或 C+程序中,如果你有一个指针指向一个对象,但你不知道该对象的类型是什么,那么你将没有办法找出它。然而,在 Java 中根据运行类型信息进行查找是很直截了当的,因为在编译阶段和运行阶段都会检查数据类型转换。所以你在 Java 中完全可以信任这种转换,而 C 与 C+的编译器则只是相信你自 己已做了正确的处理。 12) 有关绘图的一些技术 Graphics 类提供了简单的 2D 绘图功能。它具有 24 位深度色彩的绘制能力,以三原色分别各占一个字节表示其颜色。程序只能在 paint()函数中使用Graphics 绘制, Game
22、Canvas 可调用 getGraphics()函数直接绘制在缓冲区上,可以在任何时间请求传输到前台。其对象会被传给 Canvas 的 paint()函数,以便最终显示。 在没有 MIDP2.0 前,进行游戏绘图一般需要手动编程使用双缓冲。需要在 paint()方法内所想要画的图形画在一张预先准备好的背 景,等所有绘图操作都完成后再将背景的数据拷贝到实际的屏幕上。 Image 类提供了一个建立背景的静态方法 createImage(int width, int height),再利用 getGraphics()方法取得属于这个背景的 Graphics 对象,所进行的绘图操作都会作用在背景上,等到全部的绘图操作完成后,再调用 drawImage()方法将背景的数据复制到实际显示的屏幕上。 这样的技术在绘制动画时特别有用。绘制动画时经常需要不断地更新画面,而更新画面的操作就是先将屏幕以 fillRect()的方式清除,再将下一 张图片画在屏幕上,然而反复的清除及重绘会造成屏幕的闪烁现象( flicker),因此