admin 管理员组文章数量: 887021
2024年2月23日发(作者:vue异步请求渲染问题)
毕业设计(论文)-基于Java的飞机大战游戏开发
毕 业 设 计(论 文)
题目 基于Java的飞机大战游戏开发
摘 要
飞机大战是电脑游戏发展史中早期最为经典的游戏之一,无论是在电脑端、移动端、还是游戏机上,都能见到与飞机相关的射击类游戏。不过,最初常见的飞机大战游戏是二维平面上的,并且大多以黑白的形式出现,而如今,在电脑上,不仅机型多,而且五颜六色,3D视觉冲击强。
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击,Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有了全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
因此,本论文主要阐述以面向对象的程序开发语言Java及Eclipse为开发工具的飞机大战游戏。首先简要介绍课题的研究背景、目的及意义,Java的发展历程、当前国内外的发展现状。然后介绍Eclipse平台开发环境及环境搭建,最后讲述了基于Java飞机大战游戏功能的实现。其功能模块如下:主界面模块,Hero模块,Enemy模块,Bullet的类模块,检测子弹与敌机碰撞模块检测,相信其基于Java的飞机大战游戏将会受到更大的欢迎。
关键词:飞机大战,游戏,Java ,Eclips
I
Abstract
Plane War is the one of the most classic games in the early history
of the development of computer games. We can always see aircraft-related
shooting game whether it is on a computer teminal or mobile terminal.
However, the first common plane war game is a two-dimensional plane, and
mostly appears in the form of black and white, but now, on the computer,
not just models and more colorful, 3D strong visual impact.
Java is very popular with developers since it appeared, formed the
powerful shock for the rapid evelopment of the C++ language. Java
technology has excellent versatility, efficiency, platform portability,
and security and is widely used in personal PC, data center, game
consoles, scientific supercomputers, cell phones and the Internet.
What’s more, Java has
the world's largest developer of professional community. In the
global cloud computing and mobile Internet industry environment, Java
has more significant advantages and broad prospects.
Therefore, this paper describes the development of object-oriented
programming language Java and Eclipse development tools for aircraft war
game. Firstly, it introduces research background, purpose and meaning,
and telled Java development process and the current development status
at home and abroad. Then introduces the Eclipse platform development
environment and built environment, and finally tells the Java-based
aircraft war game features implementation. Its function modules are as
follows: the main interface module,Hero module,Enemy module,Bullet
module, and the detection module detecting a collision with the enemy
bullets. We believes its Java-based aircraft war game would be welcomed
greater.
KeyWords: lightning,Game,Java,Eclipse
II
目 录
前
言 .......................................................................................................................................... 1
第一章 开发技术和开发平台 .............................................................................................. 3 1.1 Java语言特性 .......................................................................................................... 3 1.2 Java技术在游戏开发中的应用 .............................................................................. 4
1.2.1 绘图技术 ........................................................................................................ 4
1.2.2 游戏开发中的交互 ........................................................................................ 4
1.2.3 基于AWT及SWING的游戏界面开发 ...................................................... 5
1.2.4 多线程技术的应用 ........................................................................................ 5
1.2.5 Java网络技术的应用.................................................................................... 5
1.2.6
Eclipse ............................................................................................................ 6 1.3 开发平台搭建 .......................................................................................................... 6
1.3.1 安装JDK和Eclipse ...................................................................................... 6
1.3.2 JDK环境变量配置........................................................................................ 6
第二章 飞机大战游戏需求分析 .......................................................................................... 8 2.1 用户需求分析 .......................................................................................................... 8 2.2 可行性分析 .............................................................................................................. 8 2.3 总体设计原
则 .......................................................................................................... 9 2.4 功能模块设计 ........................................................................................................ 10 2.5 游戏难点分析 ........................................................................................................ 10
第三章 飞机大战功能模块实现 .........................................................................................11 3.1 项目模块介绍 .........................................................................................................11 3.2 游戏首页的实现 .................................................................................................... 12
3.2.1 界面实现 ...................................................................................................... 12
3.2.2 核心代码 ...................................................................................................... 13 3.3 游戏战场实现 ........................................................................................................ 14 3.4 界面实现 ................................................................................................................ 14 3.5 核心代码 .....................................................................
........................................... 15 3.6 Hero移动模块实现 ............................................................................................... 16
3.6.1 核心代码 ...................................................................................................... 16
III
3.7 子弹模块的实现 .................................................................................................... 18
3.7.1 界面实现 ...................................................................................................... 18
3.7.2 核心代码 ...................................................................................................... 18
3.8 Enemy移动模块实现 ............................................................................................ 19
3.8.1 核心代码 ...................................................................................................... 19
3.9 敌机航线控制模块 ................................................................................................ 20
3.9.1 核心代码 ...................................................................................................... 20
3.10 碰撞检测模块实现 ............................................................................................. 22
3.10.1 战机碰撞界面 ............................................................................................. 22
3.10.2 核心代码 ..................................................................................................... 23
3.11 积分显示模块实现 ............................................................................................. 25
3.11.1 界面实现...................................................................................................... 25
3.11.2 核心代码...................................................................................................... 25 第四章 软件测
试 ................................................................................................................ 28
4.1 测试的定义 ............................................................................................................ 28
4.2 测试的重要性 ........................................................................................................ 28
4.3 测试方法 ................................................................................................................ 28
4.4 测试结果 ................................................................................................................ 29 结
论 ........................................................................................................................................ 30
致
谢 ........................................................................................................................................ 31
参考文献 .................................................................................................................................. 32 附
录 ........................................................................................................................................ 33
IV
前 言
项目背景
90年代的我们,对小时候的一些经典街机游戏肯定是印象深刻,像“飞机大战”、“超级玛丽”、“坦克大战”等,这些游戏伴随了我们童年,怀旧经典,常温这写经典的游戏,我选择了“飞机大战”作为设计的项目。
而基于Java语言开发“飞机大战游戏”,也是对大学知识的一次运用,本次的项目不但可以重拾儿时的回忆,也同样是对大学知识的一次回顾与复习。
飞机大战游戏拥有所有游戏共通的成分。它们都有一个独立的循环体,这个循环体可以反复被执行,直到游戏退出。游戏的关键之处在于,Hero战机飞行要不断的发出子弹,而Enemy战机按一定的波次、按不定的速度随机的从对方袭来,在程序运行的过程中,要不断的判断Hero战机是否与Enemy战机相撞,子弹是否与Enemy相撞,最后根据战场的相撞情况,是否结束各个战机和子弹的生命周期。
以后要做的所有的简单的游戏都要用到这些东西,所以学习这个过程并且实现它是非常重要的。当第一次完成它之后,以后再做游戏是就能看出那个游戏有多难以及要花多长时间。如果没有完整的完成过这些,哪怕一次,就永远不能完整地正确领会其中的每个元素。当做大的项目时,就更不能确定其复杂星及所要的时间。如果甚至不能正确地领会这个过程(因为你没能完成它),可能是没能建立一个合适的时间表或估计合适的时间,更有可能的是不够努力。
国内外研究现状
Java作为一门成熟的编程语言,以其简单性、可移植性和平台无关性等优点,得到了广泛的应用,对于游戏开发来说,由于设计到比较复杂的情况,开发过程很多时候是一个不断修改的过程,可以方便的修改游戏内容是十分关键的。由于其虚
拟机特性,java本身就可以用来编写游戏脚本,可天衣无缝的和java语言进行交互,这些都极大的方便了java游戏编程。
由于Java语言的可移植性和平台无关性等优点,如今,国内外对于Java在游戏设计开发的运用有两大方面:一个是手机游戏,一个就是web上的游戏开发,可见Java语言在其游戏开发方面尤其优点和独特性。
1
如今正由于智能手机游戏市场发生重大的变化,ios不再独霸与市场,Andriod的市场正在不断的扩散。据国外媒体最新报道,Android智能机的市场份额为68%,远高于苹果的17%,用Java语言开发游戏也迎来了黄金期,特别是在手机游戏开发上。
Java语言称霸企业级应用这么多年,事实证明了它非常适合于开发大型软件。如今Java在游戏开发领域,也正开始崭露头角
项目主要工作
本次的开发内同——基于Java的飞机大战游戏就是游戏与Java编程语言相结合的例子
从游戏的基本玩法出发,主要就是Hero和Enemy的对决,首先应该有个界面来装载整个游戏,然后就是Hero的移动方式(键盘移动),接下来就是Hero子弹的生成,然后是Enemy的出现方式,然后Enemy的子弹生成,最后是Hero与Enemy的对战结果。
该游戏要满足以下功能性需求:
(1)Hero战机的控制。
(2)子弹的控制
(3)多种Enemy战机的出现方式
(4)各种战机和子弹的碰撞情况的检测和控制
(5)各个战机和子弹生命周期的结束控制
2
第一章 开发技术和开发平台
本软件涉及到的开发技术是Java,开发平台是Eclipse。因此,本章主要详细介绍用Java开发的特性和优势,以及开发平台Eclipse的合理配置。
1.1 Java语言特性
Java编程语言的风格十分接近C、C++语言。Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载,多重继承(以接口代替)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在Java1.5版本中,Java有引入了泛型编程,类型安全的枚举,不定长参数和自动装/拆箱等语言特性。
Java不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码,然后依赖不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。
(1)跨平台
跨平台是指Java能运行与不同的平台。Java引进虚拟机原理,并运行于虚拟机,实现不同平台的Java接口之间。使用Java编写的程序能在世界范围内共享。Java的数据类型与机器无关,Java虚拟机是建立在硬件和操作系统之上,实现Java二进制代码的解释执行功能,提供与不同平台的接口的。
(2)安全性
Java的编程类似C++,学习过C++的读者将很快掌握Java的精髓。Java舍弃了C++的指针对存储器地址的直接操作,程序运行时,内存由操作系统分配,这样
更可以避免病毒通过指针侵入系统。Java对程序提供了安全管理器,防止程序的非法访问。
(3)面向对象
Java吸取了C++面向对象的概念,将数据封装于类中,利用类的优点,实现了程序的简洁星和便于维护性。类的封装性、继承性等有关对象的特性,使得程序代码只需一次编译,然后通过上述特性反复利用。程序员只需把主要精力用在类和接口的设计和引用上。Java提供了众多的一般对象的类,通过继承即可使用父类的方法。在Java中,
3
类的继承关系是单一的非多重的,一个子类只有一个父类,子类的父类又有一个父类。
(4)分布式
Java建立在扩展TCP/IP网络平台上。库函数提供了用HTTP和FTP协议传送和接受信息的方法。这使得程序员使用网络上的文件和使用本机文件一样容易。
(5)健壮性
Java致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java自己操纵内存减少了内存出错的可能性。Java还实现了真数组,避免了覆盖数据的可能,这些功能特征大大提高了开发Java应用程序的周期,并且Java还提供了Null指针检测、数据边界检测、异常出口等功能。
1.2 Java技术在游戏开发中的应用
1.2.1 绘图技术
Applet程序中所采用的AWT的绘图机制主要涉及三个方法:paint()方法,update()方法和repaint()方法,update()方法和paint()方法都有一个Graphics
类参数。Graphics是画图的关键,它可以支持两种绘图:一种是基本的绘图,如:画线、矩形、园等:另一种是画图像,主要用于动画制作。
1.2.2 游戏开发中的交互
一个优秀的游戏必定是与玩家不断的沟通,给予玩家充分的操作时间,而游戏又必须快速地,争取的对玩家动作做出反应,否则这样的游戏,不能称为一个好游戏。在Java游戏的开发中,往往使用事件处理器来进行设计。
事件:用户对程序的某一种功能性操作。Java中的事件主要有两种:组件类事件、动作类事件。
事件编程:用户编程定义每个特定时间发生时程序应做出何种响应,并且这些响应代码会对应的时间发生时有系统自动调用。事件源是产出事件的组件。监听器是对组件所产生的时间做出具体响应的代码,即事件产出与处理分别由两个不同类加以编程实现。事件处理机制是AWT组件自身不编程处理相应的时间,而是交由时间监听器处理。
事件适配器:由于事件监听接口是Abstract类型,意味着实现该接口的类应全都实现其各个成员函数,但实际应用中可能只需处理某些事件响应代码:此时再采用实现事
4
件监听器接口可能会导致编程复杂。JDK中提供事件适配器方式来实现事件编程。 1.2.3 基于AWT及SWING的游戏界面开发
抽象窗口工具包AWT是API为Java程序提供的建立图形用户界面GUI工具集,AWT可用于Java的applet和application中。它支持图形用户界面编程的功能包括:用户界面组件、事件处理模型、图形和图像工具、包括形状、颜色和字体类、布局管理器,
AWT是SWING的基础。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。SWING是由100%纯Java实现的,SWING组件是用Java实现的轻量级组件,没有本地代码,不依赖操作系统的支持,这是他与AWT组件的最大区别。由于AWT组件通过与具体平台上相关的对等类实现,因此SWING组件具有更强的实用性。SWING在不同平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。SWING采用了一种MVC的设计范式,即“模型-视图-控制”。
1.2.4 多线程技术的应用
线程简介:进程就是程序运行时的一个实例。线程可以看做单独地占有CPU时间来执行相应的代码的。在多处理机计算机上实现多线程时,它们可以并行工作,而且采用适当的分时策略可提高程序运行的效率。线程是共享地址空间的,也就是说多线程可以同时读取相同的地址空间,并且利用这个空间进行交换数据。
Java实现多线程的过程:与其他语言不一样的是,线程的概念在Java是语言中重要的,根深蒂固的,因为在Java语言中的线程系统是Java语言自建的,Java中有专门的支持多线程的API库。在使用Java创建线程的时候,你可以生成一个Thread类或者其他的子类对象,并给这个对象发送start消息,这样依赖程序会一直执行,直到run返回为止,此时该线程结束了。
1.2.5 Java网络技术的应用
Java最初是作为一种网络编程语言出现的,他能够实用网络上的各种资源和数据,与服务器建立各种传输通道,将自己的数据传送到网络的各个地方。你可以用Java轻松地完成这些,因为Java类库提供了很强大的网络功能。
Java中有关网络方面的功能都定义在程序包中。Java所提供的网络功能可大致分为三大类:
5
(1)URL和URLConnection这是三大类功能中最高级的一种。通过URL的网络资源表达方式,很容易确定网络上数据的位置。利用URL的表示和建立,Java程序可以直接读入网络上所放的数据,或把自己的数据传送到网络的另一端。
(2)Socket所谓Socket,可以想象成两个不同程序通过网路的通道,而这时传统网络程序中最常用的方法。一般在TCP/IP网络协议下的客户服务器软件采用Socket作为交互的方式。
(3)Datagram是这些功能中最低级的一种。其他网络数据传送方式,都假想在程序执行时,建立一条安全稳定的通道。但是以Datagram的方式传送数据时,只是把数据的目的地记录在数据包中,然后就直接放在网络上进行传输,系统不保证数据一定能够安全送到,也不能确定什么时候可以送到。也就是说,Datagram不能保证传送质量。 1.2.6 Eclipse
Eclipse是一个开发源代码、基于java可扩展开发平台。就其本身而言。它知识一个框架和一组服务,用于通过插件组件构建开发环境,它会自动检测电脑上安装的JDK。
由于Eclipse开源免费,而且其插件众多,扩展功能强大,它的代码提示功能能帮助程序员快速的录入代码,此外它的重构功能也让修改代码减少了很多的工作量,因此对大多数用户很乐于将Eclipse当做Java集成开发环境(IDE)来使用,
Eclipse还包括于
插件开发环境,这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许给Eclipse提供插件,以及给用户提供一致和统一的集成开发环境而言,所有具开发人员都具有同等的发挥场所。
1.3 开发平台搭建
1.3.1 安装JDK和Eclipse
从官网下载下面的安装包并安装:
(1)JDK版本1.7.0_51,版本必须是1.7以上。
(2)Eclipse版本Mars.2 Release (4.5.2),其他版本也可以。
1.3.2 JDK环境变量配置
(1)在我的电脑鼠标右键?属性?点击“高级”选项卡,
6
(2)点击“环境变量”,点击“新建”
变量名:JAVA_HOME
变量值:C:Program FilesJavajdk1.7.0(以JDK实际安装路径为准)
(3)点击“确定”,点击“新建”,如果有path变量双击打开,没有就点击“新建”
变量名:Path
变量值:%JAVA_HOME%bin;%JAVA_HOME%jrebin(变量值之间用“;”隔开)
(4)点击“确定”,即可完成配置。
7
第二章 飞机大战游戏需求分析
2.1 用户需求分析
飞机大战游戏首先是一款游戏,它具备所有的游戏所共有的基本特性,每个游戏的最外层都会有一层控制循环,在这个循环里,可以产生各种各样的敌机,可以发生各种各样的碰撞,直到玩家主动退出游戏,才会退出循环,否则会一直的执行下去。
从开发游戏的角度出发,主要就是Hero的移动方式控制,接下来就是Hero子弹的生成,然后是Enemy的出现方式,最后就是各种战机和子弹的碰撞检测,公布对战结果。
该游戏主要包括以下几个功能:
(1)Hero飞行的控制——键盘事件响应
(2)子弹飞行轨迹的控制——多线程的创建
(3)Enemy出现方式和速度的控制——多线程的创建
(4)各种飞行物体碰撞的检测控制——多线程的创建
游戏程序是一项精度要求很高的程序系统,飞行速度的把控,还有响应速度的控制的要求都非常严苛,由于代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、键盘事件都会以极高的效率在后台等待响应,若有丝毫的差别都将很容易导致程序在与运行不久后可能出现与想象中完全不同的差别,甚至死循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的时间及意外情况考虑在设计中。
2.2 可行性分析
可行性分析也称可行性研究,实在调查的基础上,针对新软件的开发是否具备必要性和可能性,对新软件的开发从技术、经济、社会等方面进行和研究,以避免投资失误,保证新软件的开发成功。可行性研究的目的就是用最小的代价在尽可能短的时间内确定问题是否能够解决。
下面将分别从技术、经济、社会三个方面对基于Java的飞机大战游戏的建设进行分析和研究。
(1)技术可行性
8
说技术上的可行性主要分析技术条件能否顺利完成开发工作,硬、软件能否满足开发者的需要等。该软件采用的开发工具是功能强大的Eclipse,它具有十分强的扩展能力,需要的只是下载安装相关的插件,开发平台J2ME更是当前最受欢迎的手机软件开发平台,而且它完全满足飞机大战游戏的开发实现的要求。因此,软件的软件开发平台已经成熟可行。硬件方面,科技飞速发展的今天,硬件更新的速
度越来越快,容量越来越大,可靠性越来越高,价格越来越低,其硬件平台完全能满足此软件的需要。
由以上分析可知,本软件的开发在技术上是可行的。
(2)经济可行性
本软件开发成本低,在经济上是可以接受的,并且本软件是实施后可以显著提高工作效率,有助于飞机大战游戏的管理。而且软件维护简单,实用性强,一次性开发使用,即可长久使用。
(3)社会可行性
本软件是根据基于Java的飞机大战游戏的实际工作情况开发研制的,是通过在网上大量的调研得出的,软件的软件设计实在独立的环境下完成的,不存在侵犯知识产权的情况。
有以上分析可知,本软件具有社会可行性。
2.3 总体设计原则
本软件为了设计,实现和后期维护的方便,以及软件用户使用的便利,所以必须采取一定的设计原则。其主要设计原则有:
(1)简单性:在实现软件的功能的同时,尽量让软件操作简单易懂,这对于一个软件来说是非常重要的。
(2)针对性:本软件设计是基于Java的飞机大战游戏的需要,因此具有良好的实用性。
(3)一致性:命名规则一致性:类型、变量和其他元素的命名规则保持一致;功能一致性:完成同样的功能应该尽量使用同样的元素;元素风格一致性:界面元素的美观风格、摆放位置在同一个界面和不同界面之间都应该是一致的。
9
2.4 功能模块设计
(1)游戏状态的控制功能
游戏的状态控制包括初始化、运行、结束状态。
首先进入游戏的初始化界面,显示游戏的Logo,玩家的菜单选择,接着传送到游戏的主战场,Hero在移动中发射子弹,这时各种敌机从对方迎面扑来,来者不善,Hero奋力抗击,当Hero被Enemy撞击摧毁后,游戏进入结算界面,显示Hero的战绩,到此游戏结束。
(2)玩家游戏控制功能
玩家可以通过控制键盘来控制Hero的移动和Hero子弹的发射。 2.5 游戏难点分析
(1)战机和背景的美化。游戏优美清新的界面会给用户带来愉快的心情和美感。所以在本游戏中,主要采用借鉴原有的游戏的画面,采用PS将各种图片渲染、修饰,提高玩家玩的兴致和欲望。
(2)动画的实现。Hero和Enemy的爆炸动画效果可以利用图片数组、切片的变换形成动画。利用程序不断改变的图片数组的下标,从而实现像电影中帧的概念,从而可以实现爆炸效果。
(3)多线程技术的实现。线程机制的应用是实现游戏控制的基石,游戏中的刷帧、后台资源的加载以及对各类角色,如Hero、Enemy、子弹的自动控制都需要线程来实现,以此来实现对整个游戏的控制。
(4)碰撞问题的解决。碰撞检测技术的实现要综合运用数学和物理知识,在不同的情况下,采用不同的碰撞检测方式。
10
第三章 飞机大战功能模块实现 3.1 项目模块介绍
飞机大战项目的各模块组织如图所示:
图3.1 项目各模块架构 (1)逻辑模块:ne
beans:存放Hero,Enemy,子弹相关的实体类
controler::实现了战机之间、子弹和战机相撞的逻辑控制。
11
utils:封装了Java图形界面、文本、图片、图画的工具类。
views::实现了初始化界面和结束界面的封装。 (2)资源模块:
images:用于存放各种战机,子弹的图片资源。
sounds:用于存放游戏运行时的背景音乐,爆炸音乐
sprites:用于存放各种战机的动画,如战机的启动,爆炸 (3)引用的第三方Jar包如下:
图3.2 第三方Jar包
是支持Java播放MP3的Jar包
是封装了JavaAPI的Jar包 3.2 游戏首页的实现
3.2.1 界面实现
图3.3 游戏初始化界面
12
3.2.2 核心代码
public class StartWin
{
GameImage start;
GameImage over;
int choice = 0;
/**
* 初始化界面显示
* @return 玩家的选择
*/
public int show()
{
eSize(400,600);
eTitle("飞机大战");
View("./win/start/");
GameImage copyright = new
GameImage("./win/start/game_");
ition(0, 0);
start = new GameImage("./win/start/game_");
ition(75, 250); //宽为250
over = new GameImage("./win/start/game_");
ition(75, 300);
GameSprite loadPlane = new GameSprite("load");
ition(120, 400);
riteAnimate("fly", true);
seListener(new MouseControler()
{
/**
* 游戏加载界面上所有的事件控制处理
*/
boolean first = true;
@Override
public void mousePressed(MouseEvent e)
13
{
if(first)
{
choice = getAreaNum(e);
first = false;
}
}
});
while(choice == 0) (100);
und("./button/3", false);
return choice;
}
}
3.3 游戏战场实现
3.4 界面实现
图3.4 游戏运行界面
14
3.5 核心代码
public class GameControler {
Hero hero;
LinkedList
LinkedList
int score;
/**
* 运行控制
*/
public void run()
{
int endChoice = 0;
while(endChoice < 2)
{
loadGame();
hero =new Hero();
b = s;
e = new LinkedList
score = 0;
//加载hero
und("./hero/3", true);
();
//游戏核心,碰撞爆炸,启动碰撞检测线程
detectCollision();
//只要英雄还活着,敌机就不断生产
while()
{
Enemy enemy = Enemy();
(enemy);
(1900);
}
endChoice = finishGame();
15
}
}
}
3.6 Hero移动模块实现
3.6.1 核心代码
public class Hero
{
public GameSprite sprite;
public boolean isLive = true;
public LinkedList
public Hero()
{
sprite = new GameSprite("hero");
riteAnimate("fly", true);
int x = (int)(eWidth() -
e().width)/2;
int y = eHeight() - 25
- e().height;
ition(x, y);
}
/**
* 战机起飞
*/
public void fly()
{
//开枪射击
Listener(new KeyControler()
{
@Override
public void keyPressed(KeyEvent e)
{
if(!)return;
16
int key = Code();
switch (key)
{
case _LEFT:
ft(8);break;
case _RIGHT:
ght(8);break;
case _UP:
(8);break;
case _DOWN:
wn(8);break;
case _SPACE:
(1);break; //单枪
case _ENTER: // 双枪
(2);break;
}
}
});
}
17
3.7 子弹模块的实现
3.7.1 界面实现
图3.5 发射子弹 3.7.2 核心代码
/**
* 子弹类,实现Runnable接口可运行
*/
public class Bullet implements Runnable
{
public GameImage image;
public boolean isLive = true;
public Bullet(Point p)
{
image = new GameImage("./bullet/");
ition(p.x, p.y);
18
}
/**
* 子弹线程,在Hero类中启动
*/
@Override
public void run()
{
und("./bullet/3",false);
while(!()) //可能有误差
{
if(!isLive) break;
(5); //子弹的移动速度
(10);
}
();
isLive = false;
}
}
3.8 Enemy移动模块实现
3.8.1 核心代码
核心代码如下:
public class Enemy1 extends Enemy {
public int lives = 2;
public Enemy1()
{
obj = new GameImage("./enemy/");
}
@Override
public void run()
{
19
while(obj !=null && !om()) //可能有误差
{
if(lives < 1)
{
blowup();
();
n("小型飞机爆炸了");
return;
}
wn(3);
(25);
}
if(obj == null)return;
();
lives = 0;
}
public void blowup()
{
Point p = ition();
GameSprite sprite = new GameSprite("enemy1");
und("./enemy/3", false);
riteAnimate("blowup", false);
ition(p.x, p.y);
(1000);
();
}
}
3.9 敌机航线控制模块
3.9.1 核心代码
public class EnemyControler
{
private static Random rand = new Random();
20
/**
* 生成敌机类型
* @return 敌机编号
*/
public static int createEnemyType()
{
int num = 1 + t(3);
return num;
}
/**
* 根据类型生成敌机坐标
* @param type
* @return point对象
*/
public static Point createEnemyPoint(GameObject obj)
{
Point p = new Point();
Dimension d = e();
int width = eWidth();
p.x = t(width- );
p.y = -;
return p;
}
/**
* 生产敌机
*/
public static Enemy createEnemy()
{
Enemy enemy = null;
int type;
type = EnemyType();
switch(type)
21
{
case 1:enemy = new Enemy1();break;
case 2:enemy = new Enemy2();break;
case 3:enemy = new Enemy3();break;
}
Point p = EnemyPoint();
ition(p.x,p.y);
();
return enemy;
}
}
3.10 碰撞检测模块实现
判断两辆战机是否碰撞的简单做法是判断两个矩形是否相交,如果相交,则生命值
减1,直到爆炸。
3.10.1 战机碰撞界面
图3.6 敌机爆炸
22
3.10.2 核心代码
碰撞逻辑核心代码如下:
/**
* 碰撞检测线程
*/
public void detectCollision()
{
//敌机检测子弹,敌机检测hero
new Thread(new Runnable()
{
@Override
public void run()
{
while(true)
{
n("碰撞检测线程进入");
if(!) return;
for(int i = ()-1; i >= 0; i--)
{
Enemy enemy = (i);
if(es() < 1) continue;
if(rsectWith())
{
n("敌机与hero撞了");
= false;
();
score = countScore();
destroyAll();
return;
}
for(int j = ()-1; j >= 0; j--)
{
Bullet bullet = (j);
23
if(!) continue;
if(rsectWith())
{
n("敌机与子弹撞了");
es(es()-1);
= false;
}
}
}
(50);
}
}
}).start();
}
/**
* 两个矩形相交判断
* @param object
* @return
*/
public boolean isIntersectWith(GameObject object)
{
Point p1 = ition();
Dimension d1 = e();
Point p2 = ition();
Dimension d2 = e();
//this在object左边
if(p1.x + < p2.x) return false;
//this在object右边
if(p1.x > p2.x+) return false;
//this在object上边
if(p1.y + < p2.y) return false;
//this在 object下边
if(p1.y > p2.y + )); return false;
24
return true;
}
3.11 积分显示模块实现
3.11.1 界面实现
图3.7 积分成绩显示 3.11.2 核心代码
核心代码如下:
/**
* 积分成绩显示
*/
public class Label
{
public static String[] numName = {
"./number/","./number/", "./number/",
"./number/", "./number/", "./number/",
25
"./number/", "./number/", "./number/",
"./number/"};
public static void showNum(int num)
{
String scoreStr = f(num);
int len = ();
int x,y;
//积分牌在中间,共6张数字图片
for(int i = 0; i < 3; i++)
{
GameImage number;
//各个位置的数字安排
if(i < len)
{
char ch = (len-i-1);
number = new GameImage(numName[ch-'0']);
}
else
{
number = new GameImage(numName[0]);
}
ition(x, y);
x = x - 40;
}
}
public static void showScore(int score)
{
String scoreStr = f(score);
int len = ();
int x,y;
//显示牌在中间,位置 85,145
x = 285;
y = 145;
for(int i = 0; i < 6; i++)
26
{
GameImage number = null;
if(i < len)
{
char ch = (len-i-1);
number = new GameImage(numName[ch-'0']);
}
else
{
number = new GameImage(numName[0]);
}
ition(x, y);
x = x - 40;
}
}
27
第四章 软件测试
4.1 测试的定义
测试是软件开发的最后一个阶段,是保证软件质量的重要手段。从本质上说,软件测试是“探测”,在“探测”中发现软件的毛病,目的不在于验证程序的正确性,而是发现软件中潜在的错误。
4.2 测试的重要性
软件测试在软件生命周期中占据重要的地位,在传统的瀑布模型中,软件测试学仅处于运行维护阶段之前,是软件产品交付用户使用之前保证软件质量的重要手段。近来,软件工程趋向一种新的观点,即认为软件生命周期每一阶段中都应包含测试,从而检验本阶段的成果是否接近预期的目标,尽可能早的发现错误并加以修正,如果不在早期阶段进行测试,错误的延时扩散常常会导致最后成品测试的巨大困难。 4.3 测试方法
程序测试的主要方法分为两大类,白盒测试和黑盒测试。
白盒测试:一种是以程序的内部逻辑结构为依据而设计测试用例的方法,因而有称结构测试或玻璃盒测试。白盒测试就是要选取足够的测试用例,对源代码实行比较充分的覆盖,以便尽可能多的发现程序中的错误。主要有两种方法:一种称为逻辑覆盖法,另一种称为路径覆盖法。
黑盒测试:也称为功能测试,数据驱动测试等,黑盒测试主要是根据输入条件和输出条件的确定测试数据,来检查程序是否能产生正确的输出。进行黑盒测试主要有以下面的集中方法:等价分类法、边界值分析法、猜错法、因果图法。
本系统的测试综合了白盒测试、黑盒测试两种方法,但主要使用的是黑盒测试方法。在测试当中遵循了“尽早地和不断进行测试”,“保证测试用例的完整性和有效性”原则。通过测试到达以下测试目的:
(1)初试化、终止检查
(2)功能检查
检查功能是否争取,是否遗漏或实现不了应该实现的功能等。
28
(3)数据检查
检查数据结构或外部信息是否有数据文件访问错误
检查是否能进行正确地初始化或终止。
4.4 测试结果
(1)初始和结束界面的进入和返回正常及时,界面和菜单没有出现无法响应的现象,测试通过。
(2)游戏过程中的背景音乐的播放、飞机爆炸的声音没有出现延时或者错误播放的现象,测试通过。
(3)飞机启动和飞行时的动画效果没有出现闪顿现象,可以顺利的播放和消失,测试通过。
(4)Hero战机在键盘的控制中没有出现失效的情况,可以及时响应键盘的操作,测试通过。
(5)多种Enemy从对方以随机的方式出现,没有出现Enemy之间互相重叠,碰撞的现象,测试通过。
(6)子弹与Enemy, Enemy与Hero发生相交碰撞,没有出现失效或者延时的现象,测试通过。
(7)3种Enemy的积分值分别为200,400,600,积分牌显示的结果和真实敌机被击落的情况没有出现不一致的现象,测试通过。
29
结 论
此次毕业设计做的是基于Java的飞机大战游戏的设计与实现,通过几周的努力总算圆满结束。该软件基本上实现了游戏流程中的几个关键步骤,界面布局采用了PS绘图渲染和修饰技术,在动画实现上利用了图片切换实现了电影电视中帧的概念,在技术层面上利用Java的多线程技术,在整体模式上采用了MVC的分层思想,这些技术和思想的运用使得整个开发流程变得方便和轻松许多,这也是Java面向对象的魅力。在以后的工作当中,无论是在服务端,还是在移动端,相信这段时间的锻炼一定可以对自己产生很大的作用。
做项目之前,对整个项目的需求、模块、难点,一定要有全面和清晰的了解,这是本次毕业设计带给我的体会。整个飞机大战游戏看起来很容易,玩起来也很简单,但是其中包括的设计要素一点也不少,麻雀虽小,但五脏俱全。需求就是做一款经典的飞机游戏,缅怀经典,向经典致敬,同时也帮助自己了解游戏制作的基本原理和基本方式方法;模块是以对象为划分,有界面模块,Hero模块,子弹模块,Enemy模块,游戏控制模块;难点在于多架战机同时出动,判断发生碰撞的算法选择。当你的脑海中有这么多东西时,整个游戏的开发就会变得清晰明了很多,写起来也很快。很多时候,做一件事或者完成一件作品的时候,经常延期,加班,是因为你压根就没想好该怎么做,导致越做越复杂,越做越乱,正确做法的结果是越做越简单,越做越轻松,因为地基已经打好了,架构已经很清晰了。
整个软件按照预期目标大致实现了飞机大战游戏的功能,当然由于个人技术有限以及时间的不足,整个游戏还存在一些不足 ,有待于日后进一步的改进和完善。比如:怎么动态及时的显示积分数,怎么能够让各种敌机在不同的时间点以不同速度飞行还不发生碰撞等等。这些问题在游戏开发中都是亟待解决的,一款好的游戏必须要在细节上下够功夫,才能赢得玩家的喜欢,这也是游戏比较难做的原因,需要长时间的技术积累才能做出一块比较完美的游戏。
总之,革命尚未成功,同志仍需努力,飞机大战游戏,还有很大的发展空间,比如可以在多人联网下共同作战,还可以及时分享自己的战绩,当然这也是Java的强项,更何况还有各种各样的大牛在开源世界里奉献着自己的想法和代码。通过这次毕业设计让自己对游戏和Java有了另一番了解,同时自己的编程能力得到了很大的提升,正是应验了那句话,努力不一定成功,但一定会让人发生蜕变。
30
致 谢
再过几天,大学生活也将划上一个句号,四年的时光,犹如白驹过隙,一闪而过,有人欢喜,有人哀伤。但在整个人生长河当中,这仅仅是一个逗号,我们将面对的是又一次征程的开始。
回忆过去,许许多多的事情浮现在脑海:刚上大学时欢乐心情和兴奋的场景还丽丽在目。一切都是那么新鲜,那么吸引力。有欢乐也有失落。衷心感谢理学院所有支持帮助过我的老师,谢谢你们多年来的关心和爱护。同窗的友情同样难忘,你们与我共同走过了人生中不平凡的道路,给我留下了值得珍藏的美好记忆。
最后,我要特别感谢指导教师李老师。本论文是在他的悉心指导和热情帮助下完成的,老师的认真和负责,给了我很大的帮助,是我专业技能的应用水平得到很大提高。在此特别地向他表示衷心的高些和崇高的敬意,谢谢他细心而又耐心地辅
导,使得我得意顺利的完成毕业设计,同时也要感谢其他帮助过我的老师和同学,他们在我成长过程中给予了很大的帮助,在此一并表示感谢。
由于本人水平有限,加上时间紧促,本文一定有不少缺点和不足,恳请各位老师给予帮助和指正。
31
参考文献
[1]谢海军.基于JAVA的手机游戏引擎的研究及实现[D].西南交通大学,2007.
[2]许周辰.基于JavaME平台2D手机游戏引擎设计与实现[D].西南交通大学,2009.
[3]何莉.浅谈JAVA游戏开发与FLASH游戏开发的比较[J].经营管理者,2011,08:313+312.
[4]梁懋寅.基于JAVA_NIO技术的手机网络游戏引擎研究与实现[D].天津大学,2010.
[5]雷丽娟,郑永彬.使用Java制作贪吃蛇游戏[J].科技视界,2013,04:139-140+122.
[6]仇宾.基于Java的“连连看”游戏[J].电脑编程技巧与维护,2013,11:72-77.
[7]Sc. D W C B. Advanced Java Game Programming[M]. APress, 2004.
[8]Ross J M. Guiding students through programming puzzles: value and
examples of Java
game assignments[J]. Acm Sigcse Bulletin, 2002, 34(4):94-98.
32
附 录
项目其它模块
images包下的文件如下图所示,用来加载各种飞机和子弹,
sounds包下的文件如下图所示,用来加载游戏所用到的各种声音,
sprites包下的文件如图所示,用来各种机型的动画效果:
版权声明:本文标题:毕业设计(论文)-基于Java的飞机大战游戏开发 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1708666984h528895.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论