切换进入2v2游戏

时间:2019-05-20 15:19:50

标签: java arrays arraylist multidimensional-array

我正在建立一个带有两个回合的回合制游戏。每一方最多可以有两个或更多玩家。如何在游戏中交替进行转弯?

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

这是我的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

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

1 个答案:

答案 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]