我正在建立一个具有两个方面的回合制游戏。每一方最多可以有两个或更多玩家。如何在游戏中轮流交替?
当我双方各有一名球员时,解决方案很简单。但是当我有一个以上的参与者时,解决方案变得更加复杂,而我却无法弄清楚。
这是我的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]