坦克重叠有八种情况
举例(敌人坦克与我方坦克):
第一种: 当我方坦克方向向上(宽40,高60),敌人坦克方向向上或向下时。我方坦克左上角或者右上角坐标落在敌人坦克的区域内。
第二种: 当我方坦克方向向上(宽40,高60),敌人坦克方向向左或向右时。我方坦克左上角或者右上角坐标落在敌人坦克的区域内。
第三种:当我方坦克方向向右(宽60,高40),敌人坦克方向向上或向下时。我方坦克右上角或者右下角坐标落在敌人坦克的区域内。
第四种:当我方坦克方向向右(宽60,高40),敌人坦克方向向左或向右时。我方坦克右上角或者右下角坐标落在敌人坦克的区域内。
第五种:当我方坦克方向向下(宽40,高60),敌人坦克方向向上或向下时。我方坦克左下角或者右下角坐标落在敌人坦克的区域内。
第六种:当我方坦克方向向下(宽40,高60),敌人坦克方向向左或向右时。我方坦克左下角或者右下角坐标落在敌人坦克的区域内。
第七种:当我方坦克方向向左(宽60,高40),敌人坦克方向向上或向下时。我方坦克左上角或者右下角坐标落在敌人坦克的区域内。
第八种:当我方坦克方向向左(宽60,高40),敌人坦克方向向左或向右时。我方坦克左下角或者右下角坐标落在敌人坦克的区域内。
每一个敌人坦克必须持有enemyTanks这个集合 解决办法:在实例化对象后,将该类的enemyTanks设置给敌人坦克类。
修改坦克移动规则,现在必须满足向前走30距离并且没有发生碰撞(调用isTouchEnemyTank()方法,返回true代表碰撞,false代表没有发生碰撞)
//编写方法,判断当前的这个敌人坦克,是否和enmyTanks中的其他坦克发生的重叠或者碰撞
public boolean isTouchEnemyTank() {
//判断当前敌人坦克(this)方向
switch (this.getDirect()) {
case 0://上
//让当前敌人坦克和其他所有敌人坦克比较
for (int i = 0; i < enemyTanks.size(); i++) {
//从Vector中取出一个敌人坦克
EnemyTank enemyTank = enemyTanks.get(i);
//不和自己比较
if (enemyTank != this) {
//如果敌人坦克是上/下
//1.如果敌人坦克是上/下 x的范围 [enemyTank.getX(),enemyTank.getX() + 40]
// y的范围 [enemyTank.getY(),enemyTank.getY() + 60]
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当前坦克 左上角的坐标[this.getX(),this.getY()]
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 40
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 60) {
return true;
}
// 当前坦克 右上角的坐标[this.getX() + 40 ,this.getY()]
if (this.getX() + 40 >= enemyTank.getX()
&& this.getX() + 40 <= enemyTank.getX() + 40
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 60) {
return true;
}
}
//如果敌人坦克是左/右
//2.如果敌人坦克是左/右 x的范围[enemyTank.getX(),enemyTank.getX() + 60]
// y的范围[enemyTank.getY(),enemyTank.getY() + 40]
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当前坦克 左上角的坐标[this.getX(),this.getY()]
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 60
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 40) {
return true;
}
// 当前坦克 右上角的坐标[this.getX() + 40 ,this.getY()]
if (this.getX() + 40 >= enemyTank.getX()
&& this.getX() + 40 <= enemyTank.getX() + 60
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 40) {
return true;
}
}
}
}
break;
case 1://右
//让当前敌人坦克和其他所有敌人坦克比较
for (int i = 0; i < enemyTanks.size(); i++) {
//从Vector中取出一个敌人坦克
EnemyTank enemyTank = enemyTanks.get(i);
//不和自己比较
if (enemyTank != this) {
//如果敌人坦克是上/下
//1.如果敌人坦克是上/下 x的范围 [enemyTank.getX(),enemyTank.getX() + 40]
// y的范围 [enemyTank.getY(),enemyTank.getY() + 60]
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当前坦克 右上角的坐标[this.getX()+60,this.getY()]
if (this.getX() + 60 >= enemyTank.getX()
&& this.getX() + 60 <= enemyTank.getX() + 40
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 60) {
return true;
}
// 当前坦克 右下角的坐标[this.getX() + 60,this.getY() + 40]
if (this.getX() + 60 >= enemyTank.getX()
&& this.getX() + 60<= enemyTank.getX() + 40
&& this.getY() + 40>= enemyTank.getY()
&& this.getY() + 40<= enemyTank.getY() + 60) {
return true;
}
}
//如果敌人坦克是左/右
//2.如果敌人坦克是左/右 x的范围[enemyTank.getX(),enemyTank.getX() + 60]
// y的范围[enemyTank.getY(),enemyTank.getY() + 40]
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当前坦克 右上角的坐标[this.getX()+60,this.getY()]
if (this.getX()+60 >= enemyTank.getX()
&& this.getX()+60 <= enemyTank.getX() + 60
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 40) {
return true;
}
// 当前坦克 右下角的坐标[this.getX() + 60,this.getY() + 40]
if (this.getX() + 60 >= enemyTank.getX()
&& this.getX() + 60 <= enemyTank.getX() + 60
&& this.getY() + 40 >= enemyTank.getY()
&& this.getY() + 40 <= enemyTank.getY() + 40) {
return true;
}
}
}
}
break;
case 2://下
//让当前敌人坦克和其他所有敌人坦克比较
for (int i = 0; i < enemyTanks.size(); i++) {
//从Vector中取出一个敌人坦克
EnemyTank enemyTank = enemyTanks.get(i);
//不和自己比较
if (enemyTank != this) {
//如果敌人坦克是上/下
//1.如果敌人坦克是上/下 x的范围 [enemyTank.getX(),enemyTank.getX() + 40]
// y的范围 [enemyTank.getY(),enemyTank.getY() + 60]
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当前坦克 左下角的坐标[this.getX(),this.getY() + 60]
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 40
&& this.getY() + 60 >= enemyTank.getY()
&& this.getY() + 60 <= enemyTank.getY() + 60) {
return true;
}
// 当前坦克 右下角的坐标[this.getX() + 40,this.getY() + 60]
if (this.getX() + 40 >= enemyTank.getX()
&& this.getX() + 40<= enemyTank.getX() + 40
&& this.getY() + 60>= enemyTank.getY()
&& this.getY() + 60<= enemyTank.getY() + 60) {
return true;
}
}
//如果敌人坦克是左/右
//2.如果敌人坦克是左/右 x的范围[enemyTank.getX(),enemyTank.getX() + 60]
// y的范围[enemyTank.getY(),enemyTank.getY() + 40]
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当前坦克 左下角的坐标[this.getX(),this.getY()+60]
if (this.getX()+60 >= enemyTank.getX()
&& this.getX()+60 <= enemyTank.getX() + 60
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 40) {
return true;
}
// 当前坦克 右下角的坐标[this.getX() + 40,this.getY() + 60]
if (this.getX() + 60 >= enemyTank.getX()
&& this.getX() + 60 <= enemyTank.getX() + 60
&& this.getY() + 40 >= enemyTank.getY()
&& this.getY() + 40 <= enemyTank.getY() + 40) {
return true;
}
}
}
}
break;
case 3://左
//让当前敌人坦克和其他所有敌人坦克比较
for (int i = 0; i < enemyTanks.size(); i++) {
//从Vector中取出一个敌人坦克
EnemyTank enemyTank = enemyTanks.get(i);
//不和自己比较
if (enemyTank != this) {
//如果敌人坦克是上/下
//1.如果敌人坦克是上/下 x的范围 [enemyTank.getX(),enemyTank.getX() + 40]
// y的范围 [enemyTank.getY(),enemyTank.getY() + 60]
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当前坦克 左上角的坐标[this.getX(),this.getY()]
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 40
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 60) {
return true;
}
// 当前坦克 左下角的坐标[this.getX() ,this.getY() + 40]
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 40
&& this.getY() + 40>= enemyTank.getY()
&& this.getY() + 40<= enemyTank.getY() + 60) {
return true;
}
}
//如果敌人坦克是左/右
//2.如果敌人坦克是左/右 x的范围[enemyTank.getX(),enemyTank.getX() + 60]
// y的范围[enemyTank.getY(),enemyTank.getY() + 40]
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当前坦克 左上角的坐标[this.getX(),this.getY()]
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 60
&& this.getY() >= enemyTank.getY()
&& this.getY() <= enemyTank.getY() + 40) {
return true;
}
// 当前坦克左下角的坐标[this.getX() ,this.getY() + 40]
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 60
&& this.getY() + 40 >= enemyTank.getY()
&& this.getY() + 40 <= enemyTank.getY() + 40) {
return true;
}
}
}
}
break;
}
return false;//没有碰撞
}