我是Java新手,但是我的问题可能与语言无关。
我有一个Player类,按照我的游戏逻辑,我有一个地图存储着创建的玩家。
我编写了一个方法-getNext()-,该方法将下一个播放器返回给我,并且它的工作原理就像是一种魅力。但是在游戏中,被淘汰的玩家一定不能排队。因此,我编写了一个新方法-getNextAlive()-应该返回下一个存活(!isLoser)播放器。如果没有任何失败者,则getNextAlive()可以工作,但是如果存在,程序将进入while循环并无限循环。在while循环中,我切换到下一个播放器,并确定next仍然存在,但是我认为while(p.checkLose())在while更改中不受影响,并永久给出以下输出:

球员:allyozturk

我不知道为什么会这样发生,我应该怎么做才能跳过所有isLoser播放器并获得下一个存活的播放器? (顺便说一句,我使用libgdx ArrayMap,因此我的地图已排序,因为下一个玩家的顺序对我的游戏很重要)

我在游戏中使用:

currPlayer = currPlayer.getNextAlive();


这里我的Player.java是:

    public class Player{
        private static int counter;
        public static int alives;

        private int uniqueId;
        private String name;
        private boolean isLoser;
        .
        .
        .
        private Player getNext(){
            int index = MyGdxGame.players.indexOfKey(uniqueId);
            if(++index < MyGdxGame.players.size)
                return MyGdxGame.players.getValueAt(index);
            else
                return MyGdxGame.players.getValueAt(0);
        }

        public Player getNextAlive(){
            Player p = getNext();
            while(p.checkLose()){
                p = getNext();
                MyGdxGame.logger.error("player: " + p.getName()); // just for testing purpose
            }
            return p;
        }
    }


还有一个好奇心和一些力所能及的问题:使用方法返回Player类中的Player是否完全合适?

最佳答案

p = getNext();替换为p = p.getNext();

10-08 18:59