【问题标题】:Switch turns in a 2v2 game在 2v2 游戏中切换
【发布时间】:2019-10-06 23:54:18
【问题描述】:

我正在构建一个包含两个方面的回合制游戏。每边最多可以有两个或更多的玩家。如何在游戏中交替回合?

当我每边都有一名球员时,解决方案很简单。但是当我有多个玩家时,解决方案会变得更加复杂,我无法弄清楚。

这是我的二维数组的形状。

Player[] side1 = new Player[] { "A", "B" };
Player[] side2 = new Player[] { "X", "Y" };
Player[][] allSides = new Player[][] {
    side1,
    side2
};

我想每次都切换每一方的回合,让下一个玩家进入每一方的阵列。我的目标是返回以下结果:

第一回合:return allSides[0][0]; // returns side 1 Player A

第二回合:return allSides[1][0]; // returns side 2 Player X

第三回合:return allSides[0][1]; // returns side 1 Player B

第四回合:return allSides[1][1]; // returns side 2 Player Y

...

第n转:return allSides[i][j]

并且基本上让该模式在整个游戏的其余部分中按顺序出现。

【问题讨论】:

    标签: java arrays arraylist multidimensional-array


    【解决方案1】:

    解决方案非常简单 - 只需使用 turn 的最后两位作为数组的索引。当您从 0 开始并以 1 递增时,您的最后两位将形成以下序列:

    00
    01
    10
    11
    00
    01
    10
    11
    ... - and so on.
    

    现在只需将最后一位用作您的第一个数组索引,将第二位用作第二个数组索引 - 如下所示:

    int turn = 0;
    boolean gameOver = false;
    
    Player currentPlayer;
    while (!gameOver) {
        currentPlayer = allSides[turn & 1][(turn & 2) >> 1]
        ...
        turn++;
    }
    

    如果您需要轮到您从 1 而不是 0 开始,那么在计算索引时只需从 turn 中减去 1:

    currentPlayer = allSides[(turn -1) & 1][((turn - 1) & 2) >> 1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多