java项目之——坦克大战14

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

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

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

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;
   }

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值