JAVA语言写的坦克大战详细说明手册

上传人:cn****1 文档编号:467300083 上传时间:2024-01-06 格式:DOCX 页数:30 大小:174.02KB
返回 下载 相关 举报
JAVA语言写的坦克大战详细说明手册_第1页
第1页 / 共30页
JAVA语言写的坦克大战详细说明手册_第2页
第2页 / 共30页
JAVA语言写的坦克大战详细说明手册_第3页
第3页 / 共30页
JAVA语言写的坦克大战详细说明手册_第4页
第4页 / 共30页
JAVA语言写的坦克大战详细说明手册_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《JAVA语言写的坦克大战详细说明手册》由会员分享,可在线阅读,更多相关《JAVA语言写的坦克大战详细说明手册(30页珍藏版)》请在金锄头文库上搜索。

1、精心整理陕西国防学院?Java语言?课程期末实训题目坦克大战学院电子信息学院专业软件技术I y班别软件3132班学号 3531323X姓名小智2021年3月6日一、课程题目 f K?坦克大战Java版本实现一个java版本的坦克大战游戏【功能提示】1. 游戏要有图形用户界面,界面能够反映游戏所有的细节.2. 界面中要有坦克,墙,树林,河流.3. 界面中要有一个“家,“家被攻击中那么输了游戏.4. 坦克分两种,敌方和我方.5. 墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙.6. 树和河流均只有一种,树林坦克可以通过.7. 坦克可以发射子弹,敌我方的子弹属性一样.8. 我方子弹可以杀死敌方坦克

2、,敌方子弹也可以杀死我方坦克,但需要多枪子 弹才可以杀死.9. 敌方之间不可以杀死对方.10. 子弹击中坦克要有爆炸,但击中墙不能爆炸.11. 我方可以吃血包增加生命.12. 游戏可以暂停,重新开始,游戏帮助等功能.具体如下列图:二、题目分析与设计需求分析1. 设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表 现出来,界面能够接受用户的操作,具有人机交互功能.用户可以 选择重新开始游戏,退出游戏,暂停游戏和查找游戏帮助.丿I :严.三也J J2. 界面中包含坦克,树,河流,阻挡墙和游戏用户所要保护的“家 I3. 坦克:坦克分为两种,敌方坦克和用户限制的坦克.用户方和敌方 坦克均可以发

3、射子弹,可以改变路径的行走,且在行走过程中遇到 墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放. 坦克之间不能穿越,碰撞到后自动调换方向.4. 树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的 元素,使得游戏更加贴切人性化.树的数目不限,以游戏整体界面 清楚美观来决定数目.5. 河流:界面中要包括河流,河流作用与树林相同,同样河流的数目 不限,以游戏界面整体美观度来决定数目.6. 墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时 会损坏,而铁墙可以阻碍子弹的穿越.两方的坦克均不能穿越两种 墙体,但都可以摧毁普通墙体.普通墙体的数目配合其他元素合理 安排,铁墙那

4、么不宜过多,不然游戏难度太低甚至由于坦克不能穿越 铁墙而使得游戏无法进行下去.7. “家用户方除了有一辆自己的坦克外还有一个要保护的家,家由 普通墙体包围,家受到子弹攻击后游戏立即结束,用户方那么输了本 局游戏.8. 子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线 移动,直到碰到障碍物就消失,子弹可以穿越树林和河流.敌方坦 克受到一颗子弹攻击会爆炸从而导致死亡,死亡后坦克消失.用户 方受到子弹攻击后会减少寿命,且受到四次攻击那么死亡,此时如还 有敌方坦克存在,那么用户方输掉本次游戏.9. 爆炸:当子弹射击到坦克身上时,要产生爆炸效果.10. 方向:坦克和子弹都有方向,可以选择上下左

5、右四个方向,且子弹 的方向附属于坦克的方向. i 匚p- I具体设计以下的论述均根据上面需求分析的顺序来安排:1. 图形用户界面图形用户界面要用到Java课程里的第六章的知识,需要用到抽象窗 口工具集即AWT和Swing来设计实现,由于游戏需要有功能按键来控 制游戏的重新开始,退出,暂停,帮助等,所以在实现过程中,设计菜 单项.坦克,河流,树,家,墙等都是调用各自类里面的draw函数来画出来,最后new个图形面板出来,把所有的元素都add进面板就可以了. 界面的构造在程序中由Ta nkClie nt类的构造方法来完成,即没构造一个 用户类都会产生这样一个包含各种游戏元素在内的界面.由于画面是静

6、 止的,而我们游戏的画面要求是动态的,游戏中的坦克和子弹都是在不 断的动,可穿透的普通墙体也在“动,所以对于画面,必须要不断的更 新,重画才能产生动态的效果.在程序中,此局部功能也是由 TankClient类里的update函数和 framPai nt函数共同实现,将“动的元素进行重画,而不动的元素如菜 单项就不用重画,所以这也是为什么把菜单项设计进Tan kClie nt类的构造方法中.当然,图形用户界面中也包括对各种界面元素的大小,位置I,和颜色等设计,细节问题这里就不赘述. 尹 ,J / I 严/ |, l J2. 界面中的元素界面中的元素都是在构造界面的时候用界面实例对象的add方法参

7、加进去的,且“动的元素要不断更新重画.3. 坦克7坦克主要由Tank类来实现.坦克的属性:速度有 X轴和丫轴速 度之分,坦克大小,坦克所在新的位置X坐标和丫坐标,坦克是否 还活着,行动方向等.所有的这些属性都有一个初始化值,从而在游戏 一开始就可以运行.在设计过程中,坦克出现的位置由坐标而定.用户方之后的位置由 键盘监听方向,按指定方向以恒定的速度前进 此速度为全局静态变 量,当没有接受到键盘的限制时,那么保持静止.敌方的坦克那么是根据随 机数来限制随机的方向和路径的,当敌方坦克撞到阻碍物时,会转回到 前一步的位置,从而解决了坦克撞到阻碍物不回头的问题,这个功能由 Tank类里的changTo

8、OldDir 方法实现.坦克的方向和子弹发射以及游戏的重新开始都是由键盘来限制的, 所以在Tank类里面必须要实现这些功能.Tank类的keyPressed(方法用于接受键盘的按键监听,接收到相应的 键盘信息后,如接收到F,贝憔示发射子弹,所以此时要调用 Tank类里 的fire()方法,fire()方法不带传递参数,由于子弹的方向总是附属于坦克 的方向和位置.由于坦克在碰到墙,界面边界和“家等阻碍物时要改变方向,所 以在Tank里面必须对于每一种阻碍物要设计一个方法来作为应对策略, 当然解决方法是把下一步的位置调整到上一步的位置.用户方Tank还可以吃红心来增加自己的生命值,得到一个红心,增

9、加100生命值.所以在程序中坦克必须要有一个方法来判断当坦克接触 到红心时,生命值增加的方法.程序中用eat()方法来实现“吃红心并且增加生命值,当然,这其中要使得坦克的生命值不会超过自己生命的 极限值200,所以判断的时候,当生命小于等于 100时,直接加100生 命值,但是当生命值大于100时,就只能使生命值加满到极限值 200当 然,说到生命值,一定要在图形用户界面中显示出来,所以在Tank类里面一定要设计一个方法,来画出生命的增减过程,在Tank类里面是用/j宀 fcZ?X-r .XJ /DrawBloodbBar()来刻画.4. 树林树林主要是用来做修饰物体的,具有不透明性.由一个

10、Tree类来描述,Tree有两个属性,位置和长宽.树的类里有一个自己的构 造方法,当然还有一个必不可少的 draw()方法.5. 河流河流的作用与树林类似,这里不再赘述.6. 墙体墙体分为普通墙和铁墙.普通墙可以被子弹损坏,而铁墙那么不会.普通墙普通墙有以下几个属性:墙的固定长度和宽度,墙的位置 坐标,墙体是由图片参加到图形用户界面来表示的.程序中用 Com monWa类来描述普通墙,此类里有一个构造方法,用于传 递参数,还有一个draw()方法,来画指定位置的墙,另外还有 个getRect()方法来构造长方形实例.金属墙金属墙的参数和普通墙完全类似,只不过金属墙不能被子 弹穿破,但这个属性在

11、接下来讨论的子弹的属性里面,由于上面已经给出里普通墙的属性,所以这里将不再赘述金属墙的属 性了.7. 家:家是由Home类来抽象的,具体的属性有:家的大小,家的位置, 家的存活状态,与树林和河流一样,家还有draw ()和自己的构造方法,作用也和前面的一样,但是家还有一些新的方法,由于可以 在游戏中重新开始游戏,所以要有设置方法让家重新“活起来, 当然,有时候要判断家现在的存活状态,所以就必须要isLive()和setLive()两个方法了.除此之外,还要有一个游戏结束界面的清理 工作和提示工作,gameover()方法就是解决这个问题的.8. 子弹:子弹的属性:子弹前进的X轴和丫轴的速度一一

12、初始速度都为 10,子弹的长度和宽度一一初始的长宽都为10,子弹的位置,子弹的方向,子弹是否live等.由于不同方向的子弹其实是图片,所以 这里要考虑不同图片的选择用对应的方向来指定,所以要建立Map键值对,用String属性的方向来指定不同的图片.如:imgs.put(L, bulletimages 0);类里面惯例有个构造方法,用来默认传递位置和方向,当然这 里用到了同构,另外一个构造函数来取得子弹的状态和界面.darw() 方法和move()方法来限制画子弹和移动子弹接下来就是要考虑到子弹打到个=各元素上的反响,敌方的子弹 打到敌方时,不会杀死自己人,所以这里只要直接 returntru

13、e 就可 以了,不用移除子弹碰到的坦克,更不用调用爆炸来显示爆炸效果.具体代码:publicboolea nhitTa nks(Listta nks)/当子弹打到坦克时for ( int i=0;itanks.size();i+)if (hitTank(tanks.get(i)/ 对每一个坦克,调用 hitTankretur ntrue ;returnfalse ;子弹打到其他坦克上时用hitTa nk(Ta nkt)方法,子弹打到墙上时用hitWall(CommonWallw)方法,打到金属墙上hitWall(MetalWallw),打到家hitHome(),当然在这些方法里,都要作相应的操

14、作来表示接受到子弹的后果,普通墙要移除对应的位置,所以在方法里面又要调用remove()方法来移除,如打到家上,就要吧home的生命设置为false,从而结束游戏.实现如下:publicbooleanhitHome() / 当子弹打到家时if (this.live&this.getRect().i ntersects(tc . home .getRect()this.live= false ;this.tc .home .setLive(false ); /当家接受一枪时就死亡retur ntrue;returnfalse ;还有,当子弹射击到对方(用户方对敌方)时,当敌方射击到用户方,用户方

15、要减少生命值,没接受一枪,就执行t.setLife(t.getLife()-50);受一粒子弹寿命减少50 ,接受4枪就死,总生命值200,当然方法里面还要做其他很多的判断,如生命值是否小于0,如果是的话就执行t.setLive( false );从而 结束游戏.9. 爆炸:坦克的爆炸效果独立出来用一个类来描述,爆炸的属性:位置和存活 状态,另外,画爆炸效果的时候要取得用户界面限制,所以要定义 privatestatic Toolkit tk=Toolkit. getDefaultToolkit ();其他的方 法只能的大同小异.I -., . I .10. 菜单功能菜单功能包括游戏的重新开始,暂停,退出等.这些功能的用户界面 放在了 TankClient的构造方法里,用到的是面板类和相应的监听功Z- X 、; ; I/ / X X L能,实现出来很简单.类的

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号