java项目之——坦克大战14

原创 2016年08月28日 08:01:54

上一个版本:坦克打出多发子弹;

功能:解决炮弹不消亡的问题,解决坦克出界问题。

           子弹打中对方坦克或者出界,定义一个控制生死的变量。

1.定义变量:live

private boolean live =true;      //炮弹是否在界面的变量
2.定义tc 并且判断islive, 如果 没有存在就调用移除方法。

  private TankClient tc;
  public boolean isLive() {          //调用isLive()来判断
         return live;
         }

public void draw(Graphics g){
        
		if(!live){
        	tc.missiles.remove(this);     //如果不在界面则移除
                return;
        }
		Color c = g.getColor();
		g.setColor(Color.BLACK);
		g.fillOval(x, y, WIDTH,HEIGHT);
		g.setColor(c);
		
		move();
	}
3.重写构造方法,tc来传入fire。	
public Missile(int x, int y,Tank.Direction dir,TankClient tc) {
		this.x = x;
		this.y = y;
		this.dir = dir;
		this.tc = tc;
	}
4.判断是否在界面内。
if(x<0||y<0||x>TankClient.GAME_WIDTH||y>TankClient.GAME_HEIGHT){         //数学上不在界面的表达
			live = false;
		}
5.坦克类中修改。
public Missile fire(){
		int x=this.x+Tank.WIDTH/2-Missile.HEIGHT/2;
		int y=this.y-Missile.WIDTH/2+Tank.HEIGHT/2;
		Missile m = new Missile(x, y, ptDir,this.tc);           //this.tc 是使用对方的引用,对子弹进行控制
		tc.missiles.add(m);
		return m;
	}

6.坦克的出界问题相对简单一些:不让坦克出界,在move中添加代码:
void move(){
	   switch(dir){
	   case L: x -= XSPEED;break;
	   case LU: x -= XSPEED; y -= XSPEED;break;
	   case U: y -= XSPEED;break;
	   case RU: x += XSPEED;y -= XSPEED;break;
	   case R: x += XSPEED;break;
	   case RD: x += XSPEED;y += XSPEED;break;
	   case D: y += XSPEED;break;
	   case LD: x -= XSPEED;y += XSPEED;break;
	   case STOP: break;
	   }	  
	   
	   if(this.dir!=Direction.STOP){
	       this.ptDir = dir;
	   }
	   //不让坦克出界代码
	   if(x < 0) x=0;
	   if(y<0) y=0;
	   if(x+Tank.WIDTH>TankClient.GAME_WIDTH) x=TankClient.GAME_WIDTH-Tank.WIDTH;
	   if(y+Tank.HEIGHT>TankClient.GAME_HEIGHT) y=TankClient.GAME_HEIGHT-Tank.HEIGHT;
   }

总结:子弹出界和坦克出界两个问题不同处理,再次理解持有对方引用的解决问题的方法。

下一版本:制造出敌方坦克。


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

相关文章推荐

java项目之——坦克大战19

本版本:让敌人的坦克更加智能(人工智能) 1.首先让它动起来:方向(move) 然后 随机数产生器 a.坦克中加方法: public Tank(int x,int y,Boolean good,...

java项目之——坦克大战05

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

java项目之——坦克大战26

本版本做最后的修正:敌人死光重新加入,主战坦克死掉F2重新开始。 1.主类中: 画方法里面判断,如果无敌方坦克,就添加。 if(tanks.size()...

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项目之——坦克大战18

本版本:画出多辆坦克。 1.创建敌方坦克集合 List tanks = new ArrayList();2.循环画出,坦克对象t public void paint(Graphics g) { ...

java项目之——坦克大战15

在15版本之前解决了坦克和炮弹的问题,现在,开始写敌方坦克的代码。 1.加入区别敌我的量bGood(也可以建一个敌方坦克类,在这没有必要) private boolean good; 2。修改构...

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

V1.0:

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

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

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

这个项目呢,我仍然是边看马士兵老师的Java教程的坦克大战视频,边写的。 当然,很多地方都是经过了我的思考,然后改写的,版本顺序也不一样,因为有时候我会停下视频然后思考我的代码,然后改进了继续看,这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java项目之——坦克大战14
举报原因:
原因补充:

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