Mit dem Zobrist Key Spielfelder codieren
Hier, im Zusammenhang mit diesen Spielen, wird der Zobrist Key verwendet, um Inhalte ganzer Spielfelder eindeutig auf eine Zahl abzubilden. Gleichzeitig wird er, im Zusammenhang mit Hashtables, benutzt um einen Index zu erzeugen, mit dem Schreib- und Lesezugriffe in eben diese Tabelle gesteuert werden.
Wie wird er konstruiert?
Um ihn erzeugen zu können bedarf es einiger Vorbereitung. Man muss zuerst ein paar Listen mit ganzen Zufallszahlen bauen. Man braucht für jede Spielpartei, jeden Figurtyp und jedes Feld auf das diese Figur gesetzt werden kann, eine Zufallszahl. Der Zufallszahlenbereich sollte im echten Spiel sehr, sehr, sehr, deutlich größer als die Summe aller Listenlängen sein. Vermutlich muss er größer als die Anzahl der gültigen Spielpositionen sein. Man kann sich ja mal überlegen, was passiert, wenn in dem unterem Beispiel nur Zufallszahlen im Bereich von 1 - 5 verwendet würden. Klarer Fall: keine Zahl darf mehr als einmal vorkommen. Damit ist erreicht, das jede dieser Zufallszahlen eine Spielfigur eines Spielers auf einer bestimmten Position repräsentiert. Der Schlüssel für das leere Spielfeld wird mit dem Wert 0 initialisiert. Anschießend erfolgt sowohl für das Setzen, als auch für das Entfernen der Figuren eine Brettkey = Brettkey XOR Zufallszahl von(Figurtyp, Spieler, Position) Operation. Das ganze funktioniert so nur bei Spielen, die mehrere gleiche Figuren einer Partei auf einem Feld, verbieten.
Schauen wir uns das einmal zu Fuß an.
Der Einfachheit wegen : 1 Figurtyp, 1 Partei, 5 Spielfelder. Spielfelder 1- 5 von links nach rechts.
XOR: entweder das eine oder das andere Bit => True (1) keines oder beide => False (0) Die Zufallszahlen : Pos 1 5, 0000 0101 Pos 2 232, 1110 1000 Pos 3 19, 0001 0011 Pos 4 64, 0100 0000 Pos 5 217 1101 1001 Das Brett: ..... Key = 0 0000 0000 Einsetzten auf Position 3 Key: 0000 0000 XOR Figur: 0001 0011 -------------------- Key: 0001 0011 kein Wunder Das Brett: ..F.. Key = 19 Erneutes Einsetzten auf Position 5 Key: 0001 0011 XOR Figur: 1101 1001 -------------------- Key: 1100 1010 Das Brett: ..F.F Key = 202 Erneutes Einsetzten auf Position 2 Key: 1100 1010 XOR Figur: 1110 1000 -------------------- Key: 0010 0010 Das Brett: .FF.F Key = 34 Verschieben von 5 nach 1 Schritt 1: entfernen von Pos 5 Key: 0010 0010 XOR Figur: 1101 1001 -------------------- Key: 1111 1011 Schritt 2: setzten auf Pos 1 Key: 1111 1011 XOR Figur: 0000 0101 -------------------- Key: 1111 1110 Das Brett: FFF.. Key = 254 Verschieben von 3 nach 4 Schritt 1: entfernen von Pos 3 Key: 1111 1110 XOR Figur: 0001 0011 -------------------- Key: 1110 1101 Schritt 2: setzten auf Pos 4 Key: 1110 1101 XOR Figur: 0100 0000 -------------------- Key: 1010 1101 Das Brett: FF.F. Key = 173 Entfernen von 1 Key: 1010 1101 XOR Figur: 0000 0101 -------------------- Key: 1010 1000 Das Brett: .F.F. Key = 168 Verschieben von 2 nach 3 Schritt 1: entfernen von Pos 2 Key: 1010 1000 XOR Figur: 1110 1000 -------------------- Key: 0100 0000 Schritt 2: setzten auf Pos 3 Key: 0100 0000 XOR Figur: 0001 0011 -------------------- Key: 0101 0011 Das Brett: ..FF. Key = 83 Entfernen von 4 Key: 0101 0011 XOR Figur: 0100 0000 -------------------- Key: 0001 0011 Das Brett: ..F.. Key = 19 sieht gut aus: der Key behauptet es gäbe 1 Figur auf Position 3 Entfernen von 3 Key: 0101 0011 XOR Figur: 0101 0011 -------------------- Key: 0000 0000 Das Brett: ..... Key = 0 sehr schön: das Brett ist wieder leer.
Magie mit XOR.