防止敌人坦克重叠思路[java坦克大战]

坦克重叠有八种情况

举例(敌人坦克与我方坦克):
第一种: 当我方坦克方向向上(宽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;//没有碰撞
}

你可能感兴趣的:(韩顺平java坦克大战思路分析,java,intellij-idea,游戏)