Переключай повороты в игре 2 на 2 - PullRequest
0 голосов
/ 20 мая 2019

Я строю пошаговую игру с двумя сторонами.Каждая сторона может иметь до двух или более игроков.Как чередовать ходы в игре?

Когда у меня по одному игроку на каждой стороне, решение простое.Но когда у меня более одного игрока, решение становится более сложным, и я не могу понять его.

Это форма моего 2D-массива.

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

Я хочупереключать ход для каждой стороны каждый раз, получая следующего игрока в массиве каждой стороны.Я стремлюсь получить следующие результаты:

1-й ход: return allSides[0][0]; // returns side 1 Player A

2-й ход: return allSides[1][0]; // returns side 2 Player X

3-й ход: return allSides[0][1]; // returns side 1 Player B

4-й поворот: return allSides[1][1]; // returns side 2 Player Y

...

n-й поворот: return allSides[i][j]

и, в основном, этот паттерн происходит в порядке на протяжении оставшейся частиигра.

1 Ответ

1 голос
/ 20 мая 2019

Решение довольно простое - просто используйте последние два бита 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, просто вычтите 1 из turn при расчете ваших индексов:

currentPlayer = allSides[(turn -1) & 1][((turn - 1) & 2) >> 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...