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