我正在建立一个带有两个回合的回合制游戏。每一方最多可以有两个或更多玩家。如何在游戏中交替进行转弯?
当我双方各有一名球员时,解决方案很简单。但是当我有一个以上的参与者时,解决方案将变得更加复杂,而我却无法弄清楚。
这是我的2D阵列的形状。
layoutSubviews
我想每次在每一侧都切换回合,让下一排玩家进入每一侧的阵营。我的目标是要返回以下结果:
第一转: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
...
第n转:return allSides[1][1]; // returns side 2 Player Y
并基本上在整个游戏的其余部分中按顺序出现该模式。
答案 0 :(得分: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]