tankwar的java坦克子弹撞墙_TankWar 单机(JAVA版)版本2.0.5 坦克撞墙的处理

本文介绍了如何在Java实现坦克大战游戏中,坦克和子弹碰撞墙的处理方法。通过获取地图和坦克的矩形位置,判断是否相交,并根据地形类型决定坦克是否能通过。当坦克撞到石头墙、土墙或水池时,将其移动回原来的位置。涉及到的方法包括坦克的tankHitWall()方法和Wall类的相关方法。
摘要由CSDN通过智能技术生成

首先附上运行结果:

0818b9ca8b590ca3270a3433284dd417.png

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

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

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

首先在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了~~加油哦

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值