我正在尝试制作纸牌游戏 Uno 的 Java 版本。在游戏中,有一张牌可以颠倒游戏顺序,因此如果玩家 1 打出该牌,那么接下来是玩家 3,然后是玩家 2,依此类推。但是,我很难尝试获得:
for(int i = 0; i < 3; i++){
if(game.skipNext){
game.playTurn((i + 1) % 3);
game.skipNext = false;
} else {
game.playTurn(i);
}
颠倒顺序,以便玩家 3 跟随玩家 1 等。
我有当前代码:
while(game.gameIsActive){
if(game.gameIsClockwise){
for(int i = 0; i < 3; i++){
if(game.skipNext){
game.playTurn((i + 1) % 3);
game.skipNext = false;
} else {
game.playTurn(i);
}
}
} else {
int loopStart = (game.newlyClockwise) ? game.activePlayer - 1/* Starts with previous player*/ : 2;
for(int i = loopStart; i > -1;i--) {
if(game.skipNext){
game.playTurn((i + 1) % 3);
game.skipNext = false;
} else {
game.playTurn(i);
}
}
}
}
作为我的游戏循环,但它不起作用。如果玩家 1 反向玩,玩家 2 仍继续玩。
最佳答案
我认为您不想使用 for
循环来实现此逻辑。您希望在打出反向卡后立即反转方向,而不是在 for 循环结束时反转方向。
我会依次处理它,将当前玩家视为状态的一部分,而不是循环变量。
尝试实现这样的东西(伪代码):
subroutine nextPlayer:
if direction == 1:
player = (player + 1) % playerCount
else:
player = (player - 1) % playerCount
main loop:
while game not over:
play turn (player)
if played skip:
nextPlayer
nextPlayer
else if played reverse:
direction = direction * -1
nextPlayer
else
nextPlayer
end if
end while
关于java - 在 Uno 中获取 for 循环以反转顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25800068/