坦克大战大报告_坦克大战报告
坦克大战大报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“坦克大战报告”。
大作业题目:坦克大战程序
一、需求分析
功能需求
坦克大战其中包括对主战坦克的编写、坦克的初始位置的编写、坦克的移动方向的编写、坦克的速度的编写、坦克的子弹速度的编写、敌军的子弹速度的编写、设置游戏难度的编写、子弹的编写、敌军坦克的编写、构造函数的编写,初始化敌军坦克的位置和状态的编写、键盘控制坦克的移动的编写、发弹的编写、判断是否被击中的编写、判断是否击中敌军的编写等。通过上下左右键进行对坦克的移动,通过F键发射子弹,其它坦克可以随机移动。构造主窗口中所需要的类,并将坦克加到窗口中,实现坦克的四个方向的移动并创建炮弹类,并让屏幕中的坦克能发射炮弹,让坦克可以朝对方信息统计功能,在游戏界面左上角,显示当前屏幕子弹数。.(1)、我方坦克,形状为一辆坦克图片,和坦克的移动方向保持一致。根据键盘的方向键,坦克的移动方向分为上、下、左、右。当按住F键的时候,能够发送炮弹,多次按键,多次发送。坦克有血量,满血为100,每次被击中,都会掉血10,直到0后,坦克死亡。(2)、敌军坦克,形状为一个黄色圆,移动为随机移动,血量为当被一发炮弹击中的时候,立即死亡消失。(3)、补血包,当我方坦克碰撞到补血包时,可补血,敌方坦克碰撞到时,穿过补血包,不会补血。补血包随机出现。.(4)、碰撞:当子弹碰撞坦克时,子弹消失。当敌军坦克碰撞到我方坦克时,相互穿过。当子弹碰撞到墙壁时,子弹消失,不可穿透墙壁。当坦克碰撞到坦克时,可穿越。当坦克碰撞到四周的游戏界面时,不可走出游戏界面。
运行需要
(1)数据精确性
在进行存取款金额时,需求数据记录定位精确,要求输入数精确金额。(2)时间特性
系统要求用户进行相应操作后系统的响应时间应尽量短,不能超过一定的时间范围本设 计暂规定为1-2s。(3)适应性
要求平台具有很好的更新能力,平台应该能够对并发事件,对于“不可靠”数据具有较强的识别处理能力。(4)可维护性
为满足系统在以后运行过程中出现问题能够修正以及系统需要升级等要求,系统应该具有可维护、可扩充、可更新的性能。(6)兼容性适合Windows2003及以上版本的操作系统。(7)安全性
系统运行应该满足具有一定能够避免黑客、病毒等恶意攻击的安全防范措施。但相对如此简单的平台,应考虑到这些东西。
二、类的设计
1、类的设计:
坦克大战游戏主要涉及到的对象有地图、坦克、炮弹、血包。因此,整个系统的功能可以由以下几个类完成:
TankMap类: 此类主要功能是利用java中AWT包来实现坦克游戏的主窗口,以及对其他类的调用和实例化;游戏地图的初始化,重绘地图上的其他元素。
Blood类:此类主要是定义玩家坦克的生命值,有可以控制玩家坦克的加血等操作的方法。
Tank类:此类主要定义的是游戏中的坦克,可以实例化出玩家坦克,在此类中有坦克的移动,开火等方法。
EnemyTank类:此类主要定义的是游戏中的敌方坦克,可以实例化出敌方坦克,在此类中有敌方坦克的移动,开火等方法。
Shell类:此类主要定义的是游戏中的炮弹类,其中有炮弹的大小以及移动等因素。Explor类:此类定义的是坦克被攻击后的爆炸,其中有坦克击毁后爆炸的图形变化。
2、方法的设计: TankMap类的方法:
init():初始化地图以及地图上的元素
paint():绘制地图以及地图上的元素
update():重绘地图以及地图上的元素
Main():程序入口,创建TankMap对象 Tank类的方法:
Move():按照指定的方向,实现坦克的移动
checkDirection():判断用户点击的方向键,更新坦克运动方向
Fire():当用户单击F键时,发射炮弹
getRec():获取坦克当前所处位置的矩形
isLive():判断坦克的生命值是否为0
setLife(int life):设定坦克生命值
Draw():在指定的地图上绘制坦克
Tank():构造方法,初始化坦克,指定坦克所在地图 Shell类的方法:
Move():按照发射该炮弹的坦克的方向移动
getRec():获取炮弹当前所处位置的矩形
Draw():在指定地图上绘制炮弹
hitTank():打击指定坦克
Shell():构造方法,初始化炮弹 Blood类的方法:
getRec():获取血包当前所处位置的矩形
Draw():在指定地图上绘制血包
Blood():构造方法,初始化血包
三、编码实现及说明
TankMap类:
public cla TankMap extends Frame {
public static final int MAPWIDTH=800;public static final int MAPHEIGHT=600;Random r=new Random();public int time=0;int s=1;//城墙数 Tank t=null;public static java.util.Listshells= new ArrayList();static static
java.util.List java.util.List
walls=new enemys=new public
public java.util.ArrayList();ArrayList();public static java.util.List bloods=new ArrayList();public static
java.util.List
explors=new java.util.ArrayList();
} public void paint(Graphics g){
Color c=g.getColor();g.setColor(Color.PINK);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);public int enemyCount=10;
public static void main(String[] args){
} 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);TankMap tv=new TankMap();tv.init();});for(int i=0;i
}
if(r.nextInt(10)==9 && bloods.size()==0)
for(int i=0;i
} for(int i=0;i
} for(int i=0;i
} for(int i=0;i
} for(int i=0;i
} Shell s=shells.get(i);if(s.isLive && s.isgood){
} s.draw(g);s.hitTanks(enemys);s.hitTank(t);}else if(s.isLive&&!s.isgood){ Wall w=walls.get(i);w.wallb(t);w.draw(g);
Blood b=bloods.get(i);b.bloodb(t);b.draw(g);Explor e=explors.get(i);e.draw(g);EnemyTank et=enemys.get(i);et.draw(g);bloods.add(new Blood());bloods.remove(0);if(r.nextInt(30)==7 && bloods.size()==1)public void update(Graphics g){ } cla PaintThread implements Runnable{
public void run(){
while(true){ repaint();time++;paint(g);
}
}
}
} try{
} Thread.sleep(100);e.printStackTrace();}catch(InterruptedException e){ cla DirectionHandler extends KeyAdapter{
} public void keyPreed(KeyEvent arg0){ } t.checkDirection(arg0);
Tank类:
public cla Tank {
public static final int WIDTH=50,HEIGHT=50,xspeed=10,yspeed=10;public int x=400,y=300;public Direction direction = Direction.STOP;TankMap tm;boolean isLive = true;boolean isgood = true;int life = 100;public int zhuanxiang=1;public boolean isLive(){ } public void setLive(boolean isLive){ } public int getLife(){ } public void setLife(int life){ } public Tank(){} public Tank(TankMap t){ } public void draw(Graphics g){ if(zhuanxiang==1){ tm=t;this.life = life;return life;this.isLive=isLive;return isLive;
}
} ImageIcon icon=new ImageIcon(“tank_shang.gif”);Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);else if(zhuanxiang==-2){
} else if(zhuanxiang==2){
} else {
}
/*Color c = g.getColor();g.setColor(Color.RED);g.fillOval(x,y,WIDTH,HEIGHT);g.setColor(c);*/ move(direction);ImageIcon icon=new ImageIcon(“tank_xia.gif”);Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);ImageIcon icon=new ImageIcon(“tank_zuo.gif”);Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);ImageIcon icon=new ImageIcon(“tank_you.gif”);Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);public void move(Direction d){
if(d==Direction.STOP){ }else if(d==Direction.UP){
zhuanxiang=1;y-= yspeed;if(y=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
} public void fire(){ tm.shells.add(new if(k.getKeyCode()==KeyEvent.VK_UP){
} if(k.getKeyCode()==KeyEvent.VK_F){ } fire();direction=Direction.UP;direction=Direction.RIGHT;direction=Direction.DOWN;direction=Direction.LEFT;}else if(k.getKeyCode()==KeyEvent.VK_RIGHT){ }else if(k.getKeyCode()==KeyEvent.VK_DOWN){ }else if(k.getKeyCode()==KeyEvent.VK_LEFT){ Shell(this.x+WIDTH/2,this.y+HEIGHT/2,this.direction,tm,Color.RED,} public Rectangle getRec(){ } return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);true));EnemyTank类:
public cla EnemyTank extends Tank {
public static final int WIDTH=20,HEIGHT=20,xspeed=3,yspeed=3;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();int randomCount = r.nextInt(10)+5;
public EnemyTank(){} public EnemyTank(int wx,int wy,Color c){
} @Override public void draw(Graphics g){
} public void move(){
if(randomCount==0){
} randomCount--;if(r.nextInt(40)>36){ } if(direction==Direction.UP){
ImageIcon icon=new ImageIcon(“tank_shang.gif”);Image enemytankImage=icon.getImage();y-=yspeed;if(y=800-WIDTH)x=800-WIDTH;}else if(direction==Direction.DOWN){ ImageIcon icon=new ImageIcon(“tank_xia.gif”);Image enemytankImage=icon.getImage();y+=yspeed;if(y>=600-HEIGHT)y=600-HEIGHT;}else if(direction==Direction.LEFT){ ImageIcon icon=new ImageIcon(“tank_zuo.gif”);
}
}
} Image enemytankImage=icon.getImage();x-=xspeed;if(x
Shell(this.x+WIDTH/2,this.y+HEIGHT/2,this.direction,tm,Color.BLUE} public Rectangle getRec(){ } return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);,false));Blood类:
public cla Blood {
public final int WIDTH=30,HEIGHT=30;public int
x=
new
Random().nextInt(770),y=
new Random().nextInt(570);TankMap tm;{
} public boolean bloodb(Tank t){
if(t.isLive&&this.getRec().intersects(t.getRec())){
if(t.getLife()
} else { System.out.println(“blood up”);t.setLife(100);System.out.println(“恭喜你,补血啦啦啦!”);t.setLife(t.getLife()+40);tm.bloods.remove(this);
ImageIcon icon=new ImageIcon(“blood.JPG”);Image tankImage=icon.getImage();g.drawImage(tankImage,x,y,null);public void draw(Graphics g)
}
}
} } tm.bloods.remove(this);return false;public Rectangle getRec(){ } return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);Shell类:
public cla Shell {
public final int WIDTH=5,HEIGHT=5,xspeed=8,yspeed=8;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){
} public Shell(int xd,int yd,Direction d,TankMap t,Color c,boolean 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);x=xd;y=yd;dir=d;tm=t;color=c;isgood=g;x=xd;y=yd;dir=d;tm=t;}else{
} } tm.shells.remove(this);public void move(Direction d){
} public Rectangle getRec(){ } public boolean hitTank(Tank t){ if(this.isLive&&t.isLive&&this.getRec().intersects(t.getRec())){/return new Rectangle(this.x,this.y,this.WIDTH,this.HEIGHT);if(d==Direction.UP){
} y-=yspeed;if(y=800)islive=false;}else if(d==Direction.DOWN){ y+=yspeed;if(y>=600)islive=false;}else if(d==Direction.LEFT){ x-=xspeed;if(x
t.setLife(t.getLife()-20);
} public boolean hitTanks(List enemyTanks){
} return false;if(t.getLife()
} this.islive=false;Explor e=new Explor(x-3,y-3,this.tm);tm.explors.add(e);return true;t.setLive(false);t.direction=Direction.STOP;JOptionPane.showMeageDialog(tm, “Game Over!”);System.exit(0);
}
} EnemyTank e;for(int i=0;i
} return false;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;过程收获
这已经是本学期第二个小程序了,有了第一份的基础,做第二次的时候明显熟练的很多,效率比之前也提高了很多,求助老师与同学也少了许多,基本可以独自完成坦克大战这一小游戏
可能是收以前学习的知识影响吧,在刚刚学习的时候总摆脱不了思维定势的阴影,总是找不到感觉,老师讲的都会,可到自己写的时候却完全无从下手,“难道我真的一无是处,什么都做不了?”,我已经近乎崩溃了,或许是我的性格原因吧,很快我就说服自己,走出了阴霾,我想起曾听一位说过的话:我的天资愚钝,也许别人花一天就能做完的事我肯能要话十天,但我知道,我花一天去做一件事永远没有花十天时间做的好,那样也就永远赶不上别人。所以我不停的看老师的代码,不停的问助教老师,就这样不厌其烦的,有了长足的进步。
java体系知识点很多,很多东西是要记忆的,可能会学了后面忘了前面,所以,一定要有“一百万次理论”的实践,那样没有什么事是做不好的。这又将是我人生的一笔弥足珍贵的财富,我相信这绝不是一笔意外的财富。在java学习过程中出现的不足,在学习中由于为了追求学得快,导致敲的代码很少,所以很多的知识都不牢固,很容易忘记,每当提到有关的问题是只知道但很难解决;需要通过很多时间去查资料。这样让我导致出现了不自信和有了不乐意敲代码想法。所以我们学编程的要想满足别人的要求,必须先满足自己,多敲代码,让自己有实力有信心。
学生签名:
日期:2014年4月15日
坦克大战明阳天下拓展项目简介团队的所有成员在规定的时间和规则的约束下,进行角色分配后,蒙上双眼依次进入模拟战场,在躲避地雷的同时用炮弹尽可能的击中对手,最终战场剩余人数......
坦克大战小学作文同学们,你们玩过“坦克”游戏吗?如果没有玩过,那就听我给你介绍介绍吧!下午,我们排着整齐的队伍来到了操场,那早已是“人山人海”、“水泄不通”了。我们挤了进去......
实习报告学校:学院:专业班级:学号:姓名:中南大学信息科学与工程信息安全0801 0909080910 李亨实习单位:湖南省软件评测中心实习内容:C++游戏开发实习时间:2011.9.21-2011.9.9实习心......
坦克大战一.教学目标:学习新的形状——六边形,并运用六边形进行绘画。 二.教学准备:8开素描纸、油性笔、油画棒。 三.教学重点:重点:运用六边形进行绘画。难点:颜色的搭配与填涂。......
坦克大战动手写一个练习项目: 一.系统分析:需求分析: 启动游戏后: 1.展现出一个800*600的游戏界面,游戏界面不可调整大小,游戏界面点击右上角的红叉后关闭。 2.信息统计功能,在游戏......
