2017-04-11 2 views
0

So hatte ich einige Probleme, meinen Kopf um ein Problem zu wickeln. Ich schreibe gerade eine Bitboard-basierte Schach-Engine in Java (es war eine Fahrt, die alles herausgefunden hat). Bis jetzt funktionieren alle Schachfiguren/König/Ritter wie erwartet und ohne Fehler.Sliding Piece Generation in Schach-Engine

Was ich brauche, um Verständnis zu verstehen, ist das Verschieben von Stücken. Ich habe das Array von leeren Brettbewegungen für jedes Quadrat/Stück erzeugt. Aus meinem derzeitigen Verständnis heraus muss ich auch ein Array entwickeln, das jede mögliche Belegung auf jedem Quadrat enthält - und dann dieses Array auf der Grundlage verschiedener Methoden irgendwie nachschlagen.

Ist diese Art zu denken richtig? Es geht darum, jede Zahl von 0 bis 2^63 auszuwählen und mit der Move-Bitboard für dieses Quadrat zu kopieren und dann mit einer Methode (magic/rotierte Bitboards) zu speichern, um das Array zu initialisieren und auf dieselbe Weise auf es zuzugreifen Laufzeit?

Pseudocode und Erklärungen werden sehr geschätzt. (Ich benutze das >>> übrigens).

Antwort

3

Es gibt viele Möglichkeiten, Gleitstückbewegungen für Bitboards mit unterschiedlicher Leistung und Komplexität zu erzeugen. Viele von ihnen sind aufgeführt here.

Wahrscheinlich die schnellste und gebräuchlichste ist magic bitboards, die Multiplikation von Bitboards mit "magischen" vorberechneten Werten verwendet, um die möglichen Bewegungen in allen vier Richtungen gleichzeitig zu erzeugen. Der Nachteil ist, dass es sehr große Nachschlagetabellen verwendet. Dies sollte wahrscheinlich nicht Ihre erste Implementierung sein, da es komplizierter ist.

Obstruction difference und hyperbola quintessence sind nicht viel langsamer als magische Bitboards, während einfacher zu implementieren.

Noch einfacher und langsamer ist dumb7fill das ist eine Schleife in jeder möglichen Richtung, ohne irgendwelche Nachschlagetabellen zu erfordern.

+0

Danke, aber selbst mit magischen Bitboards verwenden Sie die magische Zahl, um eine Nachschlagetabelle genau zu referenzieren. Meine Frage ist mehr, wie man diese Nachschlagetabelle erzeugt. Es sei denn, ich verstehe es einfach nicht. – thePanthurr

+0

@thePanthurr Ihre Frage lässt es so erscheinen, als ob Sie glauben, dass für jede Gleitstückmethode die gleiche Nachschlagetabelle verwendet wird. Aber sie alle benötigen unterschiedliche Nachschlagetabellen. Einige von ihnen (z. B. magische Bitboards) verwenden mehrere Nachschlagetabellen. Sie sollten entscheiden, welche Methode Sie verwenden möchten, darüber lesen und dann gezielt danach fragen, was Sie nicht verstehen. – interjay

+0

@thePanthurr Sie müssen die Tabelle nicht selbst generieren. – SmallChess