飞行射击类游戏的设计与实现_第1页
飞行射击类游戏的设计与实现_第2页
飞行射击类游戏的设计与实现_第3页
飞行射击类游戏的设计与实现_第4页
飞行射击类游戏的设计与实现_第5页
已阅读5页,还剩8页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、山西大学论文编号:2008241054论文题目一个飞行射击类游戏的设计与实现姓 名刘 全院系、专业计算机与信息技术学院、计算机科学与技术专业学习年限 2008 年 9 月 2012 年 7 月指导教师翟岩慧学位级别学 士2012年4月3日一个飞行射击类游戏的设计与实现学生姓名:刘全指导老师: 翟岩慧内容提要:本文主要阐述了一个飞行射击类游戏的设计与实现。该游戏主要是基于Java语言,使用Graphics2D 类,Thread , AWT/Swing开发的。主要实现了游戏者控制一架小飞机躲避敌方炮 弹,并且小飞机可以发射炮弹击毁敌机。关键字:Java Swing Graphics2D Threa

2、d飞行射击1绪论在信息社会中,随着经济的迅速发展,人们的生活和学习发生了巨大变化。一些休闲小游戏 已经走进人们的生活,但当今大部分游戏只注重画面与音乐,不注重剧情与可玩性,计算机配置 要求也越来越高。因此设计一款简单,可玩性好的小游戏为人们在工作与学习的闲暇放松紧张的 心情,提高工作学习效率已经非常有必要。同时由于计算机技术的不断进步,Java应用程序产生的增值服务逐渐体现出其非凡的影响力。这为游戏的发展奠定了坚实的基础,使得游戏的发展也 发生着巨大的变化,再加上多媒体技术的支持,使得游戏也成为了我国的一大产业。着眼于J2ME技术的应用,本人制作了一款简单的飞行射击类游戏。本文所阐述的飞行射击

3、类游戏,主要是实现了简单的飞行射击,没有在界面上做过多的修饰,游戏各部分功能已实现,并且游戏对计算机的配置要求也不高,而且游戏娱乐性也较强。2相关理论与技术2.1 JavaJava 1是由Sun Microsystems 公司于1995年开发完成的Java程序设计语言和 Java平台的总和。用Java实现的Hot Java浏览器展示了 Java的魅力,有跨平台的, 动感的 Web和Internet 计算。从此,Java被计算机程序员广泛接受并推动了Web的迅速发展,通常使用的浏览器现在支持Java Applet 。另一方面, Java技术也不断更新。Java平台由Java虚拟机2和Java应用

4、编程接口构成。Java应用编程接口为 Java应用提供了一个独立操作系统的标准接口,分为基本部分和扩展部分。操作系统平台上安装一个Java平台之后,Java应用程序就可运行。 Java平台已经嵌入了几乎所有的操作系统。这样 Java程序可以 只编译一次,就可以在各种系统中运行。2.2 Java Graphics2DGraphics2D 类扩展了 Graphics类,提供了对几何形状、坐标转换、颜色管理和文本布局更为 复杂的控制。它是用于在Java(tm) 3-4平台上呈现二维形状、文本和图像的基础类。2.2.1 坐标空间所有传递到Graphics2D 对象的坐标都在一个与设备无关并且名为用户空

5、间的坐标系统中指定的,这是应用程序使用的坐标系统。Graphics2D 对象包含一个 AffineTransform对象作为其呈现状态的一部分,后者定义了如何将坐标从用户空间转换到设备空间中与设备相关的坐标。设备空间中的坐标通常是指单独的设备像素,并根据这些像素之间无限小的间距对齐。某些对象可用 于将对存储器的呈现操作捕获到图形元文件中,用于以后在未知物理分辨率的具体设备上播放。由于在捕获呈现操作时分辨率可能未知所以设置Graphics2D的Transform将用户坐标转换为虚拟设备空间,该设备空间与目标设备的预期分辨率接近。如果估计值不正确,则在播放时可能需要进一步转换。某些由呈现属性对象执

6、行的操作发生在设备空间中,但所有Graphics2D 方法都采用用户空间坐标。每个Graphics2D 对象都与一个定义了呈现位置的目标相关联。Graphics Configuration 对象定义呈现目标的特征,如像素格式和分辨率。2.2.2 呈现过程确定呈现内容,将呈现操作限制在当前的Clip。Clip由用户空间中的Shape指定,并由该程序使用 Graphics 和Graphics2D 的各种Clip 操作方法进行控制。此用户剪贴区由当前的 Transform 转换到设备空间中,并且与设备剪贴区组合,后者是通过窗口可见性和设备范围定义 的。用户剪贴区和设备剪贴区的组合定义了复合剪贴区,它

7、确定了最终的剪贴区域。用户剪贴区不能由呈现系统修改,以反映得到的复合剪贴区。确定呈现的颜色。使用Graphics2D 上下文中当前的Composite属性将颜色应用于目标绘图面。2.2.3 呈现兼容性问题JDK(tm)1.1呈现模型是基于像素化的模型,该模型的坐标无限细分,位于像素之间。使用一个像素宽的画笔执行绘制操作,在路径锚点向下和向右填充像素。JDK 1.1呈现模型与大多数现有平台呈现类的功能相一致,需要将整数坐标分析为离散的画笔,使其完全落在指定数量的像素上。Java 2D(tm) 7-8 API支持防重叠呈现器。与像素 N+1相对,一像素宽的画笔不需要完全落在像素N上。该画笔可以部分

8、落在这两个像素上。不需要为宽画笔选择一个偏离方向,因为画笔遍历边缘发生的混合可让画笔的子像素位置对用户可见。Java 2D API维持了与 JDK 1.1呈现行为的兼容性,因此遗留操作和现有呈现器行为在Java 2D API下未改变。定义了映射到常规 Draw和Fill 方法的遗留方法, 它明确指示 Graphics2D 根据Stroke和Transform 属性和呈现提示的设 置来扩展 Graphics 的方法。2.3 Java GUI图形用户界面是指采用图形方式显示的计算机操作用户界面。这种面向客户的系统工程设计 其目的是优化产品的性能,使操作更人性化,减轻使用者的认知负担,使其更适合用户

9、的操作需 求,直接提升产品的市场竞争力。GUI即人机交互图形化用户界面设计。纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到GUI在产品方面产生的强大增值功能,以及带动的巨大市场价值,因此在公司内部设立了相关部门专门从事GUI的研究与设计,同业间也成立了若干机构,以互相交流 GUI设计理论与经验为目的。随着中国 IT产业,移动通讯产业,家电产业的迅猛发 展,在产品的人机交互界面设计水平发展上日显滞后,这对于提高产业综合素质,提升与国际同 等业者的竞争能力等等方面无疑起了制约的作用。1 ) GUI视窗:应用程序为使用数据而在图形用户界面中设置的基本单元。应用程序和数

10、据在窗口内实现一 体化。在窗口中,用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。通常在窗口 四周设有菜单、图标,数据放在中央。2) GUI菜单:将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置于画面的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入。重要程度一般是从左到右,越往右重要度越 低。命定的层次根据应用程序的不同而不同,一般重视文件的操作、编辑功能,因此放在最左边, 然后往右有各种设置等操作,最右边往往设有帮助。一般使用鼠标的第一按钮进行操作。3) Java中的GUI实现方式:针对特定的图形设备输出接口,自行开发相关的功能函数。购买针对特定嵌入式系统的图

11、形中间软件包。采用源码开放的嵌入式GUI系统。使用独立软件开发商提供的嵌入式GUI产品。2.4 Java SwingSwing是一个用于开发Java应用程序用户界面的开发工具包。它以抽象窗口工具包(AWT为基础使跨平台应用程序可以使用任何可插拔的外观风格。Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。创建图形界面步骤 :11)导入 Swing包(2)选择界面风格(3)设置顶层容器(4)设置按钮和标签(5)将组件放到容器上(6)为组件增加边框(7)处理事件Swing 采用了一种 MVC的设计范式,即“模型-视图-控制”,其中模型用来保存内容

12、,视图用来显示内容,控制器用来控制用户输入。Swing外观感觉采用可插入的外观感觉。在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得 AWT组件总是只有与本机相关的外观。Swing使得程序在一个平台上运行时能够有不同的外观。用户可以选择自己习惯的外观。3需求分析3.1 目标游戏要求本游戏适合于休闲游戏,这是一款飞行射击的游戏。游戏程序是一项精度要求很高的程序系 统,因此代码利用率很高。一个实时运行的游戏,每秒都会运行成千上万事件,绘图事件,键盘 事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能 出现严重错误,甚至死循环。因此,其逻辑设计应当相当严

13、谨,须将所有可能发生的事件及意外 情况考虑在设计中。飞行射击游戏要求有一个可供玩家控制的小飞机,小飞机有一定的生命值,可以发射子弹击毁敌机,躲避敌机发射的子弹,若小飞机被敌机击中,则生命值减少,当生命值为0时,游戏失败,游戏分为两关,每关最后设置一个大的敌机,它拥有更多的生命值,可以发射更多的子弹, 若玩家控制小飞机最后击毁敌方的Boss,则游戏胜利。3.2 系统运行环境1 .运行操作系统 Windows XP或以上2 .分辨率 最佳效果800*6003.3 系统开发工具1 .开发环境 Eclipse2 .开发语百 Java3 .开发环境运行平台Windows XP(SP3)3.4 系统的性能

14、要求1 .保证制作出来的游戏可被顺畅运行2 .要求游戏能快速响应玩家对小飞机的操作3 .准确无误的显示玩家对小飞机的控制3.5系统的功能要求程序运行时应该对玩家是否飞出屏幕的范围进行检测,如果飞出屏幕,就应该重新设定玩家 的位置。根据游戏设定需检测玩家子弹与敌军,敌军子弹与玩家是否碰撞。如果发生碰撞,将小飞机 图片替换为爆炸图片。敌人需要具有一定的智能性(如简单的跟踪功能 ),以便对玩家攻击,使游戏有一定的可玩性。敌人可以在一定范围内变换位置和开炮,同时应该检测敌军是否飞出了界外。游戏的画面使用 Java中的Graphic类提供的方法,将玩家,敌军以及子弹画出。4系统概要设计4.1 设计思路游

15、戏中应设计至少三种类型的飞机,自己控制的飞机,小型的敌机,和大型敌机(大BOSS敌机可以发射子弹,玩家可以躲避敌机发射的子弹,并且发射子弹击毁敌方的飞机,三种飞机都 设定一定的生命值,若被击中,则生命值减少,当玩家或敌机的生命值为0时,飞机被击毁,游戏设定两关,每关一个大BOSS BOSS可以发射更多的子弹,并且拥有更多的生命值,并且可以根据主角飞机的位置,发射子弹,从而拥有一定子弹追踪效果。若玩家顺利躲避了小飞机的子弹, 并且将BOSSW灭,则玩家胜利通关,若玩家被敌机击毁,则游戏结束。考虑本游戏是单机小游戏,所以充分的考虑它的娱乐性,没有增加复杂的功能。4.2 各个模块以及功能显示模块:将

16、游戏过程中的全部内容显示在屏幕上,包括对玩家输入的控制信息,经过后台处理后,通过显示模块显示出来。控制模块:通过对玩家输入的操作信息的判别,在将数据传输到数据处理模块。数据处理模块:控制模块传来的数据经过数据处理后,将数据传输到显示模块。数据存储模块:保存每个关卡中敌机的个数,以及几种不同的小飞机出现的次序的信息。游戏的功能模块如图1所示:图1游戏功能模块图5系统详细设计5.1 相关算法5.1.1 碰撞检测算法在飞行射击游戏中,碰撞是最关键的技术,如果不能很好的解决,会影响玩游戏的娱乐性。 因为飞行射击游戏就是碰撞的游戏一一躲避敌人的子弹或飞机,同时用自己的子弹去碰撞敌人。 判断圆形物体只要两

17、个物体的中心点距离小于它们的半径之和就可以了。但我们要碰撞的物体是 圆形子弹和方形的飞机,就需要一种精确的检测方法。例如,半径检测法,三维中的标准平台方 程法,边界框法等等。我们采用边界框法,边界框是在编程中加进去的不可见的边界。边界框法,顾名思义,就是 用边界框来检测物体是否发生了碰撞,如果两个物体的边界框相互干扰,则发生了碰撞。用什么 样的边界框要视不同情况而定,用最近似的几何形状。当然,可以用物体的准确几何形状作边界 框,在飞行射击游戏中,我们可以用矩形作近似的边界框。现在我们假设飞机是一个正方形,我 的飞机是正着的、向上飞的正方形,敌人的子弹是迎面飞来的,圆形的,且飞机不会旋转(大部分

18、游戏中都是这样的)。我们可以这样定义飞机:中心点O(X1,Y1),四个顶点 P0(X3,Y3)、P1(X4,Y4)、P2(X5,Y5)、P3(X6,Y6)。中心点为正方形的中心点,即中心点到四个顶点的距离相等。我们把正 方形放到极坐标平面中,中心点为原点,水平线即X轴为零度角。正方形成了如图2的所示:在每个角度我们都可以找到一个距离,用以描述正方形的边。既然我们找到了边到中心点的距离,那就可以用这个距离来检测碰撞。假设,正方形和圆中心点坐标分别为(X1,Y1 )和(X2,Y2),由这两个点的坐标求出两点的距离L1及两点连线和 X轴的夹角。,再由0求出中心点连线与正方形边的交点加圆半径L2,用这

19、两个距离比较,从而判断正方形和圆是否碰撞。若L1>L2,则没有碰撞,若L1<=L2,则碰撞。如图 3所示:子弹坐标:X2,丫2小飞机中心坐标:X1, Y1图2子弹与小飞机位置关系图5.1.2 子弹跟踪算法本游戏使用的子弹追踪算法是根据子弹和飞机的中心位置的连线,判断子弹的飞行路径。即,在子弹初始化时和飞机此时的位置中心之间画一条直线,子弹就跟据这条直线飞行,从而实现简 单子弹追踪效果,如图4所示:图3子弹与小飞机碰撞图图4子弹追踪小飞机示意图5.2 模块设计显示模块:(1)初始化游戏开始界面,在主界面上显示游戏开始提示。(2)游戏开始后,通过玩家类( playA类)创建一个玩家控制

20、的小飞机显示出来,并在数据存 储模块中通过创建敌机类(enemy类)的实例加载关卡中的敌方飞机。(3)玩家通过控制键,控制小飞机的移动和发射炮弹,通过数据处理模块得到飞机的移动信 息,通过显示模块显示出来飞机的移动和发射的炮弹。(4)游戏结束,显示游戏胜利或失败。数据处理模块:(1)数据处理分为两个部分,分别是处理每关中敌方飞机行为,和处理玩家控制小飞机的行 为。(2)两个部分分别用多个线程实现,游戏开始后,两个线程分别启动。(3)控制敌方飞机的部分开始后,从关卡类( stage类)中,将敌机按顺序创建,敌机有三种不同的类型,拥有不同的飞行行为(即不同的飞行路径),但发射的子弹是相同的。(4)

21、控制玩家飞机的部分开始后,这部分设置了键盘监听事件,当玩家按W, S, A, D, Z时,飞机作出相应的动作。发射炮弹或左右移动,当子弹击中敌机时,敌机生命值减少, 当生命值为0时,敌机图片换成爆炸图片。同样,当敌方飞机的子弹击中玩家控制飞机时,玩家的小飞机生命值减少,若生命值为0,则游戏失败,结束游戏。(5)游戏最后,出现游戏的大BOSS,大BOSS拥有更多的生命值,可以发射更多的子弹,并且子弹具有简单的追踪效果。控制模块:控制模块提供了玩家对小飞机的操作接口,玩家通过键盘可以操作小飞机上下左右移动发射 子弹。数据存储模块:数据存储模块主要存储每关中敌机出现的时间,飞机类型,出现位置,和发射

22、子弹频率。5.3 游戏详细流程图6系统演不图5游戏流程图游戏开始界面如图7.1所示,在该游戏中,主要在一个JPanel中显示游戏过程。玩家控制小飞机躲避敌人子弹,并且消灭敌人。玩家有一定的生命值,被子弹击中,则减少一定的生命值, 若生命值为 0 ,则游戏失败,若玩家消灭了大BOSS则游戏胜利。巨j雷电2012(jav3版)* *【口 |回图6游戏开始界面7.2所示,敲击ENTERS就开始游戏,游戏中用W, S, A, D对小飞机进行控制移动,如图按Z键控制小飞机发射炮弹击毁敌方飞机,敌方飞机有三种,各自有不同的动作(即表现形式)雷电2。12必日版)-=i 回图7进行游戏中的界面消灭完所有的敌方

23、小飞机后,或者在规定时间后,没有被敌方小飞机消灭,仍然存活,则出现个大B OS S,大BOSS拥有更多的生命值,可以发射更多的子弹,子弹类型有两种,一种是规则的向四面八方发射的子弹,另一种是拥有一定的跟踪效果的子弹,如图7.3所示。图8游戏中对战大 BOSS的界面7结束语经过一学期的毕业设计,并且在老师的悉心指导下,我基本上完成了飞行射击类游戏的设计与实现,在设计期间,我查阅了大量的关于 java Graphics2D 和java swing 等想关的书籍,对 java 语言有了更进一步的认识,同时对面向对象语言有了更加深刻的认识,在编写程序时运用了平时课堂上学到的知识,对软件工程等有了更加深

24、刻的理解,也让我学会了动画效果的展现,虽然实 际效果欠佳。游戏有许多不足的地方,首先界面不是很美观,再者飞机的类型和弹药的类型都不太丰富, 游戏运行起来不是很流畅,流畅性不好,在判断子弹击中飞机的时候精度不是很高,由于时间有 限,游戏只有一关, boss死了游戏就结束了,情节不是很丰富,想必对玩家的吸引力不够。本次游戏的设计与实现让我们进一步熟练了一下已学的知识,课堂上所学的内容在游戏中都 得到了体现,也让我在以后的学习中更加坚定成为一名好程序员。8致谢在论文完成之际,首先感谢我的父母多年来对我学业的理解与支持;其次我真诚感谢大学期 间在学习和生活上给我启迪和鼓励的所有师长和朋友,这四年中正因为与你们的默契相处才促使 我不断进步逐渐成熟,同时使我的生活充实而快乐,在此我感谢您们。尤其要感谢我的指导老师 翟岩慧老师,从最初收集资料、研究资料到系统的逐渐实现,直至论文的最终完成,这其中每一 个阶段都倾注着翟老师的心血和汗水。没有他严格尽心的指导和细致入微的帮助,就没有本文的 顺利完成,在此致以真诚的谢意。参考文献:1克里夫特.JAVA游戏高级编程:清华大学出版社.2005.1092张桂珠.JAVA面向对象程序设计:北京邮电

温馨提示

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

评论

0/150

提交评论