Простые алгоритмы игры в шахматы - PullRequest
0 голосов
/ 23 января 2020

Так как я работал над игрой в шахматы пару лет назад, у меня есть список того, что ожидается от игрового процесса, но мне могут понадобиться дополнительные советы, чтобы упростить методы, которые я использовал в прошлом.

Я использовал лучи (двумерный вектор), чтобы проверить, где фигура может двигаться и атаковать, но я обнаружил, что код слишком резок (например, пришлось делать исключения для ходов рыцаря). Есть ли общий метод проверки на ходы и атаки?

Я также слышал о битовых досках, но как они работают, каково назначение битовых плат? Я использую массив 8x8, чтобы описать, какой цвет и какой кусок в указанном месте. Это так же, как битборд? Могу ли я использовать битборд для проверки правильности ходов. Что насчет правила En Passant?

Я не спрашиваю:

  • Алгоритм (ы) искусственного интеллекта (ИИ)
  • Исходный код

Список из моего прошлого проекта следующий:

  • Карта атак (2-мерная лучевая трансляция). От него зависит состояние флага рокировки.
  • Флаг рокировки
  • 2-ой или 7-ой флаг строки для движения пешки.
  • En Пассивный флаг
  • Лучи (2-мерная лучевая трансляция), чтобы проверить, где каждая фигура может двигаться и атаковать

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

Спасибо.

1 Ответ

1 голос
/ 23 января 2020

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

Битовые платы действительно являются решение. Каждый из 64 битов представляет собой квадрат на доске. В зависимости от языка программирования, который вы используете, 64 бита могут быть представлены в одном примитивном значении (long), что позволяет выполнять очень быстрые операции, такие как побитовое И двух битовых плат. У вас их может быть несколько, и они могут служить разным целям:

  • Позиции: битборд на тип и цвет фигуры: бит равен 1, если соответствующая клетка имеет эту фигуру. В битборде для белого короля ровно один бит установлен в 1, но в битборде для белых пешек может быть установлено до восьми битов в 1.
  • Перемещений: битборд на кусок: бит равен 1, если фигура может переместиться в соответствующий квадрат.
  • Атаки: битборд за штуку: бит равен 1, если фигура атакует соответствующий квадрат.
  • ... et c

См. Также Лучший способ создания шахматной игры

Я использую массив 8x8, чтобы описать, какого цвета и какого вида фигура в указанном месте. Это так же, как битборд?

Это также возможный подход, но он совсем другой и не очень эффективный:

  • У вас есть / нужен только один такой массив 8x8, где каждая ячейка имеет богатый информация (байт?). Общий объем памяти, вероятно,> = 64 байта.
  • Вам понадобится двенадцать битбордов 8x8, по одной на тип и цвет. Общий объем памяти = 12 длин, т. Е. 48 байтов

Могу ли я использовать битовую доску для проверки правильности ходов. А как насчет правила En Passant?

Да, вы можете использовать битборды для проверки правильности хода. В этом случае битборд должен быть 15х15, где предполагается, что кусок присутствует в центральном квадрате. Биты установлены в 1, если фигура может двигаться там (если нет препятствий). Вам все равно придется выполнить некоторые операции, чтобы отобразить это на фактическую битовую доску 8x8, которая представляет текущую позицию фактической фигуры на доске, а затем выяснить, какие из них представляют действительные движется (используя быстрые операции И). Для захвата пешками ходов вы должны использовать отдельные битборды. Для «en passant» это не будет работать так хорошо, так как вам понадобятся дополнительные logi c для интерпретации битов, так что вы могли бы также применить logi c без использования битборта.

Битборды не решают всех проблем, но облегчают некоторые. Вам все еще нужно реализовать логику c для рокировки, прохождения, продвижения по службе, пиннинга, проверки, патовой ситуации, товарища, ... и т. Д. c.

Вы также можете добавить в шахматное состояние. :

  • Подсчет для повторения позиции, чтобы обнаружить ничью
  • Количество ходов без ходов или захватов пешкой, чтобы обнаружить ничью
...