Tôi đang viết một cỗ máy cờ vua C ++ và tôi đang tìm kiếm các con số ma thuật cho các bảng bit của Bản đồ xếp hạng tập tin Little-Endian để tạo ra các bước di chuyển cho các miếng trượt.
Trang web cờ vua đối thủ đưa ra con số ma thuật nhưng không phải cho cùng một bản đồ.
Wiki lập trình cờ vua cung cấp một số con số ma thuật tốt nhất cho đến nay nhưng không đầy đủ.
Cuối cùng, tôi tìm kiếm bốn điều:
- mặt nạ phòng cho mỗi hình vuông
- số ma thuật cho mỗi hình vuông
- thay đổi ma thuật cho mỗi hình vuông
- di chuyển mảng cơ sở dữ liệu cho mỗi ô vuông
Vì vậy, tôi có thể sử dụng đoạn mã sau để tìm các bước di chuyển của Rook trên C3 (ví dụ):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces