Доска имеет такую структуру:
Код: Выделить всё
6 14 22 30 38 46 54
5 13 21 29 37 45 53
4 12 20 28 36 44 52
3 11 19 27 35 43 51
2 10 18 26 34 42 50
1 9 17 25 33 41 49
0 8 16 24 32 40 48
Код: Выделить всё
bool haswon(int64_t board)
{
int64_t y = board & (board >> 7);
if (y & (y >> 2 * 7)) // check \ diagonal
return true;
y = board & (board >> 8);
if (y & (y >> 2 * 8)) // check horizontal -
return true;
y = board & (board >> 9);
if (y & (y >> 2 * 9)) // check / diagonal
return true;
y = board & (board >> 1);
if (y & (y >> 2)) // check vertical |
return true;
return false;
}
Сейчас я просто перебираю каждую строку и подсчитываю биты, но уверен, что должен быть лучший способ использования сдвигов.>
Подробнее здесь: https://stackoverflow.com/questions/133 ... r-bitboard
Мобильная версия