Как я могу исправить метод проверки Connect Four?C#

Место общения программистов C#
Anonymous
Как я могу исправить метод проверки Connect Four?

Сообщение Anonymous »

Я создаю бота Connect Four в Unity C#, и плата представляется в виде двоичного числа (длинный тип данных). например: long board = 0b0000000_0000000_0000000_0000100_0000100_0110110; будет то же самое, что:

Код: Выделить всё

0000000
0000000
0000000
0000100
0000100
0110110
подобный метод будет работать:

Код: Выделить всё

bool isWin(long bitboard) {
if (bitboard & (bitboard >> 6) & (bitboard >> 12) & (bitboard >> 18) != 0) return true; // / diagonal
if (bitboard & (bitboard >> 8) & (bitboard >> 16) & (bitboard >> 24) != 0) return true; // \ diagonal
if (bitboard & (bitboard >> 7) & (bitboard >> 14) & (bitboard >> 21) != 0) return true; // vertical
if (bitboard & (bitboard >> 1) & (bitboard >>  2) & (bitboard >>  3) != 0) return true; // horizontal
return false;
}
но для такой доски, как long board = 0b0000000_0000000_0000000_0000000_0000011_1100000; он все равно вернет true, даже если строка пройдет сквозь стену и закрепится на другой стороне.
Я пытался это исправить следующим образом:

Код: Выделить всё

long bMask = 0b0000000_1110000_1110000_1110000_1110000_1110000;
if ((_board & (_board >> 7) & (_board >> 14) & (_board >> 21)) != 0) { return true; } // vertical

long hori = _board & (_board >> 1) & (_board >> 2) & (_board >> 3);
if (hori != 0 && (pMask > 8) & (_board >> 16) & (_board >> 24);
if (ddia != 0 && (pMask > 6) & (_board >> 12) & (_board >> 18);
if (udia != 0 && (pMask 

Подробнее здесь: [url]https://stackoverflow.com/questions/78422203/how-can-i-fix-my-connect-four-check-method[/url]

Вернуться в «C#»