4x4 Tabelle als Bitboard darstellen

TimBone

Mitglied
Moin miteinander,
im Rahmen eines Schulprojekts versuche ich das Spiel 2048 vom Computer lösen zu lassen. Dazu greife ich auf die WebApp über das Chrome Remote Debugging zu und würde die Felder gerne in einer long speichern, um die möglichen Züge möglichst schnell zu berechnen. Bei 16 Feldern, ergeben sich bei 64bit genau 4bit für ein Feld, was sehr gut passt, da ich so mit den zweier Potenzen arbeiten kann (0-f). Allerdings habe ich keinen wirklichen Ansatz, wie ich dieses Bitboard erstellen kann. Auch in Java-Büchern, die sich mit Bitshifting beschäftigen, werde ich nicht wirklich fündig. Habt ihr einen Ansatz für mich, oder vielleicht ein Stichwort, nach dem ich weiter suchen kann?

Da ich nicht ganz sicher bin, ob das verständlich ist, hier mal als Beispiel

Feld:
0 0 0 0
0 2 0 0
2 0 0 0
0 0 0 2

Soll zu 0x0010010000000001 werden.
 
Ich persönlich würde den Ansatz nicht benutzen, das macht alles nur komplizierter 😉

---

Wo hakt es denn bei der Lösung?

Feld in index im long und passende Potenz zu überführen?
zahl im long speichern?

Speichern ist im Prinzip die Zahl passend shiften, und mit dem long verodern, und Zahl lesen den long mit passender Bitmaske verunden und wieder zurückshiften
 
Hallo, ersteinmal danke für deine Antwort.
Meinst Du es wäre also sinnvoller, beispielsweise einen 2D-Array zu nehmen, oder welche Alternative hättest Du im Kopf?

----
Es hakt bei dem Ansatz das Bitboard zu erstellen, ich habe ein wenig rum probiert, aber bin zu keinem Ergebnis gekommen, das Problem ist scheinbar, dass der Wert rausfliegt, wenn ich ihn nach rechts verschiebe, da ja noch keine freien Nullen da sind.
 
Hallo, ersteinmal danke für deine Antwort.
Meinst Du es wäre also sinnvoller, beispielsweise einen 2D-Array zu nehmen, oder welche Alternative hättest Du im Kopf?
Ich würd ein 2D-Array nehmen, reicht ja ein byte[][]. Wenn man den Zugriff darauf hinter nem Interface versteckt, kann man nachher aber immer noch mal die Lösung mit dem Bitboard testen 😉

Es hakt bei dem Ansatz das Bitboard zu erstellen, ich habe ein wenig rum probiert, aber bin zu keinem Ergebnis gekommen, das Problem ist scheinbar, dass der Wert rausfliegt, wenn ich ihn nach rechts verschiebe, da ja noch keine freien Nullen da sind.
Die Einsen werden beim zu weit shiften rausgeschoben, in beide Richtungen, man muss halt jeweils passend weit schieben. Generell funktioniert es aber hierbei schon, das ganze in einem long zu speichern

Zeig mal was du ausprobiert hast, vllt sieht man den Fehler direkt 😉
 
Deine Code funktioniert schon mal nicht, weil EMPTY_BOARD & value immer 0 ergibt. Du verundest an der Stelle 0 mit irgendwas, da 0 nur Nullen enthält, kann beim verunden auch nur 0 rauskommen 😉

int value =Integer.valueOf(Integer.toHexString(pow), 16); ist auch ziemlich überflüssig 😉 Du machst zu erst aus dem int einen String mit Basis 16, und parsed den String dann wieder mit Basis 16 zurück, kommt also nur wieder pow raus.

Was zum speichern in board ginge wäre: board = board | (pow << position)
 

Zurück
Oben