首先附上运行结果:

TankWar 单机(JAVA版)版本2.0.5 坦克撞墙的处理_坦克撞墙的处理

从图中可以看完无论是我的坦克 还是敌方坦克都不能通过石头墙 土墙 水池。可以通过灌木丛

道理和子弹击中坦克一样。获取地图的矩形位置,坦克的矩形位置,判断两个矩形是否相交。如果相交再根据地形是否为灌木丛

等,让坦克回到移动前的位置。

首先在wall类中求出各种地形的宽和高

public void setWidthAndHeight(Image img)
{
width=img.getWidth(TankClient.tc);
height=img.getHeight(TankClient.tc);
}



然后返回该墙体的矩形位置的方法

public Rectangle getRec()
{
return new Rectangle(x, y, width, height);
}


最后别忘了变量id的get 方法

public int getId() {
return id;
}


做完了这些  ,就要在Tank类中判断坦克是否和墙体相交

//判断坦克是否撞墙
public boolean tankHitWall(Wall wall)
{
if(this.getRec().intersects(wall.getRec()))
{
int id=wall.getId();
if(id==2||id==3||id==4||id==6)
{
return true;
}
}
return false;
}


翻译成中文:

如果当前坦克和wall墙体相交(Rectangle.intersects(Rectangle))这个方法就是判断两个矩形是否相交的

id=墙体的类别

如果wall是石头墙或者土墙或者水池

撞墙了


没有撞墙

如果坦克撞墙了怎么回到之前的位置?

所以我又定义了两个整形变量oldX,oldY 。

// 坦克位移前坐标
private int oldX;
private int oldY;


在Tank类的move方法中存贮坦克移动之前的位置

oldX=x;
oldY=y;


然后就是遍历墙体集合  判断坦克是否撞墙。在哪里判断呢?肯定要在move方法里~

坦克移动就是在这里嘛

for(Wall wall:TankClient.wallsList)
{
if(tankHitWall(wall))
{
x=oldX;
y=oldY;
}
}


如果撞墙了就回到之前的位置~

ok了~~加油哦

​全部源码点击下载​