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

当我双方各有一名球员时,解决方案很简单。但是当我有一个以上的参与者时,解决方案变得更加复杂,而我却无法弄清楚。

这是我的2D阵列的形状。

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]

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

最佳答案

解决方案非常简单-只需使用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]

10-05 19:41