首先附上运行结果:
从图中可以看完无论是我的坦克 还是敌方坦克都不能通过石头墙 土墙 水池。可以通过灌木丛
道理和子弹击中坦克一样。获取地图的矩形位置,坦克的矩形位置,判断两个矩形是否相交。如果相交再根据地形是否为灌木丛
等,让坦克回到移动前的位置。
首先在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了~~加油哦