《JAVA版坦克大战.doc》由会员分享,可在线阅读,更多相关《JAVA版坦克大战.doc(41页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、 毕业设计(论文)题目:JAVA版坦克大战 2014 年 11 月 20 日 JAVA版坦克大战摘要 J2SE(Java 2 Standard Edition)/(java 2 标准版)是近年来随着各种不同技术的发展,尤其是编程语言飞速发展而诞生的一项新的开发语言。随着信息技术的飞速发展,计算机的使用也日渐普及。本文从实际应用出发,研究并开发实现了一个坦克大战的游戏程序。在Eclipse平台下开发调试。玩家坦克的运行是通过键盘响应事件控制,敌方坦克则是自动运行并具有了一定的智能性。程序进行了精简和优化,游戏运行流畅,具有一定的吸引力。本游戏就是一款基于J2SE的游戏。本游戏主要是运用JAVA
2、GUI的知识实现的。Java图形用户界面(GUI)是指采用图形方式显示的计算机操作用户界面。讲到这里必须得提一下Applet,Applet是镶嵌在网页上运行的小应用程序,Applet的paint()方法用于绘制显示区域,本游戏的坦克就是用这个方法绘制出来的。早期的java提供的GUI类库(java.awt)称之为Abstract Window Toolkit,即AWT,AWT功能不是很好,不能很好的访问操作系统中高级的GUI特性,生成的程序外观很一般。Swing是JDK1.2以后提供的GUI类库,即:javax.swing,使用方便,界面更加美观。Eclipse提供的Standard Widg
3、et Toolkit用户界面开发包,SWT能够充分利用本机系统的GUI。关键词:游戏,Java,坦克,智能1 Java Tank War Game DevelopmentAbstract J2SE is a kind of fast developing technology implemented on various devices especially equipments.With the rapid development of information technology, computer use has become more popular, the practical ap
4、plication of this paper to introduce the design and implementation of the game Battle City .It transports the classical product to computer, offering corresponding software for such more popular hardware platform. Eclipse platform simulator. The players tank is controlled by keyboard response events
5、, while the enemys tank is operated automatically and is of intelligence. Having been streamlined and optimized, the game system can run fluently and attract the players. This paper describes the history of Battle City, java related technologies and the procedures of structural analysis and the real
6、ization of specific functions. Game programming environment in Eclipse3.5.1. Its main features are: to move around. capable of firing bullets against enemy. the enemy can move. to simulate the explosion. to create an obstacle. to increase the life Key words:game ,Java ,tank ,Smart1 目 录摘 要I绪 论1第1章 系统
7、开发环境及语言介绍21.1 开发环境21.2 关于java语言的起源21.3 关于Eclipse4第2章 游戏需求分析52.1 可行性分析52.2 游戏规则和系统功能介绍62.3 程序运行流程7第3章 游戏总体设计103.1 主体模块103.2 子弹模块103.3 坦克模块113.4 墙模块123.5 血液模块123.6 爆炸模块13 第4章 游戏详细设计与实现144.1 游戏窗口与我方坦克144.2 子弹与一辆敌人坦克204.3 爆炸与多辆敌人坦克264.4 墙、坦克互相穿越、超级炮弹和生命值294.5 血块与加入图片334.6 eclipse工作区间34第5章 结论35附录:参考文献36I
8、V 绪 论坦克大战(Battle City)是1985年日本南梦宫Namco游戏公司在任天堂FC平台上,推出的一款多方位平面射击游戏。游戏以坦克战斗及保卫基地为主题,属于策略型联机类。同时也是FC平台上少有的内建关卡编辑器的几个游戏之一,玩家可自己创建独特的关卡,并通过获取一些道具使坦克和基地得到强化。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE, JavaEE, JavaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、
9、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。网络化的市场让游戏变成人和人的交战,而不是人和电脑的对战,这样可以增加游戏的难度、游戏的时间和游戏的寿命。立体化是为了适应现在越来越3D的趋势,游戏有必要做的更加的完善,趋向3D并且加重环境描写。多样化则是增加游戏的任务、游戏的耐玩性,而在坦克大战里增加更多的内容加大其可玩性,比如:装备、对战方式、任务合作模式等等。可以想像,如果坦克大战还是人机对战的模式,并且协作性不提高的话,玩家对该游戏的选择性将大大降低。本设计就是想对该游戏进
10、行分析研究,借助于它的游戏规则,用JAVA语言模拟开发一个类似的、功能相对比较简单的小游戏。第1章 系统开发环境及语言介绍1.1 开发环境操作系统:Microsoft Windows XP开发语言:Java 开发工具:Eclipse1.2 关于java语言的起源Java平台和语言最开始只是SUN公司在1990年12月开始研究的一个内部项目。SUN公司的一个叫做帕特里克诺顿的工程师被自己开发的C和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth 计划”的项目的机会。“Stealth 计划”后来改名为“Green计划”,
11、JGosling(詹姆斯高斯林)和麦克舍林丹也加入了帕特里克的工作小组。他们和其他几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,SUN公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C 语言,但是很多成员包括SUN的首席科学家比尔乔伊,发现C 和可用的API在某些方面存在很大问题。工作小组使用的是内嵌类型平台,可以用的资源极其有限。很多成员发现C 太复杂以至很多开发者经常错误使用。他们发现C 缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。根据可用
12、的资金,比尔乔伊决定开发一种集C语言和Mesa语言搭成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议SUN公司的工程师应该在C 的基础上,开发一种面相对象的环境。最初,高斯林试图修改和扩展C 的功能,他自己称这种新语言为C -,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的树而命名。就像很多开发新技术的秘密的工程一样,工作小组没日没夜地工作到了1992年的夏天,他们能够演示新平台的一部分了,包括Green操作系统,Oak的程序设计语言,类库,和其硬件。最初的尝试是面向一种类PDA设备,被命名为Star7,这种设备有鲜艳的图形界面和被称为“Du
13、ke”的智能代理来帮助用户。1992年12月3日,这台设备进行了展示。同年11月,Green计划被转化成了“FirstPerson有限公司”,一个SUN公司的全资子公司,团队也被重新安排到了帕洛阿尔托。FirstPerson团队对建造一种高度互动的设备感兴趣,当时代华纳发布了一个关于电视机顶盒的征求提议书时(Request for proposal),FirstPerson改变了他们的目标,作为对征求意见书的响应,提出了一个机顶盒平台的提议。但是有线电视业界觉得FirstPerson的平台给予用户过多地控制权,因此FirstPerson的投标败给了SGI。与3DO公司的另外一笔关于机顶盒的交易
14、也没有成功,由于他们的平台不能在电视工业产生任何效益,公司再并回SUN公司。1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论之后,约翰盖吉、詹姆斯高斯林、比尔乔伊、帕特里克诺顿、韦恩罗斯因和埃里克斯库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克诺顿写了一个小型万维网浏览器,WebRunner,后来改名为HotJava。同年,Oak改名为Java。商标搜索显示,Oak已被一家显卡制造商注册,因此团队找到了一个新名字。这个名字是在
15、很多成员常去的本地咖啡馆中杜撰出来的。名字是不是首字母缩写还不清楚,很大程度上来说不是。虽然有人声称是开发人员名字的组合:James Gosling(詹姆斯高斯林)Arthur Van Hoff(阿瑟凡霍夫)Andy Bechtolsheim(安迪贝克托克姆),或“Just Another Vague Acronym”(只是另外一个含糊的缩写)。还有一种比较可信的说法是这个名字是出于对咖啡的喜爱,所以以Java咖啡来命名。类文件的前四个字节如果用十六进制阅读的话,分别为CA FE BA BE,就会拼出两个单词“CAFE BABE”(咖啡宝贝)。1994年10月,HotJava和Java平台为公
16、司高层进行演示。1994年,Java 1.0a版本已经可以提供下载,但是Java和HotJava浏览器的第一次公开发布却是在1995年5月23日SunWorld大会上进行的。SUN公司的科学指导约翰盖吉宣告Java技术。这个发布是与网景公司的执行副总裁马克安德森的惊人发布一起进行的,宣布网景将在其浏览器中包含对Java的支持。1996年1月,升阳公司成立了Java业务集团,专门开发Java技术。1.3 关于EclipseEclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准
17、的插件集,包括Java开发工具(Java Development Kit,JDK)。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,但是目前亦有人通过插件使其作为其他计算机语言比如C+和Python的开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。
18、目前由IBM牵头,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开发源码项目,它其实是Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。近期还有包括Oracle在内的许多大公司也纷纷加入了该项目,并宣称Eclipse将来能成为可进行任何语言开发的IDE集成者,使用者
19、只需下载各种语言的插件即可。第2章 游戏需求分析2.1 可行性分析1)游戏程序是一项精度要求很高的程序系统,因为其代码利用率很高。一个实时运行的最终作品,每秒都会运行成千上万行程序,绘图事件、健盘事件都会以极高的频率在后台等待循环。因此,其逻辑设计应当相当严谨,需将所有可能发生的事件和各种意外情况考虑在设计中。2)游戏中为了美观,适用性强,可能需要采用外部文件引入的图片贴图,屏幕刷新的双缓冲等都有较好的解决方案。3)我方的坦克的运行可以通过键盘响应事件控制,但敌方坦克则因为是自动运行,就需要有一定的智能性;同时,出现在屏幕上的敌方坦克可能会有较多的数量,这需要为每个敌方坦克开辟一个线程以便能让
20、其独立运行。Java的多线程能力为实现这样的游戏提供了可能。4)对于双方坦克发出的子弹的控制也需要对其跟踪控制,子弹也需要处在独立的线程中。敌方坦克子弹仅需要扫描我方坦克,而我方坦克需要在每一步扫描所有的敌方坦克。这需要对所有的对象有较好的控制。另外,子弹在运行过程中也需要实时扫描是否碰撞到了相关障碍物或屏幕边界。如此过多的线程同时在本来效率就不高的机器上运行,可能会导致程序的缓慢。5)双方坦克在前进时也考虑到是否碰撞到相关物体或对方坦克,以免重叠运行,造成许多物理上不可能的情况,缺乏真实感。6)java是基于虚拟机的半解释型编译系统,其执行效率较C+等完全编译后的程序会低很多,程序如果不进行
21、精简和优化,将可能导致运行的不流畅。开发过程中要对结构和变量的使用进行控制。2.2 游戏规则和系统功能介绍游戏中坦克能向八个方向移动,和友方坦克碰到后不能穿越。坦克能向八个方向发射子弹,子弹击中坦克产生爆炸,玩家坦克还能发射同时向八个方向发射集束炸弹。地图上有障碍物,坦克和子弹都不能穿越障碍物。玩家坦克有生命数,还有生命值,被敌人子弹击中后生命值减少,生命值为后坦克爆炸,开始新坦克的操作按2。地图上有随机出现的加生命值的血块,吃恢复生命值满,游戏的目的是操作自己的坦克消灭敌人坦克,消灭所有敌人坦克后游戏结束。基于Java语言的各种特性,本软件使用Java语言进行开发,并最终完成当初的设计要求,
22、所有的程序以及其程序功能如表2.1所示。表2.1程序功能表程序名功能TankClient.java游戏的主窗口Tank.java坦克的数据和方法Missile.java炮弹的数据和方法Explore.java爆炸的数据和方法Wall.java墙的数据和方法Blood.java血块的数据和方法2.3 程序运行流程2.3.1 子弹运行流程子弹实现了Missile这个接口中的某些方法,运行在独立的线程中,它拥有一个很重要的变量good。它标识了子弹是属于玩家的还是敌人的,这样可以控制子弹再脱离坦克后的运行状态中的行为,其中主要功能流程图见图3-1流程图。当击中了需要做出反应的物体时,就分别采取措施:
23、击中墙时,子弹生命就结束,不再继续画.如果没有击中物体,就继续检测是否击中了坦克,这根据子弹的来源分为两种情况.当来自玩家时,检测是否与敌人碰撞,发生碰撞时,将敌人从List中移走,并置为空,产生爆炸效果,敌人数量减少一位,敌人屏幕上数量减少一位。如果是来自敌人的子弹,将同样检测与玩家坦克的碰撞,如有碰撞,玩家生命就减少,当生命值为0时,就死亡了。下图为子弹运行的主要流程:开始是否出界击中墙,不再画子弹是否击中物体是否是玩家子弹是否击中敌人敌人子弹击中玩家开始YYNNN NNN消除敌人消除玩家YYYY图2.1 子弹运行流程图2.3.2 敌方坦克运行流程 NY是否碰墙开始可否前进前进是否开炮是否
24、已死变换方向开炮结束NNYYNNY图2.2 敌方坦克运行流程图第3章 游戏总体设计3.1 主框架模块该模块由TankClient.java文件实现,负责调用各个类。创建游戏窗口。该类中的一些主要方法如表3.1所示。表3-1 Tankclient类中成员变量表成员变量描述变量类型名称整个游戏的宽度intGAME_WIDTH整个游戏的高度intGAME_HEIGHT该类中包括lauchFrame( ),paint( ),update( )三个方法,其功能表如表3-2表3-2 Tankclient类中方法表方法功能备注lauchFrame()显示坦克主窗口无备注paint(Graphics g)重画
25、时调用无备注update(Graphics g)使用双缓冲消除闪烁现象无备注3.2 子弹模块该模块由Missile.java文件实现,实现子弹的各个功能,实现打坦克、实现子弹是否活着的功能。该类中的变量如表3.3所示。表3-3 Missile类中成员变量表成员变量描述变量类型名称子弹在X方向上的速度intXSPEED子弹在Y方向上的速度intYSPEED子弹的高度intHEIGHT该类中包括hitTank( ),Islive( )二个方法,其功能表如表3-4表3-4 Missile类中方法表方法名功能备注hitTank(Tank t)实现子弹撞坦克的功能无备注Islive()实现判断子弹是否活
26、着的功能无备注3.3 坦克模块该模块由Tank.java文件实现,创建坦克,打子弹,打多发子弹。处理坦克和墙相撞的问题。坦克不能相互穿越。加入主战坦克的生命值。击毙敌人坦克。让坦克更加智能。该类中的变量如表3-5所示表3-5 Tank类中成员变量表成员变量描述变量类型名称坦克在X方向上的速度intXSPEED坦克在Y方向上的速度intYSPEED坦克的高度intHEIGHT该类中包括collidesWithWall( ),Eat( )二个方法,其功能表如表3-6表3-6 Tank类中方法表方法名功能备注collidesWithWall(Wall w)处理坦克和墙相撞的问题无备注Eat(Bloo
27、d b)坦克吃血,增长生命无备注3.4 墙模块该模块由Wall.java文件实现,添加两堵墙,处理坦克和墙相撞的问题。该类中的变量如表3-7所示。表3-7 Wall类中成员变量表成员变量描述变量类型名称墙的起始位置坐标intX.Y墙的宽度intW墙的高度intH该类中包括collidesWithWall( )一个方法,其功能表如表3-8表3-8 Wall Tank类中方法表方法名功能备注collidesWithWall(Wall w)处理坦克和墙相撞的问题无备注3.5 血液模块该模块由Blood.java文件实现,添加必要的方法,让血块按照一定轨迹运动,并在一定时间消失。该类中的变量如表3-9
28、所示。表3-9 Blood类中成员变量表成员变量描述变量类型名称血块在X轴的坐标IntX血块在X轴的坐标IntY血块的宽度IntW血块的高度IntH该类中包括Move(),islive()二个方法,其功能表如表3-10所示。表3-10 Blood Tank类中方法表方法名功能备注Move()处理血块移动的问题无备注islive()判断血块是否活着无备注3.6 爆炸模块该模块由Explode.java文件实现,击毙一辆坦克后产生爆炸。该类中的变量如表3-11所示。表3-11 Explode类中成员变量表成员变量描述变量类型名称坦克生死的描述booleanLive主类的变量TankClientTc
29、该类中包括GetDefaultToolkit(),Draw(Graphics)二个方法,其功能表如表3-12表3-12 Explode类中方法表方法名功能备注GetDefaultToolkit()拿到的工具包无备注Draw(Graphics)画爆炸现象无备注第4章 游戏详细设计与实现4.1 游戏窗口与我方坦克1)窗口产生一个窗口,添加关闭窗口的事件处理,不允许窗口的大小改动。通过如下代码实现。 图4-1游戏窗口import java.awt.*;import java.awt.event.*;public class TankClient extends Frame /建立游戏窗口public
30、 void lauchFrame() this.setLocation(400, 300);this.setSize(800, 600); /窗口大小this.setTitle(TankWar); /窗口命名this.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););this.setResizable(false);setVisible(true);public static void main(String args) TankClient tc =
31、new TankClient();tc.lauchFrame();2)画出代表坦克的实心圆重写paint方法。注意:不要改变原来的前景色图4-2 单个坦克 public void paint(Graphics g) Color c = g.getColor();g.setColor(Color.RED);/坦克颜色g.fillOval(50, 50, 30, 30);/坦克尺寸g.setColor(c);3)让坦克动起来将位置改变为变量,启动线程不断重画,线程重画更均匀,更能控制重画的速度。按键重画不能解决子弹自动飞行的问题。每次重画改变Tank位置。注意:x, y值得含义,指的是小方块的左上
32、角点。图4-3单个坦克移动private class PaintThread implements Runnable public void run() while(true) repaint();try Thread.sleep(100); catch (InterruptedException e) e.printStackTrace();4)使用双缓冲消除闪烁现象原因:刷心重画频率太快,paint方法还没有完成,逐条显示。解决:将所有东西画在虚拟图片上,一次性显示出来。图4-4消除闪烁public void update(Graphics g) if(offScreenImage = n
33、ull) /建立虚拟图片offScreenImage = this.createImage(800, 600);Graphics gOffScreen = offScreenImage.getGraphics();Color c = gOffScreen.getColor();/获得颜色gOffScreen.setColor(Color.GREEN);gOffScreen.fillRect(0, 0, 800, 600);gOffScreen.setColor(c);paint(gOffScreen);g.drawImage(offScreenImage, 0, 0, null);5)让坦克听
34、从我们的指挥添加键盘监听类KeyMonitor,TankClient添加键盘监听器,针对不同的键改变坦克位置,与重画线程结合产生不同方向运动。注意:switch case语句中break语句的运用图4-5手动移动坦克private class KeyMonitor extends KeyAdapter public void keyPressed(KeyEvent e) int key = e.getKeyCode();switch(key) /添加键盘监听case KeyEvent.VK_LEFT :x -= 5;break;case KeyEvent.VK_UP :y -= 5;break
35、;case KeyEvent.VK_RIGHT :x += 5;break;case KeyEvent.VK_DOWN :y += 5;break;6)将坦克单独包装成类建立Tank类,为Tank类添加成员变量x y,添加draw方法,使Tank类独立,制自己的画法,添加Tank类处理按键的方法,根据Tank类修改TankClient类。7)让主战坦克向8个方向行走添加记录按键状态的布尔量,添加代表方向的量(使用枚举),根据按键状态确定Tank方向,根据方向进行下一步的移动(move)。处理键抬起的消息修改TankClient相关代码。图4-6八方向移动public void keyPress
36、ed(KeyEvent e) int key = e.getKeyCode();switch(key) case KeyEvent.VK_LEFT :bL = true; /向左break;case KeyEvent.VK_UP :bU = true; /向上break;case KeyEvent.VK_RIGHT :bR = true; /向右break;case KeyEvent.VK_DOWN :bD = true; /向下break;locateDirection();4.2 子弹与一辆敌人坦克1)添加子弹类添加Missile类,添加x,y,dir等属性以及常量.添加构造方法, dra
37、w方法等必要方法,根据不同方向,进行不同的运动,在TankClient中模拟一颗子弹注意:不一定一次写到位。图4-7打一发子弹import java.awt.*;public class Missile /建立子弹类public static final int XSPEED = 10;public static final int YSPEED = 10;int x, y;Tank.Direction dir;public Missile(int x, int y, Tank.Direction dir) this.x = x;this.y = y;this.dir = dir;public
38、 void draw(Graphics g) /子弹颜色和形状Color c = g.getColor();g.setColor(Color.BLACK);g.fillOval(x, y, 10, 10);g.setColor(c);move();private void move() switch(dir) /子弹运动case L: /向左x -= XSPEED;break;case LU: /左上x -= XSPEED;y -= YSPEED;break;case U: /向上y -= YSPEED;break;case RU: /右上x += XSPEED;y -= YSPEED;bre
39、ak;case R: /向右x += XSPEED;break;case RD: /右下x += XSPEED;y += YSPEED;break;case D: /向下y += YSPEED;break;case LD: /左下x -= XSPEED;y += YSPEED;break;2)根据主战坦克的方向和位置,打出子弹增加对Ctrl键的按键处理,根据“坦克打出一发子弹”这句话,来确定Tank中的方法fire,其返回值为Missle,根据Tank方向和位置设定子弹的方向和位置并new出来,然后返回(fire方法的实现)注意:掌握面向对象的思维方式来确定类应该具有的方法。图4-8打一发子弹
40、3)为了解决坦克停下也能打出炮弹的问题画出炮筒Tank类增加新的属性ptDir,每次move后根据Tank新的方向确定炮筒的方向,将炮筒用直线的形式表现出来。4)打出多发炮弹使用容器装炮弹,每当抬起Ctrl键就往容器中加入新的炮弹,逐一画出每一发炮弹.注意:泛型的使用。图4-9打多发子弹5)解决炮弹不消亡的问题,解决坦克出界的问题加入控制炮弹生死的量bLive(Missle),当炮弹已经死去就不需要对其重,当炮弹飞出边界就死亡,当炮弹死亡就从容器中去除.图4-10子弹消亡6)画一辆敌人的坦克加入区别敌我的量good,根据敌我的不同设置不同的颜色,更新Tank的构造函数,加入good,TankC
41、lient中new 出敌人的坦克并画出.图4-11添加一辆敌方坦克public Tank(int x, int y, boolean good) this.x = x;/建立坦克this.y = y;this.good = good;public Tank(int x, int y, boolean good, TankClient tc) this(x, y, good); /屏幕中出现坦克this.tc = tc;7)将敌人坦克击毙Missle中加入hitTank(Tank)方法返回布尔类型,碰撞检测的辅助类Rectangle,为Tank和Missle都加入getRect方法,当击中敌人坦
42、克时,坦克被打死,子弹也死,增加控制Tank生死的量live,如果死去就不画了。图4-12打击敌方坦克4.3 爆炸与多辆敌人坦克1)加入爆炸添加爆炸类,用不同直径的圆模拟爆炸,加入live,加入位置属性,加入draw方法。爆炸应该存在于集合类中,TankClient加入集合将集合中的爆炸逐一画出(如果死去就去除),击毙一辆坦克后应产生爆炸.hitTank时应产生爆炸图4-13爆炸2)添加多辆坦克用容器来装敌人的Tank向容器中装入多辆敌人Tank,画出来,运行,不能打掉,添加hitTanks方法,打一系列Tank;TankClient里面每发子弹都打tanks3)让敌军坦克更加智能让敌军坦克动
43、起来,构造函数中可以指定方向,new敌军坦克的时候指定敌军坦克的方向;让敌军坦克向随机方向移动,(Tank)静态的,添加随机数产生器 java.util.Random,move完成后,如果是敌军坦克的,随机产生一个数,来设定坦克下一个方向,Direction.values();让敌军坦克向随机方向移动随机的步骤,添加变量,记录随机步骤,当=0时,改变方向,否则,只是随机步骤递减;让敌军坦克发射炮弹,本军炮弹不打本军,炮弹添加好坏bGood,根据好坏画不同颜色,修改炮弹的构造方法,修改Tank的fire方法,修改hitTank方法,好不能打好,坏不能打坏;敌军炮火不能太猛烈。图4-14添加多辆坦克private static Random r = new Random();if(!good) /敌方坦克运动Direction dirs = Direction.values();if(step = 0) step = r.nextInt(12) + 3
限制150内