Я переписываю шахматный движок, написанный для работы на магических битбордах. У меня есть написанные магические функции, и они принимают квадрат части и битборд занятости в качестве параметров. Я спорю со мной о том, какая из этих схем представления на доске быстрее / практичнее:
схема 1: Для каждого типа фигуры есть битборд, 1 для белых коней, 1 для черных ладей. , , и чтобы генерировать ходы и помещать их в стек ходов, я должен сериализовать их, чтобы найти квадрат фигуры, а затем вызвать магическую функцию. Затем я должен сериализовать этот шаг и нажать на них. Преимущество состоит в том, что настольные и атакующие битборды находятся под рукой.
схема 2: простой массив центрированных фигур [2] [16] или [32] содержит квадратные индексы фигур. Простое прохождение и вызов функций - это все, что нужно для перемещения битбордов. Затем я сериализирую эти битборды и помещаю их в стек перемещения. Я также должен поддерживать битборд занятости. Я полагаю, что получение атакующей битборда не должно быть другим: мне нужно еще раз сгенерировать все битовые доски ходов, и вместо того, чтобы их сериализовать, я побитовым образом управляю ими в колдовской магии.
Я склоняюсь к схеме 2, но по некоторым причинам я думаю, что есть какая-то реализация, аналогичная схеме 1, которая является стандартной. По какой-то причине я не могу найти недостатки в создании "битбордного" движка без использования битбордов. Я бы даже не использовал битборды для данных короля и рыцаря, просто быстрый поиск в массиве.
Полагаю, мой вопрос больше в том, есть ли лучший способ сделать это представление платы, потому что я помню, как читал, что хранение битовой доски для каждого типа фигуры является стандартным (возможно, это необходимо только для вращаемых битбордов?). Я относительно плохо знаком с движками для битбордов, но я много читал и реализовал магический метод. Мне, конечно, нравится подход массива кусочно-ориентированных массивов - он делает много произвольных вещей, таких как печать доски на экране, легче, но если есть лучший / равный / более стандартный способ, может кто-нибудь указать на это? Заранее спасибо - я знаю, что это довольно специфический вопрос, на который трудно ответить, если вы не очень хорошо знакомы с шахматным программированием.
Последний вопрос: как измеряется скорость поиска в двумерном массиве по сравнению с использованием одномерного массива и добавлением 16 * team_side к нормальному индексу для поиска фрагмента?
edit : Я подумал, что должен добавить, что я оцениваю скорость больше, чем все остальное в моей шахматной реализации. Зачем еще мне использовать магические битборды, а не просто массивы с данными слайдов?