java - 在 Uno 中获取 for 循环以反转顺序

标签 java for-loop

我正在尝试制作纸牌游戏 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/

相关文章:

java - 节点类中的下一个节点

java - 无法理解 Math.min(0,-0) 的输出

php - 将循环减少为一个-仅限提示

python - 如何在 for 循环中将两个或多个图像添加到同一张幻灯片 python-pptx

r - 使用for循环在R中创建一个更大的矩阵w original?

java - 如何使用 clojure 单元测试获得 java 生产代码的代码覆盖率?

java - 从展平 DFS 结构创建递归结构

java - Mockito - 准确验证所有参数

c - while(true) 和 for(;;) 之间有什么区别?

r - 如何替换嵌套的 for 循环?