2017-02-19 3 views
2

Ich schreibe ein Spiel in Haskell, in dem der Spieler und die KI abwechselnd einige Aktionen ausführen. Bis jetzt arbeiteten die AIs durch Erzeugen von Aktionen unter Verwendung aller Informationen über das Spiel, d. H. Sie waren Funktionen der Form GameHistory -> GameState -> Action.Agenten erlauben, ihren internen Zustand zu haben

Auf diese Weise generieren diese Funktionen einige Informationen, die sie bei jedem Aufruf aus der Historie benötigen. Es wäre viel einfacher, AIs zu schreiben, wenn sie einen "internen Zustand" haben könnten, der zwischen ihren Wendungen besteht (d.h. Aufrufe an die entsprechende Funktion). Wie könnte man so etwas umsetzen? (Übrigens sollte ich auch zu berücksichtigen, dass die internen Zustände der verschiedenen Arten von KIs verschiedene Arten haben könnte.)

+1

Ich finde diese Frage zu weit, ich kann Ihnen keine spezifischere Antwort geben als "Verwenden Sie die Staatsmonade". Wenn Sie Ihre Frage bearbeiten könnten, um tatsächlich Code zur Verfügung zu stellen, könnten wir wahrscheinlich hilfreicher sein. –

+0

@aclow Etwas verwandt: http://stackoverflow.com/questions/40698396/how-can-i-handle-user-plugins-in-my-types/ – danidiaz

+0

@ danidiaz Danke, das sieht aus wie ich suche. Ich werde es ausprobieren. – aclow

Antwort

2

Was Sie suchen könnte wie etwas sein:

newtype AI = AI { runAI :: GameState -> (AI, Action) } 

dh Sie‘ Geben Sie den neuen Status des Schauspielers zusammen mit der Aktion zurück. Sie könnten hier die State Monade verwenden. Sie könnten auch daran interessiert sein, über Automaten zu lesen. Wenn Sie Ihre AI serialisieren müssen (um sie beispielsweise in einer Datenbank zu speichern), müssen Sie möglicherweise etwas anderes tun.

Verwandte Themen