Поколение скользящих фигур в шахматном двигателе
Так что у меня возникли некоторые проблемы, когда я обдумывал проблему. В настоящее время я пишу шахматный движок на Java, основанный на битборде (это было все понятно). Пока что все ходы пешки / короля / коня работают как положено и без ошибок.
Что мне нужно, чтобы помочь в понимании, так это генерация скользящего движения. Я сгенерировал массив пустых ходов на доске для каждого квадрата / фигуры. Исходя из моего текущего понимания, мне также нужно разработать массив, который будет содержать каждую возможную занятость на каждом квадрате - и затем каким-то образом искать этот массив на основе различных методов.
Правильно ли думать об этом? Нужно ли выбирать каждое число от 0 до 2^63 и записывать его с помощью битовой доски перемещения для этого квадрата, а затем сохранять его каким-либо методом (магические / повернутые битборды) для инициализации массива и доступа к нему таким же образом при время выполнения?
Псевдокод и объяснения очень ценятся. (Я использую >>> кстати).
1 ответ
Существует много способов создания движений скользящих элементов для битбордов с различной производительностью и сложностью. Многие из них перечислены здесь.
Вероятно, самая быстрая и самая распространенная - это волшебные битборды, которые используют умножение битбордов с "волшебными" предварительно вычисленными значениями для генерации возможных ходов во всех четырех направлениях одновременно. Недостатком является то, что он использует очень большие таблицы поиска. Это, вероятно, не должно быть вашей первой реализацией, так как она более сложная.
Разница в обструкции и квинтэссенция гиперболы не намного медленнее, чем у волшебных битбордов, но проще в реализации.
Еще проще и медленнее dumb7fill, который представляет собой цикл во всех возможных направлениях, не требуя каких-либо справочных таблиц.
Я лично использую технику квинтэссенции гиперболы для создания ходов слайдера (ладьи, слоны и ферзь). Это очень просто и эффективно с точки зрения памяти по сравнению с техникой волшебной битовой доски, но немного медленнее, чем волшебные битовые доски, так как в квинтэссенции гиперболы требуется немного вычислений по сравнению с поиском в случае волшебных битовых карт. Пожалуйста, обратитесь на этот форум talkchess.com, чтобы получить хорошее представление о том, как генерируются рейтинговые атаки, поскольку я лично чувствовал, что это не очень хорошо. Обсуждение на форуме дало мне необходимое понимание, оно довольно аккуратное и очень хорошо работает. Hyperbola Quintessence также хорошо работает с Java, я использую C++ для своего шахматного движка. Удачи в программировании вашего шахматного движка.