飞行射击类游戏的设计与实现.docx
《飞行射击类游戏的设计与实现.docx》由会员分享,可在线阅读,更多相关《飞行射击类游戏的设计与实现.docx(18页珍藏版)》请在冰豆网上搜索。
飞行射击类游戏的设计与实现
山西大学论文编号:
2008241054
论文题目一个飞行射击类游戏的设计与实现
姓名刘全
院系、专业计算机与信息技术学院、计算机科学与技术专业
学习年限2008年9月2012年7月
指导教师翟岩慧
学位级别学士
2012年4月3日
一个飞行射击类游戏的设计与实现
学生姓名:
刘全 指导老师:
翟岩慧
内容提要:
本文主要阐述了一个飞行射击类游戏的设计与实现。
该游戏主要是基于Java语言,使用Graphics2D类,Thread,AWT/Swing开发的。
主要实现了游戏者控制一架小飞机躲避敌方炮弹,并且小飞机可以发射炮弹击毁敌机。
关键字:
JavaSwingGraphics2DThread飞行射击
1绪论
在信息社会中,随着经济的迅速发展,人们的生活和学习发生了巨大变化。
一些休闲小游戏已经走进人们的生活,但当今大部分游戏只注重画面与音乐,不注重剧情与可玩性,计算机配置要求也越来越高。
因此设计一款简单,可玩性好的小游戏为人们在工作与学习的闲暇放松紧张的心情,提高工作学习效率已经非常有必要。
同时由于计算机技术的不断进步,Java应用程序产生的增值服务逐渐体现出其非凡的影响力。
这为游戏的发展奠定了坚实的基础,使得游戏的发展也发生着巨大的变化,再加上多媒体技术的支持,使得游戏也成为了我国的一大产业。
着眼于J2ME技术的应用,本人制作了一款简单的飞行射击类游戏。
本文所阐述的飞行射击类游戏,主要是实现了简单的飞行射击,没有在界面上做过多的修饰,游戏各部分功能已实现,并且游戏对计算机的配置要求也不高,而且游戏娱乐性也较强.
2相关理论与技术
2.1Java
Java[1]是由SunMicrosystems公司于1995年开发完成的Java程序设计语言和Java平台的总和。
用Java实现的HotJava浏览器展示了Java的魅力,有跨平台的,动感的Web,和Internet计算。
从此,Java被计算机程序员广泛接受并推动了Web的迅速发展,通常使用的浏览器现在支持JavaApplet。
另一方面,Java技术也不断更新。
Java平台由Java虚拟机[2]和Java应用编程接口构成.Java应用编程接口为Java应用提供了一个独立操作系统的标准接口,分为基本部分和扩展部分。
操作系统平台上安装一个Java平台之后,Java应用程序就可运行。
Java平台已经嵌入了几乎所有的操作系统。
这样Java程序可以只编译一次,就可以在各种系统中运行.
2.2JavaGraphics2D
Graphics2D类扩展了Graphics类,提供了对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。
它是用于在Java(tm)[3—4]平台上呈现二维形状、文本和图像的基础类.
2。
2.1坐标空间
所有传递到Graphics2D对象的坐标都在一个与设备无关并且名为用户空间的坐标系统中指定的,这是应用程序使用的坐标系统。
Graphics2D对象包含一个AffineTransform对象作为其呈现状态的一部分,后者定义了如何将坐标从用户空间转换到设备空间中与设备相关的坐标。
设备空间中的坐标通常是指单独的设备像素,并根据这些像素之间无限小的间距对齐。
某些对象可用于将对存储器的呈现操作捕获到图形元文件中,用于以后在未知物理分辨率的具体设备上播放。
由于在捕获呈现操作时分辨率可能未知所以设置Graphics2D的Transform将用户坐标转换为虚拟设备空间,该设备空间与目标设备的预期分辨率接近.如果估计值不正确,则在播放时可能需要进一步转换。
某些由呈现属性对象执行的操作发生在设备空间中,但所有Graphics2D方法都采用用户空间坐标。
每个Graphics2D对象都与一个定义了呈现位置的目标相关联。
GraphicsConfiguration对象定义呈现目标的特征,如像素格式和分辨率。
2。
2.2呈现过程
确定呈现内容,将呈现操作限制在当前的Clip.Clip由用户空间中的Shape指定,并由该程序使用Graphics和Graphics2D的各种Clip操作方法进行控制.此用户剪贴区由当前的Transform转换到设备空间中,并且与设备剪贴区组合,后者是通过窗口可见性和设备范围定义的。
用户剪贴区和设备剪贴区的组合定义了复合剪贴区,它确定了最终的剪贴区域。
用户剪贴区不能由呈现系统修改,以反映得到的复合剪贴区。
确定呈现的颜色.使用Graphics2D上下文中当前的Composite属性将颜色应用于目标绘图面。
2.2。
3呈现兼容性问题
JDK(tm)1.1呈现模型是基于像素化的模型,该模型的坐标无限细分,位于像素之间。
使用一个像素宽的画笔执行绘制操作,在路径锚点向下和向右填充像素.JDK1.1呈现模型与大多数现有平台呈现类的功能相一致,需要将整数坐标分析为离散的画笔,使其完全落在指定数量的像素上。
Java2D(tm)[7-8]API支持防重叠呈现器。
与像素N+1相对,一像素宽的画笔不需要完全落在像素N上。
该画笔可以部分落在这两个像素上。
不需要为宽画笔选择一个偏离方向,因为画笔遍历边缘发生的混合可让画笔的子像素位置对用户可见。
Java2DAPI维持了与JDK1.1呈现行为的兼容性,因此遗留操作和现有呈现器行为在Java2DAPI下未改变。
定义了映射到常规Draw和Fill方法的遗留方法,它明确指示Graphics2D根据Stroke和Transform属性和呈现提示的设置来扩展Graphics的方法。
2。
3JavaGUI
图形用户界面是指采用图形方式显示的计算机操作用户界面。
这种面向客户的系统工程设计其目的是优化产品的性能,使操作更人性化,减轻使用者的认知负担,使其更适合用户的操作需求,直接提升产品的市场竞争力。
GUI即人机交互图形化用户界面设计.纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到GUI在产品方面产生的强大增值功能,以及带动的巨大市场价值,因此在公司内部设立了相关部门专门从事GUI的研究与设计,同业间也成立了若干机构,以互相交流GUI设计理论与经验为目的。
随着中国IT产业,移动通讯产业,家电产业的迅猛发展,在产品的人机交互界面设计水平发展上日显滞后,这对于提高产业综合素质,提升与国际同等业者的竞争能力等等方面无疑起了制约的作用.
1)GUI视窗:
应用程序为使用数据而在图形用户界面中设置的基本单元。
应用程序和数据在窗口内实现一体化。
在窗口中,用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。
通常在窗口四周设有菜单、图标,数据放在中央.
2)GUI菜单:
将系统可以执行的命令以阶层的方式显示出来的一个界面.一般置于画面的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入.重要程度一般是从左到右,越往右重要度越低.命定的层次根据应用程序的不同而不同,一般重视文件的操作、编辑功能,因此放在最左边,然后往右有各种设置等操作,最右边往往设有帮助。
一般使用鼠标的第一按钮进行操作。
3)Java中的GUI实现方式:
针对特定的图形设备输出接口,自行开发相关的功能函数。
购买针对特定嵌入式系统的图形中间软件包.
采用源码开放的嵌入式GUI系统。
使用独立软件开发商提供的嵌入式GUI产品。
2。
4JavaSwing
Swing是一个用于开发Java应用程序用户界面的开发工具包。
它以抽象窗口工具包(AWT)为基础使跨平台应用程序可以使用任何可插拔的外观风格。
Swing开发人员只用很少的代码就可以利用Swing丰富、灵活的功能和模块化组件来创建优雅的用户界面。
创建图形界面步骤:
(1)导入Swing包
(2)选择界面风格
(3)设置顶层容器
(4)设置按钮和标签
(5)将组件放到容器上
(6)为组件增加边框
(7)处理事件
Swing采用了一种MVC的设计范式,即“模型—视图-控制”,其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。
Swing外观感觉采用可插入的外观感觉.在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。
Swing使得程序在一个平台上运行时能够有不同的外观。
用户可以选择自己习惯的外观.
3需求分析
3。
1目标游戏要求
本游戏适合于休闲游戏,这是一款飞行射击的游戏.游戏程序是一项精度要求很高的程序系统,因此代码利用率很高。
一个实时运行的游戏,每秒都会运行成千上万事件,绘图事件,键盘事件都会以极高的频率在后台等待响应,若有丝毫的差别都将很容易导致程序在运行不久后可能出现严重错误,甚至死循环。
因此,其逻辑设计应当相当严谨,须将所有可能发生的事件及意外情况考虑在设计中。
飞行射击游戏要求有一个可供玩家控制的小飞机,小飞机有一定的生命值,可以发射子弹击毁敌机,躲避敌机发射的子弹,若小飞机被敌机击中,则生命值减少,当生命值为0时,游戏失败,游戏分为两关,每关最后设置一个大的敌机,它拥有更多的生命值,可以发射更多的子弹,若玩家控制小飞机最后击毁敌方的Boss,则游戏胜利。
3。
2系统运行环境
1.运行操作系统WindowsXP或以上
2。
分辨率最佳效果800*600
3.3系统开发工具
1.开发环境Eclipse
2。
开发语言Java
3。
开发环境运行平台WindowsXP(SP3)
3。
4系统的性能要求
1。
保证制作出来的游戏可被顺畅运行
2.要求游戏能快速响应玩家对小飞机的操作
3。
准确无误的显示玩家对小飞机的控制
3.5系统的功能要求
程序运行时应该对玩家是否飞出屏幕的范围进行检测,如果飞出屏幕,就应该重新设定玩家的位置.
根据游戏设定需检测玩家子弹与敌军,敌军子弹与玩家是否碰撞.如果发生碰撞,将小飞机图片替换为爆炸图片.
敌人需要具有一定的智能性(如简单的跟踪功能),以便对玩家攻击,使游戏有一定的可玩性.敌人可以在一定范围内变换位置和开炮,同时应该检测敌军是否飞出了界外。
游戏的画面使用Java中的Graphic类提供的方法,将玩家,敌军以及子弹画出。
4系统概要设计
4。
1设计思路
游戏中应设计至少三种类型的飞机,自己控制的飞机,小型的敌机,和大型敌机(大BOSS),敌机可以发射子弹,玩家可以躲避敌机发射的子弹,并且发射子弹击毁敌方的飞机,三种飞机都设定一定的生命值,若被击中,则生命值减少,当玩家或敌机的生命值为0时,飞机被击毁,游戏设定两关,每关一个大BOSS,BOSS可以发射更多的子弹,并且拥有更多的生命值,并且可以根据主角飞机的位置,发射子弹,从而拥有一定子弹追踪效果.若玩家顺利躲避了小飞机的子弹,并且将BOSS消灭,则玩家胜利通关,若玩家被敌机击毁,则游戏结束。
考虑本游戏是单机小游戏,所以充分的考虑它的娱乐性,没有增加复杂的功能。
4.2各个模块以及功能
显示模块:
将游戏过程中的全部内容显示在屏幕上,包括对玩家输入的控制信息,经过后台处理后,通过显示模块显示出来。
控制模块:
通过对玩家输入的操作信息的判别,在将数据传输到数据处理模块。
数据处理模块:
控制模块传来的数据经过数据处理后,将数据传输到显示模块.
数据存储模块:
保存每个关卡中敌机的个数,以及几种不同的小飞机出现的次序的信息。
游戏的功能模块如图1所示:
图1游戏功能模块图
5系统详细设计
5.1相关算法
5.1。
1碰撞检测算法
在飞行射击游戏中,碰撞是最关键的技术,如果不能很好的解决,会影响玩游戏的娱乐性。
因为飞行射击游戏就是碰撞的游戏-—躲避敌人的子弹或飞机,同时用自己的子弹去碰撞敌人.判断圆形物体只要两个物体的中心点距离小于它们的半径之和就可以了。
但我们要碰撞的物体是圆形子弹和方形的飞机,就需要一种精确的检测方法。
例如,半径检测法,三维中的标准平台方程法,边界框法等等。
我们采用边界框法,边界框是在编程中加进去的不可见的边界。
边界框法,顾名思义,就是用边界框来检测物体是否发生了碰撞,如果两个物体的边界框相互干扰,则发生了碰撞。
用什么样的边界框要视不同情况而定,用最近似的几何形状。
当然,可以用物体的准确几何形状作边界框,在飞行射击游戏中,我们可以用矩形作近似的边界框.现在我们假设飞机是一个正方形,我的飞机是正着的、向上飞的正方形,敌人的子弹是迎面飞来的,圆形的,且飞机不会旋转(大部分游戏中都是这样的).我们可以这样定义飞机:
中心点O(X1,Y1),四个顶点P0(X3,Y3)、P1(X4,Y4)、P2(X5,Y5)、P3(X6,Y6)。
中心点为正方形的中心点,即中心点到四个顶点的距离相等。
我们把正方形放到极坐标平面中,中心点为原点,水平线即X轴为零度角。
正方形成了如图2的所示:
在每个角度我们都可以找到一个距离,用以描述正方形的边。
既然我们找到了边到中心点的距离,那就可以用这个距离来检测碰撞。
假设,正方形和圆中心点坐标分别为(X1,Y1)和(X2,Y2),由这两个点的坐标求出两点的距离L1及两点连线和X轴的夹角θ,再由θ求出中心点连线与正方形边的交点加圆半径L2,用这两个距离比较,从而判断正方形和圆是否碰撞.若L1>L2,则没有碰撞,若L1〈=L2,则碰撞。
如图3所示:
子弹坐标:
X2,Y2
a
小飞机中心坐标:
X1,Y1
图2子弹与小飞机位置关系图
5.1。
2子弹跟踪算法
本游戏使用的子弹追踪算法是根据子弹和飞机的中心位置的连线,判断子弹的飞行路径。
即,在子弹初始化时和飞机此时的位置中心之间画一条直线,子弹就跟据这条直线飞行,从而实现简单子弹追踪效果,如图4所示:
两图形中心连线为L1
子弹的中心坐标:
(X2,Y2)
小飞机的中心坐标:
(X1,Y1)
图3子弹与小飞机碰撞图
Y轴
子弹
X轴
飞机
图4子弹追踪小飞机示意图
5.2模块设计
显示模块:
(1)初始化游戏开始界面,在主界面上显示游戏开始提示。
(2)游戏开始后,通过玩家类(playA类)创建一个玩家控制的小飞机显示出来,并在数据存
储模块中通过创建敌机类(enemy类)的实例加载关卡中的敌方飞机。
(3)玩家通过控制键,控制小飞机的移动和发射炮弹,通过数据处理模块得到飞机的移动信
息,通过显示模块显示出来飞机的移动和发射的炮弹。
(4)游戏结束,显示游戏胜利或失败.
数据处理模块:
(1)数据处理分为两个部分,分别是处理每关中敌方飞机行为,和处理玩家控制小飞机的行
为.
(2)两个部分分别用多个线程实现,游戏开始后,两个线程分别启动。
(3)控制敌方飞机的部分开始后,从关卡类(stage类)中,将敌机按顺序创建,敌机有三种
不同的类型,拥有不同的飞行行为(即不同的飞行路径),但发射的子弹是相同的。
(4)控制玩家飞机的部分开始后,这部分设置了键盘监听事件,当玩家按W,S,A,D,Z
时,飞机作出相应的动作。
发射炮弹或左右移动,当子弹击中敌机时,敌机生命值减少,
当生命值为0时,敌机图片换成爆炸图片。
同样,当敌方飞机的子弹击中玩家控制飞机时,
玩家的小飞机生命值减少,若生命值为0,则游戏失败,结束游戏.
(5)游戏最后,出现游戏的大BOSS,大BOSS拥有更多的生命值,可以发射更多的子弹,并
且子弹具有简单的追踪效果。
控制模块:
控制模块提供了玩家对小飞机的操作接口,玩家通过键盘可以操作小飞机上下左右移动发射
子弹.
数据存储模块:
数据存储模块主要存储每关中敌机出现的时间,飞机类型,出现位置,和发射子弹频率。
5.3游戏详细流程图
N
Y
图5游戏流程图
6系统演示
游戏开始界面如图7。
1所示,在该游戏中,主要在一个JPanel中显示游戏过程。
玩家控制小飞机躲避敌人子弹,并且消灭敌人。
玩家有一定的生命值,被子弹击中,则减少一定的生命值,若生命值为0,则游戏失败,若玩家消灭了大BOSS则游戏胜利.
图6游戏开始界面
敲击ENTER键就开始游戏,游戏中用W,S,A,D对小飞机进行控制移动,如图7.2所示,按Z键控制小飞机发射炮弹击毁敌方飞机,敌方飞机有三种,各自有不同的动作(即表现形式)
图7进行游戏中的界面
消灭完所有的敌方小飞机后,或者在规定时间后,没有被敌方小飞机消灭,仍然存活,则出现个大BOSS,大BOSS拥有更多的生命值,可以发射更多的子弹,子弹类型有两种,一种是规则的向四面八方发射的子弹,另一种是拥有一定的跟踪效果的子弹,如图7。
3所示.
图8游戏中对战大BOSS的界面
7结束语
经过一学期的毕业设计,并且在老师的悉心指导下,我基本上完成了飞行射击类游戏的设计与实现,在设计期间,我查阅了大量的关于javaGraphics2D和javaswing等想关的书籍,对java语言有了更进一步的认识,同时对面向对象语言有了更加深刻的认识,在编写程序时运用了平时课堂上学到的知识,对软件工程等有了更加深刻的理解,也让我学会了动画效果的展现,虽然实际效果欠佳。
游戏有许多不足的地方,首先界面不是很美观,再者飞机的类型和弹药的类型都不太丰富,游戏运行起来不是很流畅,流畅性不好,在判断子弹击中飞机的时候精度不是很高,由于时间有限,游戏只有一关,boss死了游戏就结束了,情节不是很丰富,想必对玩家的吸引力不够。
本次游戏的设计与实现让我们进一步熟练了一下已学的知识,课堂上所学的内容在游戏中都得到了体现,也让我在以后的学习中更加坚定成为一名好程序员。
8致谢
在论文完成之际,首先感谢我的父母多年来对我学业的理解与支持;其次我真诚感谢大学期间在学习和生活上给我启迪和鼓励的所有师长和朋友,这四年中正因为与你们的默契相处才促使我不断进步逐渐成熟,同时使我的生活充实而快乐,在此我感谢您们。
尤其要感谢我的指导老师翟岩慧老师,从最初收集资料、研究资料到系统的逐渐实现,直至论文的最终完成,这其中每一个阶段都倾注着翟老师的心血和汗水。
没有他严格尽心的指导和细致入微的帮助,就没有本文的顺利完成,在此致以真诚的谢意。
参考文献:
[1]克里夫特。
JAVA游戏高级编程:
清华大学出版社.2005。
109
[2]张桂珠.JAVA面向对象程序设计:
北京邮电大学出版社.2007.21
[3]郎波。
JAVA语言程序设计:
清华大学出版社。
2005.45
[4]翁恺,肖少拥。
Java语言程序设计教程:
浙江大学出版社。
2007。
67
[5]吴玺玺。
游戏设计入门。
重庆大学出版社:
2005.210
[6]胡书敏.Servlet与JSP核心编程:
清华大学出版社。
2007。
98
[7]董小园.JAVA面向对象程序设计:
清华大学出版社。
2001。
34
[8]CayS。
HorstannGaryCornell:
JAVA核心技术.2008.116
[9]李尊朝.JAVA语言程序设计:
中国铁道出版社.2004.73
[10]袁海燕。
JAVA应用程序设计100例:
人民邮电出版社。
2005.39
[11]ErnestAdamsAndrewRollings.FUNDAMENTALSOFGAMEDESIGN:
机械工业出版社。
2009.54
DesignandImplementationofaFlyandShotGame
StudentLiuQuan
TutorZhaiYanhui
Abstract:
Thisarticlefocusesonaflyandshotgame’sdesignandimplementation。
ThegameisbasedontheJavalanguage,usingtheGraphics2DandThreadtechnology,AWT/Swingdevelopment.It’smainfunctionisthataplanecanflyandhidetheenemyplane’sshotandthatplanecanshottodestroyenemyplane。
Keywords:
javaswingGraphics2DThreadFlyandShot