Я использую битовые доски для создания таблиц атак для ладей, слонов и ферзей. Во время моего исследования магических битовых досок мне кажется, что мне нужно обрезать края всех моих таблиц атак. Я храню свои битборды в длинном, где квадрат a1 является младшим битом, а квадрат h8 — старшим битом, перемещаясь строка за строкой. Вот пример таблицы атаки ладьей на поле с2:
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0]
[1, 1, 0, 1, 1, 1, 1, 1]
[0, 0, 1, 0, 0, 0, 0, 0]
Моя проблема в том, что мне нужно сделать все те, что на краю битовой доски, равными 0. Сначала я попытался заполнить каждую таблицу атак двоичным кодом long, представляющим бордюрный клип, который выглядит следующим образом:
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
Теперь это работает для большинства квадратов в центре, но для таблиц атаки по краям обрезает по ошибке. ТАК для ладьи на h8:
Начальная таблица атаки:
[1, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
Ожидаемый результат:
[0, 1, 1, 1, 1, 1, 1, 0]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 1]
[0, 0, 0, 0, 0, 0, 0, 0]
Фактический результат:
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 0, 0, 0]
Как мне подойти к этому, чтобы он обрезал только конец каждого луча атаки? Я понимаю, что моя битовая логика отключена. Спасибо.
long
. Однако порядок битов остается неясным. Вы используете строки или столбцы? Где MSB и где LSB? Возможно, вы можете добавитьlong
представление каждого графического примера в своем вопросе, редактируя. Это бы очень помогло. - person Socowi   schedule 12.03.2021