首页 > 其他分享 >坦克大战防止坦克重叠

坦克大战防止坦克重叠

时间:2022-12-06 20:14:11浏览次数:44  
标签:enemy 重叠 40 大战 getX getY 坐标 && 坦克

防止敌人坦克发生重叠

  • 在敌人坦克类里面增加一个属性,
    将mypanel 对象的成员 Vector enemies=new Vector<>();设置到Enemy的成员enemieTanks
    Vector<Enemy> enemieTanks=new Vector<>();
  • 编写方法,判断当前的敌人坦克,是否和enemieTanks中的其他坦克发生的重叠
点击查看代码
public boolean isTouchEnemyTank(){
        //判断当前敌人坦克(this)方向
        switch (this.getDirect()){
            case 0://上
                for (int i = 0; i < enemieTanks.size(); i++) {
                    Enemy enemy = enemieTanks.get(i);
                    //不和自己比较
                    if (enemy!=this){
                        //如果敌人坦克是上下方向的
                        if(enemy.getDirect()==0||enemy.getDirect()==2){
                            if(this.getX()>=enemy.getX()//左上角坐标
                                    && this.getX()<=enemy.getX()+40
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                            if(this.getX()+40>=enemy.getX()//右上角坐标
                                    && this.getX()+40<=enemy.getX()+40
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                        }
                        //如果敌人坦克是左右方向的
                        if(enemy.getDirect()==1||enemy.getDirect()==3){
                            if(this.getX()>=enemy.getX()//左上角坐标
                                    && this.getX()<=enemy.getX()+60
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                            if(this.getX()+40>=enemy.getX()//右上角坐标
                                    && this.getX()+40<=enemy.getX()+60
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }
                break;
            case 1://右
                for (int i = 0; i < enemieTanks.size(); i++) {
                    Enemy enemy = enemieTanks.get(i);
                    //不和自己比较
                    if (enemy!=this){
                        //如果敌人坦克是上下方向的
                        if(enemy.getDirect()==0||enemy.getDirect()==2){
                            if(this.getX()+60>=enemy.getX()//右上角坐标
                                    && this.getX()+60<=enemy.getX()+40
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                            if(this.getX()+60>=enemy.getX()//右下角坐标
                                    && this.getX()+60<=enemy.getX()+40
                                    && this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+60){
                                return true;
                            }
                        }
                        //如果敌人坦克是左右方向的
                        if(enemy.getDirect()==1||enemy.getDirect()==3){
                            if(this.getX()+60>=enemy.getX()//右上角坐标
                                    && this.getX()+60<=enemy.getX()+60
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                            if(this.getX()+60>=enemy.getX()//右下角坐标
                                    && this.getX()+60<=enemy.getX()+60
                                    && this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }
                break;
            case 2://下
                for (int i = 0; i < enemieTanks.size(); i++) {
                    Enemy enemy = enemieTanks.get(i);
                    //不和自己比较
                    if (enemy!=this){
                        //如果敌人坦克是上下方向的
                        if(enemy.getDirect()==0||enemy.getDirect()==2){
                            if(this.getX()>=enemy.getX()//左下角坐标
                                    && this.getX()<=enemy.getX()+40
                                    && this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+60){
                                return true;
                            }
                            if(this.getX()+40>=enemy.getX()//右下角坐标
                                    && this.getX()+40<=enemy.getX()+40
                                    && this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+60){
                                return true;
                            }
                        }
                        //如果敌人坦克是左右方向的
                        if(enemy.getDirect()==1||enemy.getDirect()==3){
                            if(this.getX()>=enemy.getX()//左下角坐标
                                    && this.getX()<=enemy.getX()+60
                                    && this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+40){
                                return true;
                            }
                            if(this.getX()+40>=enemy.getX()//右下角坐标
                                    && this.getX()+40<=enemy.getX()+60
                                    && this.getY()+60>=enemy.getY()
                                    &&this.getY()+60<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }
                break;
            case 3://左
                for (int i = 0; i < enemieTanks.size(); i++) {
                    Enemy enemy = enemieTanks.get(i);
                    //不和自己比较
                    if (enemy!=this){
                        //如果敌人坦克是上下方向的
                        if(enemy.getDirect()==0||enemy.getDirect()==2){
                            if(         this.getX()>=enemy.getX()//左上角坐标
                                    && this.getX()<=enemy.getX()+40
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+60){
                                return true;
                            }
                            if(this.getX()>=enemy.getX()//左下角坐标
                                    && this.getX()<=enemy.getX()+40
                                    && this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+60){
                                return true;
                            }
                        }
                        //如果敌人坦克是左右方向的
                        if(enemy.getDirect()==1||enemy.getDirect()==3){
                            if(this.getX()>=enemy.getX()//左上角坐标
                                    && this.getX()<=enemy.getX()+60
                                    && this.getY()>=enemy.getY()
                                    &&this.getY()<=enemy.getY()+40){
                                return true;
                            }
                            if(this.getX()>=enemy.getX()//右上角坐标
                                    && this.getX()<=enemy.getX()+60
                                    && this.getY()+40>=enemy.getY()
                                    &&this.getY()+40<=enemy.getY()+40){
                                return true;
                            }
                        }
                    }
                }
                break;
        }
        return false;
    }
- 在坦克走动的时候增加以上函数的判断 - 在Panel里面生成坦克时给每个enemy传整个enemy数组
点击查看代码
 Enemy enemy=new Enemy(100*(i+1),0);
            // 将enemyTanks设置给enemy
 enemy.setEnemieTanks(enemies);

标签:enemy,重叠,40,大战,getX,getY,坐标,&&,坦克
From: https://www.cnblogs.com/hhncoding/p/16960369.html

相关文章