坦克大小为40*60,有四种方向,上下左右
那么我们用一个switch来判断,设置0上1右2下3左
进入判断后先循环遍历敌方坦克集合取出一个敌方坦克对象
需要判断两个点 方向为上时,判断左上角和右上角是否进入要比较坦克区域
当要比较对象方向为上下时 与方向为左右时 要判断的xy坐标不同
如果在区域内了返回 true
这就是一个方向完成了
附上源码
case 0://上
for (int i = 0; i < enemyTanks.size(); i++) {//让当前坦克与其余所有坦克进行判断
EnemyTank enemyTank = enemyTanks.get(i);
if (enemyTank != this) {//不和自己比较
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当要比较的坦克方向是上或者下时
//X的范围【enemyTank.getX(),enemyTank.getX()+40】
//Y的范围【enemyTank.getY(),enemyTank.getY()+60】
//当前坦克的左上角坐标【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;
}
}
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当要比较的坦克方向是左或者右时
//X的范围【enemyTank.getX(),enemyTank.getX()+60】
//Y的范围【enemyTank.getY(),enemyTank.getY()+40】
//当前坦克的左上角坐标【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;
这样调整的比较四个方向,八种情况后即可退出swicth 退出后返回false
附上比较是否碰撞方法
public boolean isTouchTank() {
switch (this.getDirect()) {
case 0://上
for (int i = 0; i < enemyTanks.size(); i++) {//让当前坦克与其余所有坦克进行判断
EnemyTank enemyTank = enemyTanks.get(i);
if (enemyTank != this) {//不和自己比较
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当要比较的坦克方向是上或者下时
//X的范围【enemyTank.getX(),enemyTank.getX()+40】
//Y的范围【enemyTank.getY(),enemyTank.getY()+60】
//当前坦克的左上角坐标【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;
}
}
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当要比较的坦克方向是左或者右时
//X的范围【enemyTank.getX(),enemyTank.getX()+60】
//Y的范围【enemyTank.getY(),enemyTank.getY()+40】
//当前坦克的左上角坐标【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++) {//让当前坦克与其余所有坦克进行判断
EnemyTank enemyTank = enemyTanks.get(i);
if (enemyTank != this) {//不和自己比较
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当要比较的坦克方向是上或者下时
//X的范围【enemyTank.getX(),enemyTank.getX()+40】
//Y的范围【enemyTank.getY(),enemyTank.getY()+60】
//当前坦克的右上角坐标【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;
}
}
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当要比较的坦克方向是左或者右时
//X的范围【enemyTank.getX(),enemyTank.getX()+60】
//Y的范围【enemyTank.getY(),enemyTank.getY()+40】
//当前坦克的右上角坐标【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++) {//让当前坦克与其余所有坦克进行判断
EnemyTank enemyTank = enemyTanks.get(i);
if (enemyTank != this) {//不和自己比较
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当要比较的坦克方向是上或者下时
//X的范围【enemyTank.getX(),enemyTank.getX()+40】
//Y的范围【enemyTank.getY(),enemyTank.getY()+60】
//当前坦克的左下角坐标【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;
}
}
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当要比较的坦克方向是左或者右时
//X的范围【enemyTank.getX(),enemyTank.getX()+60】
//Y的范围【enemyTank.getY(),enemyTank.getY()+40】
//当前坦克的左下角坐标【this.getX(),this.getY()+60】
if (this.getX() >= enemyTank.getX()
&& this.getX() <= enemyTank.getX() + 60
&& this.getY() + 60 >= enemyTank.getY()
&& this.getY() + 60 <= enemyTank.getY() + 40) {
return true;
}
//当前坦克的右下角坐标【this.getX()+40,this.getY()+60】
if (this.getX() + 40 >= enemyTank.getX()
&& this.getX() + 40 <= enemyTank.getX() + 60
&& this.getY() + 60 >= enemyTank.getY()
&& this.getY() + 60 <= enemyTank.getY() + 40) {
return true;
}
}
}
}
break;
case 3://左
for (int i = 0; i < enemyTanks.size(); i++) {//让当前坦克与其余所有坦克进行判断
EnemyTank enemyTank = enemyTanks.get(i);
if (enemyTank != this) {//不和自己比较
if (enemyTank.getDirect() == 0 || enemyTank.getDirect() == 2) {
//当要比较的坦克方向是上或者下时
//X的范围【enemyTank.getX(),enemyTank.getX()+40】
//Y的范围【enemyTank.getY(),enemyTank.getY()+60】
//当前坦克的左上角坐标【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;
}
}
if (enemyTank.getDirect() == 1 || enemyTank.getDirect() == 3) {
//当要比较的坦克方向是左或者右时
//X的范围【enemyTank.getX(),enemyTank.getX()+60】
//Y的范围【enemyTank.getY(),enemyTank.getY()+40】
//当前坦克的左上角坐标【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;
}