Update
Das Modell aktualisieren
Die update
-Funktion ist dafür zuständig, das Modell zu aktualisieren.
Sie erhält eine Nachricht und das aktuelle Modell und gibt das neue Modell zurück.
Die Nachrichten, die an die update
-Funktion gesendet werden können,
sind in Elm typischerweise im Typ Msg
definiert.
Nimm n
In unserem Fall sind die Nachrichten Nimm 1
, Nimm 2
und Nimm 3
möglich und werden durch Klicken auf die Buttons
zum Ziehen der Streichhölzer gesendet.
Die Gedanken zur Implementierung der update
-Funktion könnten so aussehen:
Wir müssen uns überlegen, wie wir die Nachrichten Nimm 1
,
Nimm 2
und Nimm 3
in der update
-Funktion
verarbeiten wollen.
Allen gemeinsam ist, dass sie eine Zahl n
enthalten, die
die Anzahl der zu ziehenden Streichhölzer angibt.
Die Zahl n
können wir durch Pattern Matching aus der Nachricht extrahieren.
Wenn die Zahl der zu ziehenden Streichhölzer kleiner als die Anzahl
der verbleibenden Streichhölzer ist, wird die Anzahl der verbleibenden
Streichhölzer um n
reduziert und der aktuelle Spieler gewechselt.
Wenn die Anzahl der zu ziehenden Streichhölzer der Anzahl der verbleibenden Streichhölzer entspricht, hat der aktuelle Spieler verloren, der andere Spieler also gewonnen. Am Zug ist dann kein Spieler mehr.
Wenn die Anzahl der zu ziehenden Streichhölzer größer als die Anzahl der verbleibenden Streichhölzer ist, ist der Zug ungültig und es passiert nichts, das Modell bleibt also unverändert.
Um die Implementierung übersichtlich zu halten, bietet es sich an den anderen Spieler in einem let-Ausdruck zu berechnen.
Aufgabe 1
update
-Funktion, die eine Nachricht und das aktuelle Modell
entgegennimmt und das neue Modell zurückgibt.
update : Msg -> Model -> Model
update msg model =
let
andererSpieler =
if model.amZug == ???
in
case msg of
??? ->
if model.rest - n > 0 then
???
else if ???
???
else
???