Одна из самых приятных вещей в битбордах и грачах заключается в том, что вы можете заранее вычислить легальные ходы, учитывая ранг или занятость файла.Это здорово, потому что вы можете найти все законные ходы без каких-либо инструкций if
.Например, предположим, что вы изолируете текущий ранг с помощью сдвига и маскирования, и вы получите
10100R001
, где 1 - занятый квадрат, 0 - пустой квадрат, и ваша ладья начинается с квадрата 3 (считая отмладший бит, который равен 0).Допустим, вы предварительно вычислили:
ROOK_MOVE[3][101000001] = 000110110
ROOK_CAPTURE[3][101000001] = 001000001
(Наивный подход достаточно хорош здесь, потому что есть только 9 стартовых позиций и 256 мест для оставшихся 8 квадратов.) Затем вы можете сгенерировать четыре законных хода в квадраты 1, 2, 4 и 5. Это не требует ветвления, поскольку вы можете извлекать биты один за другим (например, с помощью метода Кернигана ).Чтобы получить список легальных захватов, вам нужно И вторую маску с фигурами противника на этом ранге.
Я ожидаю, что это будет работать хорошо даже для доски 9x9.Дополнительные функции обработки битов все еще должны быть намного быстрее, чем альтернативные (if
s и ветвление).Как уже упоминалось в комментариях, лучший способ выяснить это - протестировать несколько подходов!