java项目之——坦克大战26

原创 2016年08月30日 10:25:13

本版本做最后的修正:敌人死光重新加入,主战坦克死掉F2重新开始。

1.主类中: 画方法里面判断,如果无敌方坦克,就添加。

		if(tanks.size()<=0){
			for(int i=0;i<10;i++){
				tanks.add(new Tank(50+40*(i+1),50,false,Tank.Direction.D,this));
			}
		}

2.坦克类中:按键监听里面,如果战亡,重新复活。

case KeyEvent.VK_F2: 
			if(!this.live){
				this.live = true;
				this.life= 100;
			}

本版本为最后一个版本,一个小坦克项目写了这么久也是不容易啊,希望以后多看,麻雀虽小五脏俱全,里面涉及到的java基础知识很多,面向对象,集合,泛型,内部类, 线程,监听,变量,数据,对象,构造方法,this等等的用法。还有做项目的思维,一步一步不能太急,再难的问题,分解下来就会很简单。


下一阶段:复习java知识,投递简历。

附tankClient的代码:

public class TankClient extends Frame {
	public static final int GAME_WIDTH =800;
	public static final int GAME_HEIGHT =600;
	
	Tank myTank = new Tank(50, 50,true,Tank.Direction.STOP,this);
    //Tank enemyTank = new Tank(100,100,false,this); 
	
	Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20, this);
	
	Image offScreenImage = null;
	List<Missile> missiles = new ArrayList<Missile>();     //泛型  删加 效率相对高
	
	List<Explode> explodes = new ArrayList<Explode>();     
	
	List<Tank> tanks = new ArrayList<Tank>();
	
	Blood b =  new Blood(); 
	
	public void paint(Graphics g) {
		g.drawString("missiles count:"+missiles.size(), 10,50);
		//g.drawString("explodes count:"+explodes.size(), 10,70);
		
		if(tanks.size()<=0){
			for(int i=0;i<10;i++){
				tanks.add(new Tank(50+40*(i+1),50,false,Tank.Direction.D,this));
			}
		}
		
	    for (int i = 0; i < missiles.size(); i++) {
			Missile m = missiles.get(i);
			m.hitWall(w1);
			m.hitWall(w2);
			m.draw(g);
			m.hitTanks(tanks);
			m.hitTank(myTank);
		}
            
	    for (int i = 0; i < explodes.size(); i++) {
			Explode e = explodes.get(i);
			e.draw(g);
			
		}
	    
    	for(int i=0; i<10; i++){
	        Tank t = tanks.get(i);
	        t.collidesWithWall(w1);
	        t.collidesWithWall(w2);
	        t.collidesWithTanks(tanks);
	        t.draw(g);
	    }
    	b.draw(g);
    	w1.draw(g);
    	w2.draw(g);
		myTank.draw(g);	
		myTank.eat(b);
		
	}

	public void update(Graphics g) {
		if(offScreenImage == null){
			offScreenImage = this.createImage(GAME_WIDTH,GAME_HEIGHT);
		}
		Graphics gOffScreen = offScreenImage.getGraphics();
		Color c = gOffScreen.getColor();
		gOffScreen.setColor(Color.GRAY);
		gOffScreen.fillRect(0, 0, 800, 600);
		gOffScreen.setColor(c);
		print(gOffScreen);
		g.drawImage(offScreenImage, 0, 0, null);
	}

	public void lauchFrame(){
		for(int i=0;i<10;i++){
			tanks.add(new Tank(50+40*(i+1),50,false,Tank.Direction.D,this));
		}
		this.setSize(GAME_WIDTH,GAME_HEIGHT);
		this.setTitle("TankWar");
		this.setLocation(80, 60);
		this.setVisible(true);
		this.addWindowListener(new WindowAdapter(){
			public void windowClosing(WindowEvent e) {
			    System.exit(0);	
			}
		});
		this.setResizable(false);
		new Thread(new paintThread()).start();
		this.addKeyListener(new KeyMonitor());
	}
	public static void main(String[] args) {
		TankClient tc = new TankClient();
		tc.lauchFrame();
	}
	private class paintThread implements Runnable {   //线程 内部类 为此线程服务

		public void run() {
			while(true){
				repaint();
				try {
					Thread.sleep(50);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
		
	}
	private class KeyMonitor extends KeyAdapter{
		
		public void keyReleased(KeyEvent e) {
			myTank.keyReleased(e);
		}

		public void keyPressed(KeyEvent e) {
			myTank.keyPressed(e);
		}
	}	
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java项目之——坦克大战05

功能:代码重构(设置常量,比较简单) 内容:需要多处改变的量定义为常量。 public static final int GAME_WIDTH =800; public static final ...

java项目之——坦克大战20

本版本:添加两堵墙。 1.在主类中:墙对象 Wall w1 = new Wall(100, 200, 20, 150, this), w2 = new Wall(300, 100, 300, 20,...

java项目之——坦克大战10

实现了坦克的移动,现在要实现坦克可以打出炮弹: 功能:添加子弹类,添加方法和参数。 1.位置和方向属性 int x,y; Tank.Direction dir; 2.构造方法...

Java学习总结之坦克大战项目(完结版)

V1.0:

Java学习总结之坦克大战项目(二)

V0.4:坦克类初步建好了,接下来考虑子弹,这里我曾纠结子弹到底是坦克的内部类还是兄弟类。根据面向对象的分析,子弹打出后,无论坦克是否消亡,子弹都会存在,所以子弹不是坦克的内部类,所以我们新建一个子弹...

Java学习总结之坦克大战项目(一)

这个项目呢,我仍然是边看马士兵老师的Java教程的坦克大战视频,边写的。 当然,很多地方都是经过了我的思考,然后改写的,版本顺序也不一样,因为有时候我会停下视频然后思考我的代码,然后改进了继续看,这...

JAVA项目学习之坦克大战图片版

坦克大战图片版即在单机版的基础上将画出的坦克改成一张张的图片,提高界面的美观性。 其关键是把硬盘上的图片读到内存再画出来 private int step = 0; /** * 定义工具,不...

Java项目--坦克大战1

前言 我们既然要做这个游戏,首先我们必须知道这个游戏里面应该有什么成员,成员都有什么属性。 成员: 1、游戏界面的面板 ①关卡 ②难度 ③总成绩 2、自己的英雄坦克 ①方向 ②子弹 ③生命值 3、敌军...

JAVA项目学习之坦克大战单机版

本科阶段尽管学过JAVA课程,却始终感觉在云里雾里。这段时间认真学习了马士兵老师JAVA基础教程,跟着写了TankWar的小项目,感觉对JAVA中类的使用有了许多新的认识,思路比原来也清晰多了,在此总...

【Java_项目篇<1>】--JAVA实现坦克大战游戏--子弹连发+爆炸效果(四)

前期相关文章【Java_项目篇】–JAVA实现坦克大战游戏–画出坦克(一) 【Java_项目篇】–JAVA实现坦克大战游戏–坦克移动+添加敌方坦克(二) 【Java_项目篇】–JAVA实现坦克大战...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java项目之——坦克大战26
举报原因:
原因补充:

(最多只允许输入30个字)