我是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();