Tìm số ma thuật cho bitboard


9

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

Tôi tin rằng câu hỏi này sẽ phù hợp hơn và được trả lời tại lập trình viên.stackexchange.com hoặc stackoverflow.com .
Pavan Nadig

1
Không hẳn vậy. Điều này vẫn có thể trả lời ở đây. BTW, lập trình viên tập trung nhiều hơn vào sự trừu tượng hóa ở mức độ cao. stackoverflow.com sẽ tốt hơn
SmallChess

@PeteBecker Bạn nói đúng, tôi đã thay đổi
Romain

Câu trả lời:


6

Đây là một vấn đề rất nổi tiếng trong lập trình cờ vua. Bạn nên cân nhắc sử dụng những con số được tạo ra bởi Pradyumna Kannan. Tiến sĩ Kannan đã vui lòng tạo ra các số ma thuật nguồn mở. Nó đang được sử dụng bởi Crafty và một vài động cơ cờ vua khác bao gồm cả của riêng tôi.

Bạn có thể đọc thêm bằng google "Số ma thuật xảo quyệt".

Tôi đã chuẩn bị một tệp nén cho bạn ở đây . Đây là cùng một tệp đang được sử dụng trong ứng dụng công cụ cờ vua SmallChess. Vui lòng đọc tài liệu. Về cơ bản, bạn sẽ cần gọi Rmagic (hình vuông, chiếm chỗ) cho các tân binhBmagic (hình vuông, chiếm chỗ) cho các giám mục. Bạn có thể XOR những thứ đó thành mặt nạ nữ hoàng.


Cảm ơn nó hoạt động tốt. Tôi có thể tự do sử dụng / sửa đổi mã này trong công cụ cờ vua của mình không?
Romain

Không có hạn chế giấy phép. Sử dụng như bạn hài lòng. Đó không phải là tôi, người đã làm nó, đó là một đóng góp của Tiến sĩ Kannan. Hãy chấp nhận câu trả lời của tôi nếu nó giúp!
SmallChess

Xin chào, bạn có thể tải tệp MagicMoves.zip lên GoogleDrive không? Tôi không thể tải xuống tại smallchess (tôi gặp một số lỗi). Cảm ơn.
123iamking

@ 123iamking Liên kết vẫn hoạt động. Tôi sẽ không loại bỏ nó.
SmallChess

@SmallChess - Tôi không hỏi về việc xóa nó, bạn có thể cung cấp máy nhân bản với Google Drive không? Cảm ơn.
123iamking
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.