Ich bin daran interessiert, eine Schach-Engine zu programmieren und Bitboards zu verwenden, um den Stand des Spiels darzustellen. Ich weiß, dass es einige Open-Source-Schach-Engines gibt, die Bitboards verwenden, aber es ist nicht so einfach, sich den Code anzusehen und zu verstehen, was los ist. Ich suche nach gutem Referenzmaterial, wie man den gesamten Status in Bitboards darstellt.
Wenn Sie klar erklären, wie Sie den Status des Spiels mithilfe von Bitboards aufrechterhalten und insbesondere eine Liste gültiger Züge aus einem bestimmten Bitboard erstellen oder gute Verweise auf eine solche Erklärung angeben, erhalten Sie das grüne Häkchen.
engines
software
open-source
Axiopistie
quelle
quelle
Antworten:
Die beste Ressource für die Programmierung von Schachmaschinen ist das Schachprogrammier-Wiki , das einen großen Abschnitt über Bitboards enthält . Alles, was Sie brauchen, um eine Bitboard-basierte Engine zu erstellen, ist vorhanden, obwohl sie ziemlich verbreitet ist und manchmal von Leuten geschrieben wird, für die Englisch eine zweite Sprache ist.
quelle
Welche Programmiersprache möchten Sie verwenden?
Verwenden Sie System.UInt64, um ein Bitboard in C # zu implementieren . Dies kann 64 Bit enthalten, 1 für jedes Quadrat des Schachbretts. Dieser Wertetyp eignet sich für viele schnelle bitweise Operationen.
Dies ist ein gutes Bitboard-Tutorial .
Hier sind einige Beispiele aus meiner eigenen C # -Schachmaschine. Wie Sie dem Code entnehmen können, kann es eine Weile dauern, bis Sie Ihren Kopf mit Bitboards umwickelt haben. Diese sind jedoch in der Regel sehr schnell, insbesondere für die Positionsbewertung.
Beispiel 1 - Bitboard-Definition:
Beispiel 2 - Bitboard-Initialisierung:
Beispiel 3 - Bewegungsgenerierung:
Beispiel 4 - Materialbewertung berechnen:
Beispiel 5 - Berechnung der Stückbeweglichkeit:
quelle