我是Java新手,但我的问题可能与语言无关。
我有一个Player类,在我的游戏逻辑中,我有一个地图商店创建的玩家。
我写了一个方法 - getNext()
- 将下一个玩家返回给我,它就像一个魅力。但是在游戏中,被淘汰的玩家一定不能排队。所以我写了一个新的方法 - getNextAlive()
- 应该返回下一个活着的(!isLoser)播放器。如果没有任何输家玩家,则getNextAlive()正在运行,但如果有,则程序进入while循环并无限循环。在while循环中,我切换到下一个播放器并确定next是活着的,但我认为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是否完全合适?
答案 0 :(得分:8)
将p = getNext();
替换为p = p.getNext();