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

110 篇文章 6 订阅
27 篇文章 1 订阅

首先附上运行结果:


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

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

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

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

全部源码点击下载

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值