项目-坦克大战-设计报告
坦克大战 实验报告
本科实验报告课程名称:Java语言程序设计实验项目:TankWar实验地点:致远楼B403专业班级:软件工程1219 学号:2012005496 学生姓名:柴丁方指导教师:任少斌2014年 1 月7 日import java.awt.*;import java.awt.event.*;public class TankWarClient extends Frame {//构造游戏开始的界面public void KaiShiJieMian() {this.setLocation(400,200); //游戏窗口的左上点在屏幕的位置this.setSize(800, 600);//游戏窗口的尺寸//使按窗口的“X”时,可以关闭程序较上一次实验添加的代码段为:public void paint (Graphics g) {Color c = g.getColor();//color类是 java。
awt 中的,因此可以直接 color cg.setColor(Color.green);// 类 java.awt.Graphics 中的方法,将此图形上下文的当前颜色设置为指定颜色。
g.fillOval(50, 50, 30, 30);//int x, int y,int width,int height,分别为坐标与椭圆的长宽g.setColor(c);}变更2:较上一次实验添加的代码段为:1.更改如下代码段中的“常量值”为“x”“y”,使所填充的椭圆位置可以随值改变,为静态的图形动起来打下了基础。
static int x=50,y=50;实验四:从版本0.4到版本0.41变更1:变更2:较上一次实验添加的代码段为:1.public class TankWarClient extends Frame {Image offScreenImage = null;}//先把内存的offScreenImage清空较上一次实验添加的代码段为:1.TankWarClient类中:2.3.较上一次实验修改的代码段为:public class Tank {public static final int XSPEED = 5;public static final int YSPEED = 5;private int x, y;private boolean bL=false, bU=false, bR=false, bD = false;enum Direction {L, LU, U, RU, R, RD, D, LD, STOP};private Direction dir = Direction.STOP;//此处为构造函数。
坦克大战游戏概要设计
坦克大战游戏开发系统概要设计(第1.0版)目录坦克大战游戏开发............................................................................................................................. - 0 -第一章引言....................................................................................................................................... - 2 -1.1编写目的 .. (2)1.2项目背景 (2)1.3定义 (3)1.3.1 专门术语 ................................................................................................................................... - 3 -1.3.2 缩写 ........................................................................................................................................... - 3 -1.4参考资料 .. (3)第二章总体设计............................................................................................................................... - 4 -2.1需求规定 .. (4)2.1.1 对功能的规定............................................................................................................................ - 4 -2.1.2 对性能的规定............................................................................................................................ - 4 -2.1.3 输入/输出要求 .......................................................................................................................... - 4 -2.1.4 数据管理能力要求.................................................................................................................... - 5 -2.1.5 故障处理要求............................................................................................................................ - 5 -2.2其它专门要求 (5)2.3运行环境 (5)2.4功能需求与程序模块的关系 (6)2.5技术架构 ....................................................................................................................................... - 6 -第三章接口设计............................................................................................................................... - 7 -3.1外部接口 .. (7)3.1.1 用户界面 ................................................................................................................................... - 7 -3.2内部接口 .. (8)3.3.1结构........................................................................................................................................... - 8 -第四章运行设计............................................................................................................................... - 8 -4.1运行模块的组合 .. (8)4.2运行控制 (8)4.3运行时间 (8)第五章出错处理设计....................................................................................................................... - 9 -5.1出错输出信息 (9)5.2出错处理对策 (10)第六章维护设计............................................................................................................................. - 10 -第一章引言1.1 编写目的本说明书目的在于明确说明坦克大战游戏各功能的实现方式,指导开发员进行编码,并解决实现该系统的程序模块设计问题。
坦克大战报告
JAVA程序开发课程设计课程大作业专业:软件工程班级:14软工2学号: ***********名:***项目名称:坦克大战一、需求分析:1.基本功能:(1)我方坦克能上下移动(2)敌方坦克能自由移动(3)我方坦克能开火(4)敌方坦克能自由开火(5)子弹打中我方,会减血,我方打中敌方,敌死。
敌打敌不会受伤(6)有血条,主界面2.扩展功能(1)用图形来表示坦克和炮弹(2)用图形来表示中子弹后的爆炸效果(3)地图上存在金属墙,我方坦克和子弹不能穿过(4)地图上存在曹村,我方和敌方坦克能够自由穿过,子弹也一样(5)地图上会随机出现加血包(6)我方坦克遇到加血包,会增加生命(7)游戏开始时,会启动背景音乐(8)我方坦克死亡时,提示游戏结束二、系统设计:1. BgMusic(1)主要功能:添加背景音乐TankMap类通过调用该类,并读取BgMusic包下面的背景音乐文件(2)成员属性:1)filename,用于记录读取到的文件名,并处理2)nBytesRead,这是缓存,用于读取音乐文件,缓存下来(3)成员方法:1)run,播放背景音乐2)构造方法BgMusic,将读取到的文件名,存储到成员属性filename中2. Blood(1)主要功能:地图中添加血包(2)成员属性:1)x,y,width,height,血包的位置以及宽高2)rpos_x,rpos_y,用于记录血包移动后的位置3)tm,调用TankMap类,并在地图中放血包4)live,血包的存活,被坦克吃了就消失5) blood,用于记录血包的存活6)step,血包的步长7)stepMove,血包走过总的步长(3)成员方法:1)Blood,构造方法,将血包放到地图中2)draw,画血包3)move,血包的移动4)getRect,获取血包的位置3. Tank(1)主要功能:地图中添加我方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)isLive,我方坦克是否存活5) isgood,坦克属于哪一方6)life,我方坦克的初始生命值7)step,使用Blood类,血包随机出现8)upimage,rightimage,downimage,leftimage,oldimage,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)checkDirection,确定用户单击的方向键,修正坦克即将移动方向4)fire,发射子弹5)getRec,返回坦克当前位置,便于判断是否与敌方坦克或子弹重叠6)stay,坦克撞墙的处理7)eat,我方坦克吃血包4.EnemyTank(1)主要功能:地图中添加敌方坦克(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,坦克的宽高和x,y上的移动速度2)x,y,direction,我方坦克出现的初始位置和初始状态3)tm,调用TankMap类,并在地图中放坦克4)islive,我方坦克是否存活5)enemytank,存放坦克图片(3)成员方法:1)draw,绘制坦克2)move,根据移动方向,移动坦克,不允许坦克移除地图3)fire,发射子弹4.Explor(1)主要功能:子弹打中坦克,发生爆炸效果(2)成员属性:1)x,y,坦克出现的位置2)tm,调用TankMap类,并在地图中放爆炸3)islive,我方坦克是否存活(3)成员方法:1)draw,绘制爆炸2)Explor,爆炸的构造方法5.Help(1)主要功能:给用户游戏帮助(2)成员属性:1)help,将帮助的文字存放在字符串中(3)成员方法:1)getHelpDialog,调用帮助6.Shell(1)主要功能:设计子弹(2)成员属性:1)WIDTH,HEIGHT,xspeed,yspeed,子弹的宽高和x,y上的移动速度2)x,y,direction,子弹出现的位置和方向3)tm,调用TankMap类,并在地图中放子弹4)isLive,子弹是否打中坦克5)isgood,是否是我方6)Image,加载子弹图片(3)成员方法:1)draw,绘制子弹2)move,根据移动方向,移动坦克,得到子弹的移动3)getRec,获取坦克的位置4)hitTanks,子弹打坦克5)hitWalls,子弹打墙7.Wall(1)主要功能:给地图添加墙(2)成员属性:1)x,y,w,h,墙的位置和宽度高度2)tc,地图(3)成员方法:1)draw,画墙2)getRect,获取墙的位置8.TankMap(1)主要功能:地图(2)成员属性:1)MAPWIDTH,MAPHEIGHT,地图的宽高2)t,我方坦克3)bufferImage,缓冲,用于解决闪屏4)forestimage,草丛5)shells,EnemyTank,Blood,Explors泛型6)enemyCount,敌方坦克数量7)w1,w2,不可穿过的墙(3)成员方法:1)init,初始化地图2)paint,画血包,地图,坦克等3)addBloods,加血4)update,解决闪屏三、功能实现:1.功能1:我方,敌方坦克上下移动并开火(1)操作说明游戏启动时,按上下左右键可以是我方坦克移动,按F键可以开火(2)关键代码//绘制坦克public void draw(Graphics g){//根据不同方向加载不同图片,读取的时候需要处理异常try{switch(direction){case STOP:case UP:upimage=ImageIO.read(new File("src/images/up.gif"));oldimage=upimage;g.drawImage(upimage, x, y, null);break;case RIGHT:rightimage=ImageIO.read(new File("src/images/right.gif"));oldimage=rightimage;g.drawImage(rightimage, x, y, null);break;case DOWN:downimage=ImageIO.read(new File("src/images/down.gif"));oldimage=downimage;g.drawImage(downimage, x, y, null);break;case LEFT:leftimage=ImageIO.read(new File("src/images/left.gif"));oldimage=leftimage;g.drawImage(leftimage, x, y, null);break;}}catch (IOException e) {};g.drawImage(oldimage, x, y, null);move(direction);}//根据移动方向,移动坦克,不允许坦克移出地图public void move(Direction d){/*** 记录坦克原来的位置,撞墙可以回到原位置*/oldX=x;//记录坦克原来的位置,撞墙可以回到原位置oldY=y;if(d == Direction.STOP){}else if(d == Direction.UP){y-=yspeed;if(y<=HEIGHT)y=HEIGHT;}else if(d==Direction.RIGHT){x+=xspeed;if(x>=800-WIDTH)x=800-WIDTH;}else if(d==Direction.DOWN){y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(d==Direction.LEFT){x-=xspeed;}2.功能2:我方开火,敌方会爆炸,然后死亡。
局域网坦克大战课程设计报告
实训项目报告书项目名称局域网坦克大战年级班级2010级计101-4班项目完成人实训时间:2011 年12月12日至2011 年12月31 日填表说明一、本表由项目完成人填写,一式一份;二、实训结束前将填好的文稿打印后交实训指导教师进行鉴定和评定成绩,确认后的文档交院校存档保存;三、此表电子文档及学生项目实训的作品须打包存档,压缩文件包以学生学号命名,以班为单位收集,刻录光盘交院校存档;一、项目背景、目的及可行性分析引言随着时代的进步、社会的发展,网络已成为人们生活中不可或缺的一部分,工作学习之余,利用游戏等放松娱乐一下…….1、课题背景随着游戏产业的迅速发展,新游戏一个接一个的不断出现,游戏的类型也是多种多样,如竞技类、对战类、合作类、角色扮演类等等。
如果读者是学生的话也许会注意到,宿舍里玩的合作类小型游戏大多是两个人在一台机器上,如果想不在一台机器上,则可能需要上网寻求第三方服务器的支持。
2、局域网坦克大战的目的随着计算机的普及以及对电子游戏的认识,电子游戏已被越来越多的人选作放松、娱乐的休闲方式;电子游戏既不需要专门购买游戏器材,也不需要宽阔的游戏场地,只需要一台能独立完成任务的计算机即可,它可以是人们工作、学习时用的计算机,并不需要另行配置,这比起传统休闲游戏即省钱又省事。
局域网游戏更是可以将现实空间中零散的计算机,组织起来,使其在逻辑空间中集中起来,使游戏的组织、开展变得轻松。
如此轻松而又安逸的休闲方式,使得越来越多的人尝试,甚至已经将电子游戏作为主要休闲方式,既然有如此多的人使用,那其中必然存在巨大的商机,即使人们不愿意为一个小小的休闲游戏花费金钱,但在游戏中添加广告、游戏相关服务也包藏了巨大的财富;当然电子游戏的制作如今已是空前的火爆,大大小小的游戏公司横空出世,都想在电子游戏制作这个行业里占据一席之地,而一款成功的电子游戏需要精心的策划、分析、设计,只有这样才能获得游戏中包藏的财富,以及做出一款真正能够让玩家娱乐、放松的游戏,而不是骗取玩家钱财的工具。
拓展项目——坦克大战(共5则)
拓展项目——坦克大战(共5则)第一篇:拓展项目——坦克大战坦克大战明阳天下拓展项目简介团队的所有成员在规定的时间和规则的约束下,进行角色分配后,蒙上双眼依次进入模拟战场,在躲避地雷的同时用炮弹尽可能的击中对手,最终战场剩余人数最多的小组获胜。
项目规则1、每队队员同时蒙眼进入雷区,听由场外队员指挥捡炮弹,中途如有触碰地雷,该队员视为中弹身亡,由下一名队员顶替;2、场内队员蒙眼听从场外队员的指挥,捡起炮弹,击中对方队员身体任意部位,即可淘汰对方队员继续存活;3、场外队员只能在限定的区域内活动,不可触发到其他组的区域;4、最后场外留有人数最多组获胜。
项目目标有效沟通,战略与决策,在特殊的情况下如何和其他学员进行有效沟通;团队的力量如何发挥才能体现最大的力量;怎样才能是更合理的指挥方式;默契程度和信任度的考验。
北京明阳天下拓展培训机构是国内体验培训领域的“黄埔军校”。
在体验式培训、户外教育理论、专项主题研究、软件实操开发等软件设施方面已走在行业前列;而硬件拓展设备、拓展器材、拓展设施设计建造和大型独资实操基地等硬件设施方面同样领先全国。
强大的课程研发队伍,与国际接轨的先进培训理念,完善的硬件设备,优越的服务意识,明阳天下拓展始终秉承“专业致胜,效果为王”的理念,为成千上万的客户打造专业化、高标准的拓展培训方案。
第二篇:坦克大战大报告大作业题目:坦克大战程序一、需求分析功能需求坦克大战其中包括对主战坦克的编写、坦克的初始位置的编写、坦克的移动方向的编写、坦克的速度的编写、坦克的子弹速度的编写、敌军的子弹速度的编写、设置游戏难度的编写、子弹的编写、敌军坦克的编写、构造函数的编写,初始化敌军坦克的位置和状态的编写、键盘控制坦克的移动的编写、发弹的编写、判断是否被击中的编写、判断是否击中敌军的编写等。
通过上下左右键进行对坦克的移动,通过F键发射子弹,其它坦克可以随机移动。
构造主窗口中所需要的类,并将坦克加到窗口中,实现坦克的四个方向的移动并创建炮弹类,并让屏幕中的坦克能发射炮弹,让坦克可以朝对方信息统计功能,在游戏界面左上角,显示当前屏幕子弹数。
坦克大战设计报告
手机版疯狂坦克游戏设计与开发摘要Java良好的跨平台特性在移动平台的开发中显示出了巨大的威力。
Java语言面向对象的优势也使得开发游戏变得非常容易。
随着手机的日益普及、Java功能在移动设备上的实现,Java应用程序产生的手机增值服务逐渐体现出其影响力,对丰富人们的生活内容、提供快捷的资讯起着不可忽视的作用。
本论文着眼于J2ME技术的应用,开发一款可商用的手机游戏程序——坦克大战。
本程序的界面和运作方式继承于日本任天堂公司在20世纪80年代开发的Battle City游戏,将老少皆宜的经典作品移植到手机上来,为更流行的硬件平台提供应用软件。
本论文介绍了任天堂红白机的软硬件特性、J2ME的相关技术及本程序的结构分析和具体功能的实现。
关键词:J2ME,手机游戏,Java,坦克大战目录1 绪论 (3)1.1开发背景 (3)1.2 开发工具 (3)1.3 开发意义 (3)2 需求分析 (6)2.1功能需求分析 (6)2.2界面需求分析 (6)3 总体设计 (7)3.1主要功能 (7)3.2 程序流程 (8)4 详细设计和具体实现 (9)4.1游戏进入前的选择 (9)4.2主游戏逻辑及其涉及到的若干类 (10)4.3坦克的共同行为 (13)4.4玩家坦克的功能属性 (14)4.5敌人坦克的功能属性 (15)4.6子弹的运行和控制 (19)4.7记分系统 (21)5.测试与实现 (22)6 程序的总结和展望 (23)1 绪论1.1开发背景在信息社会中,手机及其他无线设备越来越多的走进普通百姓的工作和生活,随着信息网络化的不断进展,手机及其他无线设备上网络势在必行。
但是传统手机存在以下弊端:1. 传统手机出厂时均由硬件厂商固化程序,程序不能增加、删除,有了错误也不能更新、修改,若要增加新功能必须另换一部手机。
2. 传统手机访问互联网是通过WAP(Wireless Application Protocal),所有网络资源必须接通网络才能在线访问,非常耗时、费用亦很高。
java课设报告坦克大战
java课设报告坦克大战什么是Java课设报告坦克大战?Java课设报告坦克大战是一个基于Java编程语言开发的游戏项目。
它模拟了坦克战争的场景,玩家需要操控一辆坦克,与其他玩家或者电脑控制的敌人进行战斗,完成各种任务。
这个项目旨在提高学生的Java编程能力和团队协作能力。
第一步:需求分析和设计在开始编写代码之前,我们需要进行需求分析和设计。
首先,确定游戏的功能和玩法。
例如,游戏应该具有地图、坦克、子弹等基本元素,玩家可以使用键盘控制坦克的移动和攻击,坦克和子弹应该有相应的属性和行为,坦克应该能够与其他坦克进行交互等等。
其次,我们需要设计游戏的界面和用户交互方式,包括游戏的开始菜单、游戏画面、得分、生命值等界面元素。
最后,我们应该考虑游戏的可扩展性,使得我们能够在后续的开发过程中添加更多的功能和元素。
第二步:编写代码在设计完成后,我们开始编写Java代码。
首先,我们创建一个Java项目,并进行必要的配置,例如添加游戏所需的外部库和资源文件。
然后,我们开始编写代码。
我们可以将游戏的不同元素,例如地图、坦克、子弹等,抽象成不同的类,并为每个类定义相应的属性和方法。
我们还可以使用设计模式和面向对象的编程思想,使得代码更加清晰和可维护。
同时,我们需要为游戏添加适当的事件处理器,以响应用户的操作和更新游戏状态。
我们还可以使用Java图形库或者相关的游戏引擎,使游戏具有更好的视觉效果和用户体验。
第三步:测试和调试在代码编写完成后,我们需要进行测试和调试。
我们可以编写一些测试用例,验证游戏的各个功能和元素是否正常工作。
同时,我们需要定期检查并修复可能存在的bug和错误,确保游戏的稳定性和可玩性。
在这个过程中,我们可以与团队成员合作,互相交流和帮助,提高解决问题的效率和质量。
第四步:项目上线和发布在完成测试和调试后,我们可以将游戏部署到服务器上,并发布给玩家。
我们可以选择通过应用商店或者网站进行发布,或者将游戏打包成可执行文件,供玩家下载和安装。
坦克大战实验报告
坦克大战实验报告班级:1205 姓名:许广龙学号:121010182一、系统简介使用JAVA编写一个人机游戏,有开始启动面板(Stage 1),并有闪烁效果。
在开始面板中有游戏(G)和帮助(H)两个菜单。
其中游戏(G)菜单中有开始游戏(N)、退出游戏(E)、保存游戏(S)、继续游戏(C)选项;帮助(H)菜单中有关于坦克如何操作的提示信息。
玩家有1辆坦克(有3条命),电脑有6辆坦克,我的坦克可以通过键盘控制进行移动和发射子弹,敌人坦克可自由运动并自动发射子弹。
敌人坦克相互之间不能重叠,敌人坦克与我的坦克不能重叠,我的坦克与敌人坦克不能重叠。
当子弹击中坦克时坦克死亡,并显示爆炸效果。
当我的坦克生命为0时游戏结束(显示GAMEOVER),当敌方的所有坦克死亡时游戏结束(显示VICTORY)。
二、需求分析设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来,界面能够接受用户的操作,具有人机交互功能。
用户可以选择开始游戏(N),退出游戏(E),保存游戏(S),继续游戏(C),游戏帮助(H)。
界面中包含我的坦克和敌人坦克以及坦克发出的子弹和爆炸后的效果。
坦克:坦克分为两种,敌人坦克和我的坦克。
我的坦克和敌人坦克均可以发射子弹,可以改变路径行走,且在行走过程中碰到边界或碰到其它坦克会自动换方向,坦克之间不能相互穿越。
子弹:子弹可以由敌方坦克和我的坦克发射,且发射出去的子弹可以直线移动,直到碰到其它坦克或超越边界就消失。
坦克受到一颗子弹攻击便死亡,死亡后坦克消失。
爆炸:当子弹射击到坦克身上时,要产生爆炸效果。
方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向从属于坦克的方向。
具体功能:1、坦克可以上下左右移动2、坦克可以发子弹(可以连发,最多5发子弹)3、当坦克中弹时,坦克消失,并显示爆炸效果。
4、我的坦克被击中后显示爆炸效果5、防止敌人坦克重叠运动、我的坦克与敌人坦克重叠运动、敌人坦克与我的坦克重叠运动6、玩游戏时可以保存游戏和继续游戏7、记录玩家的成绩三、系统设计程序流程图:总体框架:项目名:TankGame1主类文件:MyFrame.java坦克父类文件:Tank.java坦克子类(我的坦克):MyTank.java坦克子类(敌人坦克):EnemyTank.java我的面板:MyPanel.java子弹类:Shot.java开始面板:MyStartPanel.java记录类:Recorder.java爆炸类:Bomb.java四、详细设计(一) 、画坦克1、Tank类class Tank{int x,y;//坦克的位置int direct;//坦克的方向int color;//坦克的颜色,值为0时为的我的坦克,为1时为敌人的坦克int speed;public Tank(int x, int y) {this.x = x;this.y = y;}setter与getter方法(代码略)public void moveUp(){//向上移动,y坐标值减,方向值为0y-=speed;this.setDirect(0);}public void moveDown(){//向下移动,y坐标值增,方向值为2y+=speed;this.setDirect(0);}public void moveRight(){//向右移动,x坐标值增,方向值为1x+=speed;this.setDirect(0);}public void moveLeft(){//向左移动,x坐标值减,方向值为3x-=speed;this.setDirect(0);}}2、我的坦克类MyTankclass MyTank extends Tank{public MyTank(int x, int y) {super(x, y);}}3、主类MyFramepublic class MyFrame extends JFrame{MyPanel mp=null;public static void main(String[] args) {MyFrame tankGame1=new MyFrame();MyFrame.setVisible(true);}public MyFrame() {mp=new MyPanel();this.add(mp);this.setBounds(200,200,600,500);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}4、在MyFrame.java中创建MyPanel类class MyPanel extends JPanel{MyTank mytank=null;public MyPanel(){mytank=new MyTank(200,200);//创建我的坦克并设置其初始位置}//重载MyPanel类的paint函数以实现画坦克public void paint(Graphics g)//窗口大小改变或重绘窗口时,执行repaint()时会自动调用{super.paint(g);g.fillRect(0,0,600,500);this.drawTank(mytank.getX(),mytank.getY(),mytank.getDirect(),mytank.getColor(), 5, g); }//在MyPanel画坦克的函数,参数包括坦克的位置、方向、类型(用于设置颜色)、画笔:public void drawTank(int x, int y, int direct, int color, int size,Graphics g) {switch (color) {case 0://我的坦克的颜色g.setColor(Color.cyan);break;case 1:g.setColor(Color.yellow);break;case 2://敌人坦克的颜色g.setColor(Color.green);break;}switch (direct) {case 0:g.fill3DRect(x, y, size, 6 * size, false);g.fill3DRect(x + 3 * size, y, size, 6 * size, false);g.fill3DRect(x + size, y + size, 2 * size, 4 * size, false);g.fillOval(x + size, y + 2 * size, 2 * size, 2 * size);g.drawLine(x + 2 * size, y, x + 2 * size, y + 3 * size);break;case 3:g.fill3DRect(x, y, 6 * size, size, false);g.fill3DRect(x, y + 3 * size, 6 * size, size, false);g.fill3DRect(x + size, y + size, 4 * size, 2 * size, false);g.fillOval(x + 2 * size, y + size, 2 * size, 2 * size);g.drawLine(x, y + 2 * size, x + 3 * size, y + 2 * size);break;case 1:g.fill3DRect(x, y, 6 * size, size, false);g.fill3DRect(x, y + 3 * size, 6 * size, size, false);g.fill3DRect(x + size, y + size, 4 * size, 2 * size, false);g.fillOval(x + 2 * size, y + size, 2 * size, 2 * size);g.drawLine(x + 6 * size, y + 2 * size, x + 3 * size, y + 2 * size);break;case 2:g.fill3DRect(x, y, size, 6 * size, false);g.fill3DRect(x + 3 * size, y, size, 6 * size, false);g.fill3DRect(x + size, y + size, 2 * size, 4 * size, false);g.fillOval(x + size, y + 2 * size, 2 * size, 2 * size);g.drawLine(x + 2 * size, y + 6 * size, x + 2 * size, y + 3 * size);break;}}(二)、移动坦克(事件监听)在主类注册键盘事件监听,在MyPanel类中实现事件监听。
坦克大战实验报告总结
坦克大战实验报告总结坦克大战实验报告总结实验报告总结是对坦克大战实验进行全面回顾和总结的部分。
在这个实验中,我们设计了一个多人在线坦克对战游戏,并对其进行了测试和评估。
首先,我们通过分析游戏的玩法和功能需求,确定了实验的目标和要求。
我们的目标是创建一个具有协同和竞争性元素的多人在线游戏,通过实验测试其稳定性、可玩性和用户体验。
在实验中,我们使用了Unity引擎和C#编程语言来开发游戏。
我们设计了一个简单的地图,玩家可以在其中驾驶坦克进行对战。
我们为坦克添加了各种功能,例如移动、射击和受伤机制,以增加游戏的策略性和挑战性。
为了评估游戏的性能和用户体验,我们进行了一系列测试。
我们首先进行了功能测试,确保游戏的各项功能正常运行。
然后,我们进行了性能测试,测试游戏在不同网络环境下的延迟和帧率。
最后,我们进行了用户体验测试,收集玩家对游戏的反馈和建议。
通过实验,我们得出了以下结论:1. 游戏的核心功能运行正常,并且具有一定的可玩性和挑战性。
2. 在低延迟的网络环境下,游戏的表现良好,但在高延迟的网络环境下会出现一些延迟和卡顿的问题。
3. 玩家对游戏的操作和画面质量表示满意,但希望增加更多的地图和游戏模式来增加游戏的可玩性。
基于这些结论,我们对游戏进行了改进和优化。
我们减少了游戏的网络通信量,以降低延迟和提高游戏的流畅度。
我们还增加了更多的地图和游戏模式,以增加游戏的可玩性。
综上所述,通过本次实验,我们成功地设计并开发了一个多人在线坦克对战游戏,并对其进行了评估和改进。
我们的实验结果表明,游戏具有良好的可玩性和用户体验,但还有一些地方需要进一步优化。
我们相信,在未来的工作中,我们可以进一步改进游戏,使其更加完善和出色。
JAVA关于坦克大战的课程设计报告
课程设计任务书
题目:
学 号: 姓 名: 专 业: 课 程: 指导教师:
职称:
完成时间: 20 年 月----20 年 月
枣庄学院信息科学与工程学院制
课程设计任务书及成绩评定
课程设计的任务和具体要求 本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA 语言程
序设计》课程后,进行的一次全面的综合训练,JAVA 程序设计的设计目的是 加深对理论教学内容的理解和掌握,使学生综合运用所学知识,利用软件工程 为基础进行软件开发、并在实践应用方面打下一定基础。
2
二.系统分析 2.1 可行性分析
2.1.1 技术可行性 软件使用 swing、GUI、Socket、面向对象设计等技术实现,这些技术
均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现 使用这些技术是可行的。 2.1.2 经济可行性
本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件 暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务, 从而增加收入,若使用者寥寥无几,将再次分析是否重新策划软件或者放 弃开发,以减少损失。
2.2 需求分析
设计一个图形用户界面,将所有游戏的元素都能在此用于界面上表现出来, 界面能够接受用户的操作,具有人机交互功能。用户可以选择重新开始游戏, 退出游戏,暂停游戏游戏帮助。
界面中包含我方坦克,和敌人坦克以及坦克发出的子弹和爆炸后的效果。 坦克:坦克分为两种,敌方坦克和用户控制的坦克。用户方和敌方坦克均 可以发射子弹,可以改变路径的行走,且在行走过程中遇到墙等阻碍物和游戏 边界时要改变方向,而不能一直顶着障碍物不放。坦克之间不能穿越,碰撞到 后自动调换方向。 墙:游戏中的边界王家的坦克和敌人的坦克都不能越过,坦克的子弹也不 能穿过。 子弹:子弹可以由敌方和用户方发射,且发射出去的子弹可以直线移动, 直到碰到障碍物就消失,子弹可以穿越树林和河流。敌方坦克受到一颗子弹攻 击会爆炸从而导致死亡,死亡后坦克消失。用户方受到子弹攻击后会减少寿命, 且受到四次攻击则死亡,此时如还有敌方坦克存在,则用户方输掉本次游戏。 爆炸:当子弹射击到坦克身上时,要产生爆炸效果。 方向:坦克和子弹都有方向,可以选择上下左右四个方向,且子弹的方向 从属于坦克的方向。
java实现坦克大战课程设计报告书
Java实现坦克大战小游戏摘要Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。
我的课程设计是用java来做一个简单的坦克大战小游戏。
我将这个程序细分了多个部分,每个部分都建了独立的类,比如:坦克的模型类,河道,树和坦克方向等等。
之所以将之细分,是遵循了java的万事万物皆对象的原理。
在实现每个类时,最简单但也是最繁琐就是建立界面与实例化坦克,因为这牵扯了界面布局,监听的建立等;而有一些类,比如;河道、墙、坦克,这些类这可以依样画葫芦的编写。
在编写过程,借鉴了他人的一些图片模型,实现的功能也并不是和经典的FC坦克大战相同,但是每个坦克之间的互动还是实现了的。
关键词:万事万物皆对象界面布局坦克之间的互动USE JAVA TO REALIZE BATTLE CITY MINI-GAMEABSTRACTJava is a object oriented program design language what can compose cross platform application software. My curriculum design is using JAVA language to make a simple small game called Tank Battle. I break down this program into multiple parts, each part is to establish an independent class, such as: Tank Model class, River Course class, Tree class, The Direction of Tank class and so on. The reason divides into multiple parts, is because follow the principle of JAVA that everything is an object. When implements every class, the most simple but also the most troublesome is build interface and instantiate Tank class, because it is involved of the interface layout, monitoring the establishment. While there are some classes, such as: River Course class, Wall class and Tank class, can write like stick closely to the pattern given.In the preparation process, I refer some pictures of models of others, the function of the retaliate isn’t like FC Tank Battle, but the interaction between ach tank is realized.Key words: everything is an object, the interface layout, the interaction betweeneach tank目录1 课程目的与要求 (1)1、1课程目标 (1)1、2 课程的实现环境 (1)2 概要设计 (2)3 详细设计 (3)4 测试结果与心得体会………………………………………………………………………5 参考文献……………………………………………………………………………………附录……………………………………………………………………………………………源程序代码……………………………………………………………………………………1 课程的目的与要求1、1课程目标JAVA程序设计的设计目的是加深对理论教学内容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。
坦克大战 毕业设计报告
本科毕业设计(论文)题目基于jsp的坦克大战游戏的设计与实现学院名称信息学院专业班级计科(高职)10-1学生姓名郭建建导师姓名贾瑞祥二○一四年五月二十八日齐鲁工业大学本科毕业设计(论文)原创性声明本人郑重声明:所呈交的毕业设计(论文),是本人在指导教师的指导下独立研究、撰写的成果。
设计(论文)中引用他人的文献、数据、图件、资料,均已在设计(论文)中加以说明,除此之外,本设计(论文)不含任何其他个人或集体已经发表或撰写的成果作品。
对本文研究做出重要贡献的个人和集体,均已在文中作了明确说明并表示了谢意。
本声明的法律结果由本人承担。
毕业设计(论文)作者签名:年月日齐鲁工业大学关于毕业设计(论文)使用授权的说明本毕业设计(论文)作者完全了解学校有关保留、使用毕业设计(论文)的规定,即:学校有权保留、送交设计(论文)的复印件,允许设计(论文)被查阅和借阅,学校可以公布设计(论文)的全部或部分内容,可以采用影印、扫描等复制手段保存本设计(论文)。
指导教师签名:毕业设计(论文)作者签名:年月日年月日目录摘要 (3)ABSTRACT (IV)第一章绪论 (5)1.1 课题背景和意义 (5)1.2国内外游戏发展状况 (5)1.2.1与欧美对比 (5)1.2.2 与韩国对比 (5)1.2.3 与日本对比 (5)1.2.4 我国国内的发展状况 (6)1.3章节安排 (7)第二章开发技术概述 (8)2.1 系统运行环境 (8)2.2 JA V A语言的特点 (8)2.3 关于JSP (9)2.4本章小结 (10)第三章游戏设计的原理及技术 (11)3.1游戏概述 (11)3.1.1游戏概念 (11)3.1.2游戏类型 (11)3.1.3游戏的市场与需求 (12)3.2游戏设计相关技术 (12)3.2.2 OPENGL (12)第四章系统设计 (14)4.1系统需求分析 (14)4.2 系统总体设计 ................................................ 错误!未定义书签。
课程设计报告--坦克大战
目录一.问题定义 (1)1. 项目名称 (1)2. 项目目标 (1)3. 选题背景 (1)二.可行性研究 (1)1.技术可行性 (1)2. 经济可行性 (1)3. 操作可行性 (1)三.需求分析 (2)1. 游戏内容需求 (2)2. 游戏规则 (3)四.游戏设计 (3)1. 类的设计 (3)2. 游戏流程 (4)1. 主流程 (4)2. 游戏初始化 (5)3. 游戏运行 (6)3. 游戏序列图 (14)游戏初始化 (14)键盘按下事件 (15)游戏运行 (15)玩家坦克处理 (16)电脑坦克处理 (17)炮弹碰撞处理 (19)坦克碰撞处理 (19)游戏结束 (20)五.游戏代码 (21)CGameMain类 (21)CTankPlayer类 (32)CTankEnemy类 (36)CBullet类 (42)CWeapon类 (49)六.实验总结 (53)一.问题定义1.项目名称坦克大战2.项目目标综合运用C++及其面向对象的知识开发一款小游戏。
3.选题背景相信大部分同学都玩过或看过“坦克大战”这款经典游戏。
现在,就由我自己动手来开发它。
因为之前的学习,我具备了C++语言和面向对象的基础知识,在这个基础上按照实验指南的指导一步一步进行下去,把这款经典游戏做出来。
巩固之前所学知识也学习新的知识。
二.可行性研究1.技术可行性本游戏采用 FunCode和Visual C++6.0进行开发,基于Windows xp和Windows7操作系统。
Funcode软件提供了大量基础类库,可以快速方便地构造出游戏软件。
之前课程学习过C++,具有一定的C++语言开发基础,对面向程序设计有一定了解。
2.经济可行性此次课程设计由我一人完成,只需装有Funcode及Visual C++的电脑一台,无资金需求;且制作出来的游戏软件并不打算发行,也无后期资金需求,经济完全可行。
3.操作可行性本游戏只需用W、A、S、D来移动,用J键进行攻击,操作十分简单,界面友好,符合用户操作习惯。
坦克大战实验报告摘要
一、实验背景与目的在本次程序设计实训中,我们小组以经典90版坦克大战为原型,设计并实现了一款名为“坦克大战”的游戏。
本实验旨在通过实践,加深对程序设计基础知识的理解,提高编程能力,并锻炼团队协作和项目管理的经验。
通过本次实验,我们希望实现以下目标:1. 熟练运用C++等编程语言进行游戏开发。
2. 学习并应用游戏引擎和相关技术,如碰撞检测、图形渲染等。
3. 培养团队协作和项目管理能力。
二、作品概述本次实验作品名为“坦克大战”,是一款改编自经典90版坦克大战的游戏。
玩家通过控制坦克在街道上进行巷战,摧毁敌方坦克以保卫主基地。
游戏规则如下:1. 玩家坦克被击中或与敌方坦克相撞、玩家指挥部被敌方子弹摧毁时游戏结束。
2. 敌我双方子弹均可摧毁基地。
3. 每隔3秒钟出现一辆敌方坦克。
4. 游戏最大时长为100秒。
三、创新点1. 自定义精灵与属性:在游戏中,我们自定义并命名了树林和钢板精灵。
树林属性设置为不接受碰撞,可以自由穿梭;钢板属性设置为接受任何碰撞,但不做任何处理(即子弹和坦克均不能摧毁钢板)。
2. 特殊声效:为坦克发炮、击中目标和坦克移动等动作添加了特殊声效,使游戏更具沉浸感。
四、功能设计1. 玩家控制:玩家通过键盘操作控制坦克移动、射击等动作。
2. 敌方坦克生成:每隔3秒钟,游戏场景中会自动生成一辆敌方坦克。
3. 碰撞检测:游戏实现了敌我坦克碰撞和子弹与基地的碰撞检测,确保游戏规则的有效执行。
4. 图形渲染:游戏采用了图形渲染技术,使坦克、子弹、基地等元素在屏幕上呈现出来。
5. 得分与生命值:游戏设置了得分和生命值系统,玩家需要尽量摧毁敌方坦克,同时保证自己坦克的生命值。
五、实验过程与成果1. 前期准备:我们小组在实验前进行了充分的前期准备,包括查阅相关资料、学习编程语言和游戏开发技术等。
2. 分工协作:在实验过程中,我们根据个人特长和兴趣进行了分工,确保每个成员都能发挥自己的优势。
3. 编程实现:我们运用C++等编程语言,结合游戏引擎和相关技术,实现了坦克大战游戏的基本功能。
java坦克大战课程设计报告
《Java语言程序设计》课程设计报告题目:坦克大战专业:软件工程学号:姓名:指导教师:成绩:2011年 12 月18日目录一、系统分析 (3)可行性分析 (3)需求分析 (3)二、概要设计 (4)项目规划.................................................................................................... 错误!未定义书签。
工作流程图................................................................................................ 错误!未定义书签。
开发及运行环境 (5)三、详细设计与算法实现 (5)游戏主窗口 (5)游戏数据的输出 (5)封装的游戏元素 (8)四、测试.......................................................................................................... 错误!未定义书签。
测试环境 (9)测试结果 (9)五、软件截图 (10)六、总结.......................................................................................................... 错误!未定义书签。
七、参考文献 (11)一、系统分析可行性分析1.技术可行性软件使用swing、GUI、Socket、面向对象设计等技术实现,这些技术均已是非常成熟的技术,之前已有相当多使用这些技术的成功案例,故现使用这些技术是可行的。
2.经济可行性本软件为免费软件,将免费提供软件的下载、运行和维护服务,软件暂无收入,待公布之后随着使用者越来越多,将添加相应的广告、服务,从而增加收入,若使用者寥寥无几,将再次分析是否重新策划软件或者放弃开发,以减少损失。
VB坦克大战设计报告
坦克大战设计报告一、设计思路1.要达到的目的培养学生综合利用VB语言进行程序设计的能力,主要是培养学生的时钟控制和综合编程能力。
⏹要求使用面向对象和结构化程序设计的编程思路⏹能通过键盘W(上)、S(下)、A(左)、D(右)移动坦克。
⏹可以通过上述按键随时改变坦克的方向。
⏹炮身和炮筒分别为标签控件◆当坦克移动到窗体边框时停止前进,但能改变方向。
按键J时可以按炮筒方向发射炮弹(炮弹为标签控件)。
2.关键问题的解决①坦克由两个控件构成label1作为坦克的主体部分,label2作为炮管。
②坦克的移动通过窗体的keypress事件接受键盘按键,w键控制坦克向上,s键控制坦克向下,a键控制坦克向左,d键控制坦克向右。
炮弹的发射由键盘事件控制,单击j键发射炮弹。
利用timer控件控制炮弹延直线移动(改变炮弹的top和left属性),当炮弹击中边缘后消失。
③每当利用keypress事件触发坦克的发炮,首先判断是否炮弹在运行当中,如果运行当中则不进行响应。
炮弹的运动是由timer控件控制,发炮时启动timer事件。
二、程序流程图三、部分程序关键源代码及注释1 If La.Top - Lb.Top = 900 And Lb.Left - La.Left = 300 ThenLc.Top = La.Top - 900Lc.Left = La.Left + 300Lc.Visible = TrueTimer1.Enabled = True (向某一方向发炮时只运行一个时钟)Timer2.Enabled = FalseTimer3.Enabled = FalseTimer4.Enabled = False2 ElseIf keyascii = 97 ThenLa.Enabled = TrueLb.Enabled = TrueLb.Left = La.Left - 900Lb.Top = La.Top + 300 (方向键控制转向和移动)La.Height = 800La.Width = 900 (转向时Lable重新定位)Lb.Width = 900Lb.Height = 200If Lb.Left <= 0 ThenLb.Enabled = FalseLa.Enabled = FalseElseLa.Left = La.Left – 100 (炮筒和炮身相对位置不变的移动)Lb.Left = Lb.Left - 100End If3 Private Sub Timer2_Timer()Do While Lc.Left > 0Lc.Left = Lc.Left - 2Lc.Top = Lc.TopIf Lc.Left > Ld.Left And Lc.Left < Ld.Left + Ld.Width And Lc.Top > Ld.Top And Lc.Top < Ld.Top + Ld.Height ThenLd.Visible = FalseLc.Visible = FalseEnd IfLoopLc.Visible = False (当炮弹到达边界时时钟停止运行,炮弹消失)Timer2.Enabled = FalseEnd Sub四、设计方案的完善及目前存在的问题1.设计方案要完善的地方①×××××②×××××③×××××。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《JAVA程序开发课程设计》项目设计项目名称:TankWar 软件专业:软件工程班级:13软工1班姓名:毛晨光学号:1322120124一、需求分析:基本功能:1.玩家控制的坦克能够四处移动并且打击敌方坦克;2.敌方坦克能够随机四处移动并且打击玩家控制的坦克;3.玩家控制的坦克拥有血量,而敌方坦克没有;4.坦克受到攻击时血条会缩短;5.敌方坦克被消灭完之后,提示游戏胜利;6.用户方坦克被消灭后提示游戏结束;特色功能:1.坦克具有图片,不单单只是个圈圈。
2.增加了血包功能,地图上会随机出现一个血包,我方坦克开过会增加血量。
二、系统设计:1.TankMap类:实现游戏界面地图的初始化。
2.PainTread类:绘制和重绘功能。
3.DirectionHandler:监听用户的键盘输入。
4.Tank类:实现坦克的初始化,绘制,移动,发射等功能。
5.EnemyTank:实现敌方坦克的初始化,绘制,移动,发射等功能。
6.Shell类:实现炮弹的初始化,绘制,移动,攻击功能。
7.Explor类:实现爆炸的初始化。
绘制功能,爆炸效果由绘制半径从小到大再到小的圆实现。
8.Direction类:包含枚举。
9.Blood类:用于实现血包的功能。
三、功能实现。
一.绘制地图功能:public class TankMap extends Frame{//定义地图的尺寸。
public static final int MAPWIDTH=800;public static final int MAPHEIGHT=600;//我方坦克Tank t=null;//定义随机出现的血包Random r=new Random();Image bufferImage=null;public static java.util.List<Shell>shells=new ArrayList<Shell>();//地方坦克集合public static java.util.List<EnemyTank>->enemys=new ArrayList<EnemyTank>();public static java.util.List<Blood> bloods=new ArrayList<Blood>();//爆炸集合public.static.java.util.List<Explor>explors=new java.util.ArrayList<Explor>(); //敌方坦克数量默认10个public int enemyCount=5;//主方法public static void main(String[] args) {TankMap tv=new TankMap();tv.init();}public void drawImage(){}//地图初始化方法public void init(){//初始化地图this.setSize(MAPWIDTH,MAPHEIGHT);this.setTitle("TankWar");this.setVisible(true);//添加键盘监听器this.addKeyListener(new DirectionHandler());//添加穿口关闭监听器this.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent arg0){System.exit(0);}});//初始化我方坦克t=new Tank(this);//初始化敌方坦克for(int i=0;i<enemyCount;i++){enemys.add(new EnemyTank(40+30*i,80,Color.YELLOW)); }//启动绘制线程new Thread(new PaintThread()).start();}//@Overridepublic void paint(Graphics g){//画地图Color c=g.getColor();g.setColor(Color.GREEN);g.fillRect(0,0,MAPWIDTH,MAPHEIGHT);g.setColor(Color.RED);g.drawString("当前炮弹数目:"+shells.size(),20,40);g.drawString("生命值:",20,60);g.fillRect(65,55,t.getLife(),5);g.setColor(c);//画坦克t.draw(g);if(r.nextInt(10)==9 && bloods.size()==0)bloods.add(new Blood());if(r.nextInt(60)==7 && bloods.size()==1)bloods.remove(0);for(int i=0;i<enemys.size();i++){EnemyTank et=enemys.get(i);et.draw(g);}//画爆炸for(int i=0;i<explors.size();i++){Explor e=explors.get(i);e.draw(g);}//绘制血包for(int i=0;i<bloods.size();i++){Blood b=bloods.get(i);b.bloodb(t);b.draw(g);}//画炮弹for(int i=0;i<shells.size();i++){Shell s=shells.get(i);if(s.islive&&s.isgood){s.hitTanks(enemys);}else if(s.islive&&!s.isgood){s.hitTank(t);}s.draw(g);}}//双缓冲,防止游戏地图“频闪”public void update(Graphics g){paint(g);if(bufferImage==null){bufferImage=this.createImage(MAPWIDTH,MAPHEIGHT);}Graphics gbuffer=bufferImage.getGraphics();Color c=gbuffer.getColor();gbuffer.setColor(Color.GREEN);gbuffer.fillRect(0, 0, MAPWIDTH, MAPHEIGHT);gbuffer.setColor(Color.RED);gbuffer.drawString("当前炮弹数目:"+shells.size(),20,40);gbuffer.drawString("生命值:", 20, 60);gbuffer.fillRect(65,55,t.getLife(),5);gbuffer.setColor(c);paint(gbuffer);g.drawImage(bufferImage, 0, 0, null);}//内部类,主要通过调用repaint方法,实现绘图功能class PaintThread implements Runnable{@Overridepublic void run(){while(true){repaint();try{Thread.sleep(260);}catch(InterruptedException e){e.printStackTrace();}}}}//内部类,键盘监听器class DirectionHandler extends KeyAdapter{@Overridepublic void keyPressed(KeyEvent arg0){t.checkDirection(arg0);}}二.绘制坦克功能:public class Tank {//坦克的尺寸和移动速度public static final int WIDTH=50,HEIGHT=50,xspeed=5,yspeed=5;//坦克的初始位置public int x=400,y=300;//坦克的初始化方向,STOP即停止,Direction是自定义的枚举常量,见枚举源代码public Direction direction=Direction.STOP;//地图TankMap tm;//坦克是否存活boolean isLive=true;//坦克属于哪一方,true为用户方,false为敌方boolean isgood=true;//坦克初始化生命值int life=100;//定义坦克的初始化方向,以便插图坦克的图片public int zhuanxiang=1;//获取和设置存活状况public boolean isLive(){return isLive;}public void setLive(boolean isLive){this.isLive=isLive;}//获取和设置生命值public int getLife(){return life;}public void setLife(int life){this.life=life;}//构造方法public Tank(){};public Tank(TankMap t){tm=t;}//绘制坦克//根据坦克的移动方向,插入不同的坦克的图片public void draw(Graphics g){if(zhuanxiang==1){ImageIcon icon=new ImageIcon("Etank_shang.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==-2){ImageIcon icon=new ImageIcon("Etank_you.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==2){ImageIcon icon=new ImageIcon("Etank_zuo.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else{ImageIcon icon=new ImageIcon("Etank_xia.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}/*Color c=g.getColor();g.setColor(Color.RED);g.fillOval(x,y,WIDTH,HEIGHT);g.setColor(c);*/move(direction);}//根据方向,移动坦克,不允许坦克移出地图尺寸public void move(Direction d){if(d==Direction.STOP){}else if(d==Direction.UP){zhuanxiang=1;y -= yspeed;if(y<=20)y=20;}else if(d==Direction.RIGHT){zhuanxiang=-2;x+=xspeed;if(x>=800-WIDTH)x=800-WIDTH;}else if(d==Direction.DOWN){zhuanxiang=-1;y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(d==Direction.LEFT){zhuanxiang=2;x-=xspeed;if(x<=0)x=0;}}//确定用户单机的方向键,修正坦克即将移动的方向public void checkDirection(KeyEvent k){if(k.getKeyCode()==KeyEvent.VK_UP){direction=Direction.UP;}else if(k.getKeyCode()==KeyEvent.VK_RIGHT){direction=Direction.RIGHT;}else if(k.getKeyCode()==KeyEvent.VK_DOWN){ direction=Direction.DOWN;}else if(k.getKeyCode()==KeyEvent.VK_LEFT){direction=Direction.LEFT;}if(k.getKeyCode()==KeyEvent.VK_F){fire();}}//发射炮弹的方法public void fire(){tm.shells.add(newShell(this.x+WIDTH/2,this.y+HEIGHT/2,this.direction,tm,Color.RED,true));}//返回坦克当前位置矩形,便于判断是否与敌方坦克或炮弹重叠public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);}}三.敌方坦克的绘制方法public class EnemyTank extends Tank{//初始化敌方坦克的属性public static final int WIDTH=50,HEIGHT=50,xspeed=5,yspeed=5;public int x=400,y=300;public Direction direction=Direction.DOWN;public boolean islive=true;Color color=Color.YELLOW;TankMap tm;//随机数产生器,供敌方坦克随机产生前进方向使用Random r=new Random();public int zhuanxiang;//方向更改限制,避免敌方坦克每移动一次就更改方向int randomCount=r.nextInt(10)+5;//构造方法public EnemyTank(){}public EnemyTank(int wx,int wy,Color c){x=wx;y=wy;color=c;}@Overridepublic void draw(Graphics g){//根据敌方坦克的移动方向插入不同的坦克图片if(zhuanxiang==1){ImageIcon icon=new ImageIcon("Etank_shang.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==-2){ImageIcon icon=new ImageIcon("Etank_you.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else if(zhuanxiang==2){ImageIcon icon=new ImageIcon("Etank_zuo.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}else{ImageIcon icon=new ImageIcon("Etank_xia.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}move();}public void move(){//当方向更改限制为0时,产生一个随机方向if(randomCount==0){Direction dirs[]=Direction.values();direction = dirs[r.nextInt(dirs.length-1)];randomCount = r.nextInt(10)+5;}//方向更改限制减1randomCount--;//随机发射炮弹,当产生的随机数大于35时,发射炮弹if(r.nextInt(40)>36){fire();}//确定敌方的坦克的移动if(direction==Direction.UP){y-=yspeed;zhuanxiang=1;if(y<=HEIGHT)y=HEIGHT;}else if(direction==Direction.RIGHT){x+=xspeed;zhuanxiang=-2;if(x>=800-WIDTH)x=800-WIDTH;}else if(direction==Direction.DOWN){y+=yspeed;zhuanxiang=-1;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(direction==Direction.LEFT){x-=xspeed;zhuanxiang=2;if(x<=0)x=0;}}@Overridepublic void fire(){tm.shells.add(newShell(this.x+WIDTH/2,this.y+HEIGHT/2,this.direction,tm,Color.BLUE,false) );}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);}}四.炮弹绘制方法public class Shell {//初始化炮弹的基本属性public final int WIDTH=5,HEIGHT=5,xspeed=14,yspeed=14;public int x,y;Direction dir=Direction.STOP;public boolean islive=true;TankMap tm=null;Color color=Color.RED;boolean isgood=true;boolean isLive=true;//构造方法public Shell(){}public Shell(int xd,int yd,Direction d,TankMap t){x=xd;y=yd;dir=d;tm=t;}public Shell(int xd,int yd,Direction d,TankMap t,Color c,boolean g){ x=xd;y=yd;dir=d;tm=t;color=c;isgood=g;}//绘制炮弹public void draw(Graphics g){if(islive){Color c=g.getColor();g.setColor(color);g.fillOval(x,y,WIDTH,HEIGHT);g.setColor(c);move(dir);}else{tm.shells.remove(this);}}//炮弹的移动,如果炮弹移动出了地图尺寸,则设定炮弹死亡public void move(Direction d){if(d==Direction.UP){y-=yspeed;if(y<=0)islive=false;}else if(d==Direction.RIGHT){x+=xspeed;if(x>=800)islive=false;}else if(d==Direction.DOWN){y+=yspeed;if(y>=600)islive=false;}else if(d==Direction.LEFT){x-=xspeed;if(x<=0)islive=false;}}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);}//打击坦克方法public boolean hitTank(Tank t){if(this.isLive&&t.isLive&&this.getRec().intersects(t.getRec())){//用户坦克生命值减20t.setLife(t.getLife()-20);//如果用户坦克生命值《=0,游戏结束if(t.getLife()<=0){t.setLive(false);t.direction=Direction.STOP;JOptionPane.showMessageDialog(tm,"Game Over!");System.exit(0);}//炮弹死亡this.isLive=false;//产生爆炸Explor e=new Explor(x-3,y-3,this.tm);tm.explors.add(e);return true;}return false;}//用户坦克打击敌方坦克的方法public boolean hitTanks(List<EnemyTank>enemyTanks){ EnemyTank e;for(int i=0;i<enemyTanks.size();i++){e=enemyTanks.get(i);if(this.getRec().intersects(e.getRec())){System.out.println("hittanks");e.setLive(false);tm.enemys.remove(e);this.isLive=false;Explor ex=new Explor(x-3,y-3,this.tm);tm.explors.add(ex);return true;}}return true;}}五.爆炸类源代码:public class Explor {//初始化爆炸属性int x,y;TankMap tm;boolean islive=true;int diameter[]={5,9,13,18,25,31,21,12,6};int step=0;//构造方法public Explor(){}public Explor(int x,int y,TankMap t){this.x=x;this.y=y;this.tm=t;}//绘制爆炸public void draw(Graphics g){//如果爆炸已经发生过,从地图的爆炸集合中移出该爆炸if(!this.islive){tm.explors.remove(this);return;}//判断爆炸是否发生完if(step==diameter.length){this.islive=false;step=0;return;}Color c=g.getColor();g.setColor(Color.ORANGE);g.fillOval(x, y, diameter[step], diameter[step]);step++;g.setColor(c);}}六.枚举方向源代码package tank;//定义枚举public enum Direction{UP,RIGHT,DOWN,LEFT,STOP;}七.随机血包产生的方法public class Blood{public final int WIDTH=30,HEIGHT=30;public int x= new Random().nextInt(800),y= new Random().nextInt(600);TankMap tm;public void draw(Graphics g){ImageIcon icon=new ImageIcon("blood.gif");Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);}public boolean bloodb(Tank t){if(t.isLive&&this.getRec().intersects(t.getRec())){if(t.getLife()<=60){System.out.println("blood up");t.setLife(t.getLife()+40);tm.bloods.remove(this);}else{System.out.println("blood up");t.setLife(100);tm.bloods.remove(this);}}return false;}public Rectangle getRec(){return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT); }}四、总结。