java项目之——坦克大战16

版本:一颗子弹击中敌方坦克——面向对象思维分析

           是否打中:hatTank方法;(游戏中碰撞检测,有些复杂,一般直接调用库方法)在这里我们应用碰撞类:getRect(返回值Rectangle)

1.子弹类中加入方法:

public Rectangle getRect(){
		return new Rectangle(x, y, WIDTH, HEIGHT);
	}

public boolean hitTank(Tank t){
		if(this.getRect().intersects(t.getRect()) )
		    return true;
	}
                   return false;
   }

public Rectangle getRect(){
		return new Rectangle(x, y, WIDTH, HEIGHT);
	}

2.在坦克类中定义生死量:

private boolean live = true;

public void setLive(boolean live){
		this.live = live; 
	}

如果不是生的,不画坦克 if(!live){
           return;
       }

public void draw(Graphics g) {
	   if(!live){
		   return;
	   }
	   
	    Color c = g.getColor();
	    if(good){
		    g.setColor(Color.RED);
		        }
	      else{ 
	    	g.setColor(Color.blue);
	    	  }
		g.fillOval(x, y, WIDTH, HEIGHT);
		g.setColor(c);
		
			   switch(ptDir){
			   case L: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT/2);break;
			   case LU:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y);break;
			   case U: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y);break;
			   case RU:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y);break;
			   case R: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y+Tank.HEIGHT/2);break;
			   case RD:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH, y+Tank.HEIGHT);break;
			   case D: g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x+Tank.WIDTH/2, y+Tank.HEIGHT);break;
			   case LD:g.drawLine(x+Tank.WIDTH/2, y+Tank.HEIGHT/2, x, y+Tank.HEIGHT);break;
			   }	   
		
		move();

   }
3.出现子弹没有消失的情况,和打死坦克的情况。  移除子弹,把代码放在画之前,这样判断更加合理,如果没有 live不用画

子弹类;

if(!live){
        	tc.missiles.remove(this);
            return;
        }

tank类:t.isLive()    //要加此方法

public boolean isLive() {
			return live;
	}

在hitTank中

public boolean hitTank(Tank t){
		if(this.getRect().intersects(t.getRect()) && t.isLive()){
			t.setLive(false);
			this.live=false;
			return true;	
		}
		    return false;
	}
总结:首先构造hitTank方法,坦克和子弹类中都引入getRect(),如果碰撞了,子弹和坦克都要消失,引入live,并构造方法,最后在主类中调用  m.hitTank(enemyTank); 实现一颗子弹击中敌方坦克。

下一版本:加入爆炸类。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值