Piszę silnik szachowy C ++ i szukam magicznych liczb dla bitboardów Little-Endian Rank-File Mapping do generowania ruchów dla przesuwanych elementów.
Rywal szachy strona daje magiczne liczby, ale nie do tego samego mapowania pokładzie.
Wiki programowania szachowego podaje jedne z najlepszych jak dotąd magicznych liczb, ale nie jest wyczerpujące.
Na koniec szukam czterech rzeczy:
- maska zajętości dla każdego kwadratu
- magiczna liczba dla każdego kwadratu
- magiczne przesunięcia dla każdego kwadratu
- przenosi tablicę bazy danych dla każdego kwadratu
Więc mogę użyć następującego kodu, aby znaleźć ruchy Wieży na C3 (na przykład):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces