Я пишу шахматный движок C ++ и ищу магические числа для битовых карт Little-Endian Rank-File Mapping, чтобы генерировать движения для скользящих фигур.
Состязательный шахматный сайт дает магические числа, но не для того же картографирования.
Вики по шахматному программированию пока дают одни из лучших магических чисел, но не являются исчерпывающими.
В конце я ищу четыре вещи:
- маска заполнения для каждого квадрата
- магическое число для каждого квадрата
- магические сдвиги для каждого квадрата
- перемещает массив базы данных для каждого квадрата
Поэтому я могу использовать следующий код, чтобы найти ходы ладьи на C3 (например):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces