坦克大战防止坦克重叠

防止敌人坦克发生重叠

  • 在敌人坦克类里面增加一个属性,
    将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);

posted on   千千阙歌0923  阅读(158)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示