2017-08-25 2 views
0

Ich versuche ein Pachisi-ähnliches Brettspiel mit Jessod zu implementieren. Momentan erhält der Haskell-Code über Ajax den aktuellen Stand des Boards, tut ein paar Dinge damit (zB berechnen, ob ein neues Stück in das Board kommen darf, ob das Spiel endet usw.) und gibt es als JSON zurück, das der Client verwenden kann um die Ansicht zu aktualisieren.Zustand in Jessod halten

In der Tat, ich behalte Zustand in dem Client, das Problem zu umgehen, die Haskell keine Veränderlichkeit hat. In anderen Sprachen würde ich wahrscheinlich eine Variable gameState deklarieren und server-seitigen Code haben, den ich modifiziere, bevor ich ihn an den Client zurücksende, aber in Haskell ... kann mir etwas völlig fehlen; Ich bin weit davon entfernt, Erfahrungen mit Haskell zu sammeln.

Ich möchte so wenig wie möglich Client-Seite zu tun, da es sich hierbei um eine Übung in haskelling sein. Ich habe gefunden Haskell: Yesod and state, aber konnte nicht wirklich Sinn machen. Es bleibt also die Frage: Gibt es einen besseren Weg, mit dem Spielzustand umzugehen als meine Lösung?

+2

Ja, es gibt bessere Möglichkeiten, das zu tun. Zum Beispiel können Sie den gesamten Client-Status in einer Datenbank behalten und bei einer Client-Anfrage abrufen/ändern (get würde nur eine ID benötigen, eine ID + Changeset). ['persistent'] (https://www.yesodweb.com/book/persistent) ist der" Standard "Weg, dies mit' Yesod' zu tun, aber Sie können Ihre eigene Lösung rollen oder etwas anderes verwenden, wenn Sie möchten. – Cubic

Antwort

4

Das ist ziemlich einfach. Jessods Maschinen spinnen um einen Datentyp namens Foundation. Im Gerüstbau hat dieser Datentyp den gleichen Namen.

Was Sie tun müssen, ist diesen Datentyp mit einem Datensatz zu erweitern Zustand darstellt, MVar YourState, zum Beispiel.

Jetzt können Sie in Handler Aktionen y <- getYesod verwenden, um den Foundation-Wert zu erhalten, eine MVar daraus zu extrahieren und sie nach Ihrem Willen zu verwenden/ändern.

Verwandte Themen