坦克大战--Java课程设计【值得参考】

上传人:飞*** 文档编号:3575929 上传时间:2017-08-08 格式:DOC 页数:58 大小:1.95MB
返回 下载 相关 举报
坦克大战--Java课程设计【值得参考】 _第1页
第1页 / 共58页
坦克大战--Java课程设计【值得参考】 _第2页
第2页 / 共58页
坦克大战--Java课程设计【值得参考】 _第3页
第3页 / 共58页
坦克大战--Java课程设计【值得参考】 _第4页
第4页 / 共58页
坦克大战--Java课程设计【值得参考】 _第5页
第5页 / 共58页
点击查看更多>>
资源描述

《坦克大战--Java课程设计【值得参考】 》由会员分享,可在线阅读,更多相关《坦克大战--Java课程设计【值得参考】 (58页珍藏版)》请在金锄头文库上搜索。

1、 面向对象程序设计课程设计报告题 目: 坦克大战软件设计与实现 院 (系): 信息科学与工程学院 专业班级: 计算机科学与技术 1201 班 学生姓名: 程伟 学 号: 20121183011 指导教师: 吴奕 20 14 年 12 月 29 日至 20 15 年 1 月 9 日I华中科技大学武昌分校制II面向对象程序设计 课程设计任务书一、设计(调查报告/论文)题目坦克大战软件设计与实现二、设计(调查报告/论文)主要内容内容:在这个游戏中使用 Java GUI 中的 AWT 包实现一个坦克大战游戏程序,具有游戏的主窗口,能够实现该游戏的基本功能包括坦克的四处移动,打击敌人,模拟爆炸,产生障碍

2、,增加生命,存在地图障碍物等。基本功能与要求:1 游戏要有图形用户界面,界面能够反映游戏所有的细节。2 界面中要有坦克,墙,树林,河流。3 界面中要有一个“家”,“家”被攻击中则输了游戏。4 坦克分两种,敌方和我方。5 墙也分为两种,可以穿透的普通墙,不可以穿透的铁墙。6 树和河流均只有一种,树林坦克可以通过。7 坦克可以发射子弹,敌我方的子弹属性一样。8 我方子弹可以杀死敌方坦克,敌方子弹也可以杀死我方坦克,但需要多枪子弹才可以杀死。9 敌方之间不可以杀死对方。10 子弹击中坦克要有爆炸,但击中墙不能爆炸。11 我方可以吃血包增加生命。游戏可以暂停,重新开始,游戏帮助等功能。三、原始资料1.

3、面向对象程序设计课程设计指导书2. 耿祥义JAVA 大学实用教程北京:清华大学出版社,2009III四、要求的设计(调查/论文)成果1.课程设计报告2.课程设计软件五、进程安排布置任务,查找资料、需求分析 1 天总体设计 1 天详细设计 1.5 天编制源程序实现 3.5 天测试与修改 1 天撰写课设报告 2 天六、主要参考资料1 张广彬. Java 课程设计案例精编(第二版).北京:清华大学出版社, 2011. 2 耿祥义. Java 课程设计(第二版).北京:清华大学出版社, 2008.3 耿祥义JAVA 大学实用教程北京:清华大学出版社,20094 邹林达陈国君 Java2 程序设计基础北

4、京:清华大学出版社,20105 邹林达Java2 程序设计基础实验指导北京:清华大学,2010IV指导教师(签名):20 年 月 日目录1 需求与总体设计.11.1 需求分析.11.2 总体设计.21.2.1 总体设计功能图.21.2.2 总体设计流程图.21.3 类图.32 详细设计 .42.1 详细设计思路.42.2 类图详细说明.72.3 详细设计流程图.153 编码实现 .164 系统测试 .674.1 菜单项测试.674.2 游戏信息测试:.69总 结 .77V1 需求与总体设计1.1 需求分析1. 设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的

5、操作,具有人机交互功能。用户可以选择重新开始游戏,退出游戏,暂停游戏和查找游戏帮助。2. 界面中包含坦克,树,河流,阻挡墙和游戏用户所要保护的“家” 。3. 坦克:坦克分为两种,敌方坦克和用户控制的坦克。用户方和敌方坦克均可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏边界时要改变方向,而不能一直顶着障碍物不放。坦克之间不能穿越,碰撞到后自动调换方向。4. 树:界面中要包括树林,作为遮掩物体和修饰物体,以便增加游戏的元素,使得游戏更加贴切人性化。树的数目不限,以游戏整体界面清晰美观来决定数目。5. 河流:界面中要包括河流,河流作用与树林相同,同样河流的数目不限,以游戏界面整

6、体美观度来决定数目。6. 墙:墙体分为两种,普通的墙和铁墙,普通的墙在受到子弹袭击时会损坏,而铁墙可以阻碍子弹的穿越。两方的坦克均不能穿越两种墙体,但都可以摧毁普通墙体。普通墙体的数目配合其他元素合理安排,铁墙则不宜过多,不然游戏难度太低甚至因为坦克不能穿越铁墙而使得游戏无法进行下去。7. “家”:用户方除了有一辆自己的坦克外还有一个要保护的家,家由普通墙体包围,家受到子弹攻击后游戏立即结束,用户方则输了本局游戏。8. 子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线移动,直到碰到障碍物就消失,子弹可以穿越树林和河流。敌方坦克受到一颗子弹攻击会爆炸从而导致死亡,死亡后坦克消失。用户方

7、受到子弹攻击后会减少寿命,且受到四次攻击则死2亡,此时如还有敌方坦克存在,则用户方输掉本次游戏。9. 爆炸:当子弹射击到坦克身上时,要产生爆炸效果。10. 方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向从属于坦克的方向。1.2 总体设计1.2.1 总体设计功能图3主界面菜单栏 墙体 家河流 子弹 爆炸树林我方坦克敌方坦克血包普通墙金属墙1.2.2 总体设计流程图4开始初始化坦克及血量我方坦克由键盘控制 , 敌方坦克由已编写代码随机移动发射炮弹不处理产生爆炸碰撞检测判断胜负血量减少或爆炸敌方坦克击中我方坦克我方坦克击中敌方坦克敌方坦克击中敌方坦克开始新游戏 、 暂停 、 继续

8、、 退出结束1.3 类图52 详细设计2.1 详细设计思路1. 图形用户界面图形用户界面要用到 Java 课程里的第 10 章的知识,需要用到抽象窗口工具集即AWT 和 Swing 来设计实现,由于游戏需要有功能按键来控制游戏的重新开始,退出,暂停,帮助等,所以在实现过程中,设计菜单项。 坦克,河流,树,家,墙等都是调用各自类里面的 draw 函数来画出来,最后 new一个图形面板出来,把所有的元素都 add 进面板就可以了。界面的构造在程序中由TankClient 类的构造方法来完成,即没构造一个用户类都会产生这样一个包含各种游戏元素在内的界面。由于画面是静止的,而我们游戏的画面要求是动态的

9、,游戏中的坦克和子弹都是在不断的动,可穿透的普通墙体也在“动” ,所以对于画面,必须要不断的更新,重画才能产生动态的效果。在程序中,此部分功能也是由 TankClient 类里的 update 函数和 framPaint 函数共同实现,将“动”的元素进行重画,而不动的元素如菜单项就不用重画,所以这也是为什么把菜单项设计进 TankClient 类的构造方法中。当然,图形用户界面中也包括对各种界面元素的大小,位置和颜色等设计,细节问题这里就不赘述。2. 界面中的元素界面中的元素都是在构造界面的时候用界面实例对象的 add 方法加入进去的,且“动”的元素要不断更新重画。3. 坦克坦克主要由 Tan

10、k 类来实现。坦克的属性:速度(有 X 轴和 Y 轴速度之分) ,坦克大小,坦克所在新的位置(X 坐标和 Y 坐标) ,坦克是否还活着,行动方向等。所有的这些属性都有一个初始化值,从而在游戏一开始就可以运行。在设计过程中,坦克出现的位置由坐标而定。用户方之后的位置由键盘监听方向,按指定方向以恒定的速度前进此速度为全局静态变量,当没有接受到键盘的控制时,则保持静止。敌方的坦克则是根据随机数来控制随机的方向和路径的,当敌方坦克撞到阻碍物时,会转回到前一步的位置,从而解决了坦克撞到阻碍物不回头的问题,这个功能由 Tank 类里的 changToOldDir()方法实现。坦克的方向和子弹发射以及游戏的

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

12、必须要有一个方法来判断当坦克接触到红心时,生命值增加的方法。程序中用 eat()方法来实现“吃”红心并且增加生命值,当然,这其中要使得坦克的生命值不会超过自己生命的极限值 200,所以判断的时候,当生命小于等于 100 时,直接加 100 生命值,但是当生命值大于 100 时,就只能使生命值加满到极限值 200.当然,说到生命值,一定要在图形用户界面中显示出来,所以在 Tank 类里面一定要设计一个方法,来画出生命的增减过程,在 Tank 类里面是用 DrawBloodbBar()来刻画。4. 树林树林主要是用来做修饰物体的,具有不透明性。由一个 Tree 类来描述,Tree 有两个属性,位置和长宽。树的类里有一个自己的构造方法,当然还有一个必不可少的draw()方法。5. 河流河流的作用与树林类似,这里不再赘述。6. 墙体墙体分为普通墙和铁墙。普通墙可以被子弹损坏,而铁墙则不会。 普通墙普通墙有以下几个属性:墙的固定长度和宽度,墙的位置坐标,墙体是由图片加入到图形用户界面来表示的。程序中用 CommonWall 类来描述普通墙,此类里有一个构造方法,用于传递参数,还有一个 draw()方法,来画指定位置的墙,另外还有个getRect()方法来构造长方形实例。 金属墙金属墙的参数和普通墙完全类似,只不过金属墙不能被子弹穿破,但这个属性在接下来讨论的

展开阅读全文
相关资源
相关搜索

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

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