JAVA塔防游戏.docx

上传人:b****2 文档编号:1062770 上传时间:2023-04-30 格式:DOCX 页数:20 大小:3.51MB
下载 相关 举报
JAVA塔防游戏.docx_第1页
第1页 / 共20页
JAVA塔防游戏.docx_第2页
第2页 / 共20页
JAVA塔防游戏.docx_第3页
第3页 / 共20页
JAVA塔防游戏.docx_第4页
第4页 / 共20页
JAVA塔防游戏.docx_第5页
第5页 / 共20页
JAVA塔防游戏.docx_第6页
第6页 / 共20页
JAVA塔防游戏.docx_第7页
第7页 / 共20页
JAVA塔防游戏.docx_第8页
第8页 / 共20页
JAVA塔防游戏.docx_第9页
第9页 / 共20页
JAVA塔防游戏.docx_第10页
第10页 / 共20页
JAVA塔防游戏.docx_第11页
第11页 / 共20页
JAVA塔防游戏.docx_第12页
第12页 / 共20页
JAVA塔防游戏.docx_第13页
第13页 / 共20页
JAVA塔防游戏.docx_第14页
第14页 / 共20页
JAVA塔防游戏.docx_第15页
第15页 / 共20页
JAVA塔防游戏.docx_第16页
第16页 / 共20页
JAVA塔防游戏.docx_第17页
第17页 / 共20页
JAVA塔防游戏.docx_第18页
第18页 / 共20页
JAVA塔防游戏.docx_第19页
第19页 / 共20页
JAVA塔防游戏.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

JAVA塔防游戏.docx

《JAVA塔防游戏.docx》由会员分享,可在线阅读,更多相关《JAVA塔防游戏.docx(20页珍藏版)》请在冰点文库上搜索。

JAVA塔防游戏.docx

JAVA塔防游戏

《Java语言》课程期末作业

 

题目自选题:

一个塔防游戏

学院计算机学

专业网络工程

班别09级

(2)班

学号3109006536

姓名罗晓然

2010年12月1日

一、课程题目

自拟题目:

设计一个塔防游戏,需完成塔防类游戏的基本功能。

实现能更换地图,任意定制进攻怪兽外观、属性参数,实现根据二进制描述的地图自动寻找进攻路径,实现金钱、积分、时间计算系统,实现包括单体快速攻击的机枪塔、群体攻击的炸弹塔、减速塔、发射自动跟踪导弹的导弹塔、远距离攻击的狙击塔、群体攻击的射线塔以及激光塔等在内的建筑系统。

二、题目分析与设计

1.开发环境:

Eclipse+JDK7/OpenJDK6在Windows7/Windows8/Ubuntu10.10下开发、测试通过;

2.设计概要:

如上图,对于一个塔防游戏而言,处理怪物属性、行走路径、炮塔的种类、攻击范围以及对象是要点,为了便于更换地图,把地图的数据结构定义为:

地图{

地图图片资源;

描述地图的整数型二维数组;

出发点坐标;

结束点坐标

};

地图资源主要用PS绘制,此外,为便于生成二维数组,设计如下的地图编辑器:

上述编辑器功能为通过标记加载的地图图片生成二维数组;

对于建筑,由于各种建筑的实现方法不同,考虑到处理的方便性,首先定义一个building类,使各个建筑分别继承building类,building类描述有所有建筑都需要的公共属性及方法诸如所在坐标、时间片、攻击动作、范围计算等;

对于怪兽,怪兽之间的差别只有生命值、外观、移动速度、防御力、攻击力、杀死奖励等,因而不需要构建多个类,所有怪物可共用一个AMonster类;

对于子弹、激光束、导弹等光影效果,由于各自之间相差甚远,故分别采用不同的类实现;

为了实现界面,定义了地图面板类、信息面板类、菜单面板类、读取提示面板类等;

此外,对于图片资源的管理及读取,定义了一个Resources类以统管;

为了协调绘制事件与游戏内部事件等,设定了一个管理所有对象及游戏状态的Consts类;

最后,还有建立游戏例程的test类;

3.界面设计:

菜单界面设计如下:

此界面实现进入地图选择界面以及退出程序功能,此外,游戏过程中选择退出也是返回到本界面;

地图选择界面如下:

目前只有两幅地图,右侧三个按键中上方两个设计用于地图多于两幅时选择下一页的地图,第三个按键功能为返回上级菜单,当鼠标移动到地图选单上方出现地图地形及相关描述、点击提示,如下图:

点击关卡后进入读取状态界面,然后进入游戏界面:

如上图。

游戏界面中下方为信息显示、控制面板,布局思想参考了包括防御阵营、哨兵等众多塔防游戏,左下方为建筑选择面板,当现有金钱大于等于该建筑时允许选取,图中光标为跟随光标、紧贴网格的提示光标,当鼠标移动到路面或不可建筑地区时为红色、移动到建筑上方时为蓝色、移动到其他地区上方时为绿色;

当选取建筑后,光标中将出现所选取的建筑,如下图:

在地图上允许建筑位置点击鼠标左键可建立所选建筑,点击鼠标右键取消操作;

每种建筑均有不同的杀伤效果以及效果外观,当点选已有建筑时,显示建筑的作用范围以及属性、升级选项,如下图:

在此界面可选择出售建筑或者升级建筑,左上角数值为出售建筑可得金钱,右上角为建筑升级费用,下方左右两个数值分别为当前杀伤力以及升级后的杀伤力,建筑升级将获得不同的外观,同时,本界面中以一个旋转的扫描状圆形描述作用范围;

此时点击图中其他地方或者点击鼠标右键可关闭此属性界面;

上图为信息面板右半部分,左侧黄色箭头为快进功能键,点击一次将使游戏速度更改为2倍速并绘制

,再次点击将更改速度为4倍速并绘制

,此时再次点击将恢复原图样及速度。

快进键右侧为暂停功能,点击后,游戏将暂停并绘制如下提示选单:

此选单中可选择结束本次游戏、重新开始本局功能;

此外,本游戏设定为暂停过程中可对建筑进行建设、出售、升级操作;

杀死怪兽可获得金钱及积分奖励,金钱可用于购买、升级防御塔,此外每一波怪兽死亡后可获得5%的金钱奖励,而每当有怪兽成功通过所有路程到达目的地,玩家将会被扣除一定生命值,此生命值的显示方式为游戏窗口上方随生命值减少而降落的血幕,此幕会影响游戏视野,当此幕降落到屏幕底端时判定为游戏失败:

本游戏设定有类似无级缩放功能,操作方式为滑动鼠标滚轮以及拖动游戏面板实现缩放、移动视域,如下图即为放大视域并拖动到下方时的截图:

下图为怪物、炮塔设定集

 

4.程序逻辑的实现:

概要流程如下:

菜单面板部分流程图如下:

关卡选择面板流程图如下:

关卡对象的流程图如下:

其中,怪物的添加通过调用newWave(怪物数量,怪物速度,怪物HP,怪物防御力,怪物奖励,怪物图片,Consts,相互间隔)实现,而Wave类则通过创建线程按照传入的相互间隔调用Consts的addAM方法创建怪物;

Consts中有成对出现的addAM、delAM、addBD、delBD、addBL、delBL、addMS、delMS……等一系列函数用于创建、删除游戏面板中的怪物、建筑等,其中怪物的管理方法通过Consts中的一个怪物类型数组管理,使用数组管理主要是由于对象创建、删除的频率太高,而屏幕上的怪物是有限的,为了节约内存分配、回收的时间而设置,此外,子弹、导弹等物体也是通过数组管理,而建筑物则通过一个与地图尺寸相等地二维数组管理。

一个Consts被创建后,Consts将读取描述地图的二维数组及出发点、目的地坐标,采用深度优先搜寻法搜索怪物行进路径,以后生成的怪物将沿此路径行走。

游戏界面由MapPanel类及InfoPanel类组成,MapPanel类下有两个实现Runnable接口的子类用于启动两个处理游戏过程的线程,这两个子类分别为用于绘图的pTime及用于处理对象动作的ObjAct类。

其中,pTime线程流程图如下:

绘制各个对象的方法均为遍历对象数组、提取对象图片及图片位置、对象位置、旋转角度进行绘制,每次绘制完毕后睡眠一定时间实现动态画面,睡眠时间设置为50即约每秒20帧绘制,对于本程序而言足够。

以机枪塔为例,绘制子弹、光束等的方法如下:

为了确保机枪能追踪仍在范围内的怪物进行伤害而不至于让机枪塔的旋转过于鬼畜,为机枪塔等可旋转的塔增加了action开始时先判断上一个action操作时的目标是否仍在范围内,在则不遍历怪物数组而直接计算当前角度并进行发射子弹、伤害操作;

绘制旋转的炮塔和导弹则直接转置旋转后绘制,其中建筑方面,每种建筑在不同等级以及准备发射等状态时外观均不一样,如下图:

左起往右分别为四种等级的外观,上而下为不同状态;

而ObjAct类的动作比较简单,就是遍历各个对象并调用各自的action方法,各个action方法用于处理各自的动作如移动、寻找目标、变换状态等,ObjAct建立的线程同样是一个直到本次游戏结束才终止的线程,游戏结束的依据是Consts中的名为end的boolean变量,Consts每遍历完一次所有对象将睡眠一段时间,睡眠时间取决于快进功能是否被启用,快进功能的实现通过设置Consts中的acc整数型变量设定,线程睡眠时间设定为(50/acc),acc默认为1;

其中,怪物的动作流程图如下:

上述流程中,cur_x、cur_y分别为当点怪物的坐标位置,crct_y则表示怪物的图形的左上角y坐标,如下图,y=0,36,72,108分别代表怪右、左、上、下方向移动。

当怪物的HP值小于等于0时,怪物调用Consts中的delAM方法删除自身,删除操作的原理为把怪物的名为deleted的布尔型变量置为真,除了关务,每个对象均有此变量,当此标记为真时无论是绘图操作抑或是ObjAct操作均会在遍历时忽略此对象;

建筑物的动作中,有slice和nice两个整数变量用于控制时间片,每种建筑物的nice值均为预设,建筑物建立时slice值置0,每次action动作slice值加1,当slice==nice时建筑物开始作用并且slice再次置0,建筑物的每次有效动作基本上为遍历怪物数组比对每一个怪物是否在作用范围内,比对通过buildings的inScope函数实现,通过范围比对或范围或单个寻找要作用的怪物对象并调用hurt函数进行伤害或减速,而其中射线塔BeamTower较为特殊,此塔通过发射固定长度的射线实现直线上的范围伤害,如下图:

此效果通过计算射线角度angle,然后遍历每个怪物的中心坐标(x,y)再计算一个标准d_y=x*angle,最后比对|dy-y|是否小于光束宽度判定该怪是否在攻击范围内。

减速塔对怪物的减速效果通过设置的一个布尔型变量和一个整数型变量实现,减速塔每次作用对范围内的怪的整数型变量值增加伤害值的量,而每次绘图操作对该变量减去一定量,当整数型变量的值大于0时布尔型变量为真,反之则为假,当布尔变量值为真时怪物移动速度为正常速度的1/2;

导弹塔需实现具有跟踪目标效果的导弹,因而设定一个missile导弹类,每枚导弹均拥有各自的x轴方向初速度、y轴方向初速度及发射角度,所有导弹塔以特定的角度发射锁定目标的导弹,然后导弹每次action中根据目标当前的位置调整两个方向的速度并按照该速度进行位移及角度调整,以实现追踪效果,如下图:

向四个方向调整速度时每次调整的值不一样,本设定是出于相同调整量会做类卫星的椭圆运动考虑;

导弹塔和炸弹塔的伤害动作均不在自身实现,而是分别通过导弹以及炸弹实现,这是出于发射时和命中时的时间、位置差异考虑,其中炸弹伤害的原理为当状态到达炸开时获取炸开位置坐标并计算爆炸范围、再遍历比对怪物数组中的每一个成员是否在范围内;

本程序目录下res目录内为程序运行所需要的资源文件,包括各个对象的贴图等;

本程序包含的各个类的说明:

类名

说明

AMonster

怪物类,包括怪物的基本方法和属性

beam

激光束类

BeamTower

射线塔类,继承building

bomb

炸弹类

BombFire

火光类

BombTower

炸弹塔类,继承building

building

建筑类

bullet

子弹类

Consts

常用方法、常用变量类

CoverPanel

菜单面板类

GunTower

机枪塔,继承building

InfoPanel

信息、控制面板类

LaserTower

激光塔,继承building

LoadingPanel

显示读取中的提示面板类

MapPanel

地图面板类

missile

导弹类

MissileTower

导弹塔类,继承building

Mission

关卡类

MissionPanel

关卡选择面板类

Resources

资源类,包含Image及Color对象

SlowTower

减速塔类,继承building

SnipTower

狙击塔类,继承building

SpecScope

减速光环类

test

测试类,包含构建窗口等测试环境,主类

Wave

通过调用此类可批量建立一波具有相同属性的怪物

三、测试分析

1、运行程序,进入菜单面板,测试鼠标经过及按下按钮时图案绘制是否正常:

上图:

鼠标经过时绘制正常

上图:

鼠标按下时绘制正常

2、进入关卡选择界面,测试鼠标经过按钮时绘制是否正常、选择关卡后能否正确建立游戏:

上图:

鼠标经过按钮时绘制正常

上图:

正确进入关卡并建立游戏

3、测试鼠标光标跟随、绘制、滚轮缩放、缩放后拖动是否正确:

上图:

绘制不同光标正确实现

上图:

滚轮缩放及拖动正确实现

4、测试建筑对怪物伤害、建筑选中、建筑升级、建筑删除(出售)是否正常:

上图:

伤害功能正常实现

上图:

建筑选取、升级功能正常实现

上图:

建筑出售功能正常实现

5、快进功能正常实现(截图略);

6、玩家HP值操作、游戏失败判断实现,截图见界面设计部分;

7、各类建筑预设想效果实现;

8、暂停、返回、重新开始关卡功能正常实现;

9、稳定性测试:

持续运行318Wave、半小时后无异常抛出:

附录:

源代码

源代码中包含的文件:

1、JAVA源程序:

AMonster.java、beam.java、BeamTower.java、bomb.java、BombFire.java、BombTower.java、building.java、bullet.java、Consts.java、CoverPanel.java、GunTower.java、InfoPanel.java、LaserTower.java、LoadingPanel.java、MapPanel.java、missile.java、MissileTower.java、Mission.java、MissionPanel.java、Resources.java、SlowTower.java、SnipTower.java、SpecScope.java、test.java、Wave.java

2、图片资源:

1024600.png、beam_1.png、beam_2.png、beam_3.png、beam_las.png、blood_sky.png、blt_bar.png、bomb.png、bomb_fire.png、btn_cho.png、btn_cho_h.png、btn_cla.png、btn_cla_h.png、btn_end.png、btn_end_h.png、btn_exit.png、btn_exit_h.png、bullet_1.png、bullet_2.png、bullet_3.png、cursor_ban.png、cursor_blt.png、cursor_nor.png、icon_acc.png、icon_ban.png、icon_cho.png、icon_cho_p.png、icon_pause.png、info_bar.png、loading.png、lose.png、map_01.png、map_02.png、missile_1.png、mission_choose.png、mission_choose_title.png、monster_gm1.png、monster_gm2.png、monster_gm3.png、monster_gm4.png、monster_gtank.png、msc_ms0.png、msc_ms1.png、msc_ms2.png、pause_ask.png、scope.png、slow_scope.png、small_0.png、small_1.png、small_2.png、small_3.png、small_4.png、small_5.png、small_6.png、small_7.png、small_8.png、small_9.png、sold_or_up.png、td_cover.png、tower_beam.png、tower_bomb.png、tower_gun.png、tower_laser.png、tower_missile.png、tower_slow.png、tower_snip.png、wave_cpd.png

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2