Ich bin ziemlich neu in OCaml und möchte ein Spiel implementieren, das dem Vier-in-einer-Linie ähnlich ist. Was ich brauche, ist eine Datenstruktur, um das Spiel zu halten. Das Spielbrett ist ein 4x4-Quadrat mit insgesamt 16 Spielsteinen. Ich bin auf der Suche nach einer Darstellung in OCaml, die es einfach und schnell macht, alle Elemente in der gesamten Spalte, Zeile oder Diagonale abzurufen (oder einige Operationen auszuführen). Ich werde in diesem Spiel Minimax-Suche machen, weshalb Geschwindigkeit wichtig ist.Datenstruktur zum Verfolgen eines Spielbretts in OCaml
Bisher habe ich eine eindimensionale Liste betrachtet. Das Problem mit einer Liste ist, dass es schwierig ist, herauszufinden, welche Elemente zu jeder Zeile/Spalte/Diagonale gehören, und sie dann zum Beispiel mit einem List.map
abzurufen.
Ich dachte über die Verwendung von Array.make 4 (Array.make 4 Empty);;
. Dies ist absolut perfekt, wenn es um Reihen geht. Es ist einfach, sie zu bekommen und ein Muster-Match zu machen. Aber es ist mühsam, Mustervergleiche an einzelnen Spalten und Diagonalen vorzunehmen.
Was ich möchte, ist eine Funktion, die ein Spielbrett nimmt und eine Liste von Listen zurückgibt, die alle Zeilen/Spalten/Diagonalen enthalten. Ich würde dann beispielsweise gerne match (rows,columns,diagonals) with (Empty, Empty, Empty, Empty) -> something
machen.
Gehst du für Eleganz oder rohe Geschwindigkeit? Bei roher Geschwindigkeit scheint mir Ihr gesamtes Spielbrett in 32 Bit zu passen. Aber Eleganz ist wahrscheinlich besser, wenn Sie OCaml lernen wollen. Die Handhabung von Bits sieht in jeder Sprache ähnlich aus. –