Interesuje mnie programowanie silnika szachowego i używanie bitboardów do reprezentowania stanu gry. Wiem, że istnieje kilka silników szachowych o otwartym kodzie źródłowym, które używają bitboardów, ale nie jest tak łatwo spojrzeć na kod i zrozumieć, co się dzieje. Szukam dobrego materiału referencyjnego na temat tego, jak reprezentować cały stan na bitboardach.
Jasne wyjaśnienie, w jaki sposób utrzymywać stan gry za pomocą bitboardów, a zwłaszcza jak wygenerować listę prawidłowych ruchów z dowolnej tablicy lub dostarczenie dobrych odniesień do takiego wyjaśnienia, zapewni ci zielony znacznik wyboru.
engines
software
open-source
aksiopisty
źródło
źródło
Odpowiedzi:
Najlepszym źródłem do programowania silnika szachowego jest Wiki programowania szachowego , które ma duży sekcję na bitboardach . Wszystko, czego potrzebujesz, aby stworzyć silnik oparty na płycie głównej, jest tam, choć jest on dość rozproszony i czasami pisany przez ludzi, dla których angielski jest drugim językiem.
źródło
Jakiego języka programowania chcesz używać?
Aby zaimplementować bitboard w C #, użyj System.UInt64 . Może pomieścić 64 bity, 1 na każdy kwadrat szachownicy. Ten typ wartości nadaje się do wielu szybkich operacji bitowych.
To jest dobry samouczek na płycie .
Oto kilka przykładów z mojego własnego silnika szachowego C #. Jak widać z kodu, może zająć trochę czasu, aby owinąć głowę za pomocą bitboardów, ale zazwyczaj są one bardzo szybkie, szczególnie w przypadku oceny pozycji.
Przykład 1 - Definicja płyty głównej:
Przykład 2 - inicjalizacja płyty głównej:
Przykład 3 - Generowanie ruchu:
Przykład 4 - Oblicz wynik materiałowy:
Przykład 5 - Obliczanie mobilności sztuk:
źródło