我是Java新手,但我的问题可能与语言无关。我有一个玩家类,在我的游戏逻辑,我有一个地图商店创建的玩家。我写了一个方法- getNext()
-返回下一个球员给我,它像一个魅力。但在游戏中,被淘汰的玩家不能排队。所以我写了一个新方法- getNextAlive()
-应该返回下一个活着的(!isLoser)玩家。如果没有任何失败的玩家,getNextAlive()正在工作,但如果有,程序进入while循环并无限循环。在while循环中,我切换到下一个玩家,并确保下一个是活的,但我认为while(p.checkLose())
不受影响,而变化,并给出这个输出永远:
球员: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();