1、 Java 语言课程期末作业题 目 自选题:一个塔防游戏 学 院 计算机学 专 业 网络工程 班 别 09 级(2 ) 班 学 号 3109006536 姓 名 罗晓然 2010 年 12 月 1 日罗晓然Java 语言课程期末作业2一、课程题目 自拟题目:设计一个塔防游戏,需完成塔防类游戏的基本功能。实现能更换地图,任意定制进攻怪兽外观、属性参数,实现根据二进制描述的地图自动寻找进攻路径,实现金钱、积分、时间计算系统,实现包括单体快速攻击的机枪塔、群体攻击的炸弹塔、减速塔、发射自动跟踪导弹的导弹塔、远距离攻击的狙击塔、群体攻击的射线塔以及激光塔等在内的建筑系统。二、题目分析与设计 1. 开发
2、环境:Eclipse + JDK7/Open JDK 6 在 Windows 7 / Windows 8 / Ubuntu 10.10 下开发、测试通过;2. 设计概要:罗晓然Java 语言课程期末作业3如上图,对于一个塔防游戏而言,处理怪物属性、行走路径、炮塔的种类、攻击范围以及对象是要点,为了便于更换地图,把地图的数据结构定义为:地图地图图片资源;描述地图的整数型二维数组;出发点坐标;结束点坐标;地图资源主要用 PS 绘制,此外,为便于生成二维数组,设计如下的地图编辑器:上述编辑器功能为通过标记加载的地图图片生成二维数组;对于建筑,由于各种建筑的实现方法不同,考虑到处理的方便性,首先定义一
3、个 building 类,使各个建筑分别继承 building 类,building 类描述有所有建筑都需要的公共属性及方法诸如所在坐标、时间片、攻击动作、范围计算等;对于怪兽,怪兽之间的差别只有生命值、外观、移动速度、防御力、攻击力、杀死奖励等,因而不需要构建多个类,所有怪物可共用一个 AMonster 类;对于子弹、激光束、导弹等光影效果,由于各自之间相差甚远,故分别采用不同的类实现;为了实现界面,定义了地图面板类、信息面板类、菜单面板类、读取提示面板类等;此外,对于图片资源的管理及读取,定义了一个 Resources 类以统管;为了协调绘制事件与游戏内部事件等,设定了一个管理所有对象及游
4、戏状罗晓然Java 语言课程期末作业4态的 Consts 类;最后,还有建立游戏例程的 test 类;3. 界面设计:菜单界面设计如下:此界面实现进入地图选择界面以及退出程序功能,此外,游戏过程中选择退出也是返回到本界面;地图选择界面如下:目前只有两幅地图,右侧三个按键中上方两个设计用于地图多于两幅时选择下一页的地图,第三个按键功能为返回上级菜单,当鼠标移动到地图选单上方出现地图地形及相关描述、点击提示,如下图:罗晓然Java 语言课程期末作业5点击关卡后进入读取状态界面,然后进入游戏界面:如上图。游戏界面中下方为信息显示、控制面板,布局思想参考了包括防御阵营、哨兵等众多塔防游戏,左下方为建筑
5、选择面板,当现有金钱大于等于该建筑时允许选取,图中光标为跟随光标、紧贴网格的提示光标,当鼠标移动到路面或不可建筑地区时为红色、移动到建筑上方时为蓝色、移动到其他地区上方时为绿色;当选取建筑后,光标中将出现所选取的建筑,如下图:在地图上允许建筑位置点击鼠标左键可建立所选建筑,点击鼠标右键取消操作;罗晓然Java 语言课程期末作业6每种建筑均有不同的杀伤效果以及效果外观,当点选已有建筑时,显示建筑的作用范围以及属性、升级选项,如下图:在此界面可选择出售建筑或者升级建筑,左上角数值为出售建筑可得金钱,右上角为建筑升级费用,下方左右两个数值分别为当前杀伤力以及升级后的杀伤力,建筑升级将获得不同的外观,
6、同时,本界面中以一个旋转的扫描状圆形描述作用范围;此时点击图中其他地方或者点击鼠标右键可关闭此属性界面;上图为信息面板右半部分,左侧黄色箭头为快进功能键,点击一次将使游戏速度更改为 2 倍速并绘制 ,再次点击将更改速度为 4 倍速并绘制 ,此时再次点击将恢复原图样及速度。快进键右侧为暂停功能,点击后,游戏将暂停并绘制如下提示选单:罗晓然Java 语言课程期末作业7此选单中可选择结束本次游戏、重新开始本局功能;此外,本游戏设定为暂停过程中可对建筑进行建设、出售、升级操作;杀死怪兽可获得金钱及积分奖励,金钱可用于购买、升级防御塔,此外每一波怪兽死亡后可获得 5%的金钱奖励,而每当有怪兽成功通过所有
7、路程到达目的地,玩家将会被扣除一定生命值,此生命值的显示方式为游戏窗口上方随生命值减少而降落的血幕,此幕会影响游戏视野,当此幕降落到屏幕底端时判定为游戏失败:本游戏设定有类似无级缩放功能,操作方式为滑动鼠标滚轮以及拖动游戏面板实现缩放、移动视域,如下图即为放大视域并拖动到下方时的截图:罗晓然Java 语言课程期末作业8下图为怪物、炮塔设定集4. 程序逻辑的实现:概要流程如下:罗晓然Java 语言课程期末作业9、菜单面板部分流程图如下:、Center、JPanel、CoverPanel、Center、MouseListener、MouseMotionListener、 、onHover、onPr
8、ess、onHover、onPress、onHover、onPress、mouseMovedmousePressedmouseClicked、关卡选择面板流程图如下:罗晓然Java 语言课程期末作业10、Center、JPanel、MissionPanel、Center、MouseListener、MouseMotionListener、 、onHover、onPress、onHover、onPress、mouseMovedmousePressedmouseClicked、 、 、(new Mission()关卡对象的流程图如下:、(new Resources()、Consts、Consts、MapPanel、InfoPanelMission、Mission、new Wave()、YESNO其中,怪物的添加通过调用 new Wave(怪物数量,怪物速度,怪物 HP,怪物防御力,怪物奖励,怪物图片,Consts,相互间隔)实现,而 Wave 类则通