i

Model

Ein Datenmodell entwerfen

In den meisten Fällen ist es sinnvoll, sich zuerst Gedanken zu machen, welche Daten gespeichert werden sollen. Die Struktur dieser Daten wird dann in einem Datenmodell festgehalten, das man üblicherweise als Model bezeichnet.

In Elm wird das Model meistens als ein Record definiert. Selbst wenn es sich um eine Anwendung handelt, die nur eine einzelne Zahl speichert, wird das Model als Record definiert. Das hat den Vorteil, dass man später leichter weitere Daten hinzufügen kann, ohne das Model komplett umzuschreiben.

Daten des Nim-Spiels

Zu Beginn sollte man die Modellierung der Daten möglichst einfach halten. Zusätzliche Daten können später hinzugefügt werden. Überlegungen zur Modellierung der Daten des Nim-Spiels könnten so aussehen:

Wir müssen die Anzahl an Streichhölzern speichern, die noch übrig sind. Außerdem müssen wir speichern, welcher Spieler gerade am Zug ist. Das könnte der erste oder der zweite Spieler sein. Die Namen der Spieler speichern wir fürs Erste nicht. Am Ende des Spiels müssen wir wissen, welcher Spieler gewonnen hat. Auch das könnte der erste oder der zweite Spieler sein. Zu Beginn hat noch kein Spieler gewonnen. Da ein Datenfeld nicht leer sein kann, müssen wir auch diese Möglichkeit vorsehen.

Um den aktuellen Spieler und den Gewinner zu speichern, sollten wir einen Datentyp definieren, der die Möglichkeiten ErsterSpieler, ZweiterSpieler und KeinSpieler enthält.

Zu Beginn des Spiels ist der erste Spieler am Zug. Wir starten mit 10 Streichhölzern. Gewonnen hat natürlich noch niemand.

Aufgabe 1

Entwirf das Datenmodell für das Nim-Spiel. Die Modellierung soll einen Typ für den aktuellen Spieler und den Gewinner, einen Typ-Alias Model für den aktuellen Zustand des Spiels und den Anfangszustand im Record initialModel enthalten. Gehe von folgendem Grundgerüst aus:
module Main exposing (..)

import Browser
import Html exposing (..)
import Html.Attributes exposing (..)
import Html.Events exposing (..)

-- ... hier fehlt noch etwas ...

main =
    text "Ansicht kommt noch ..."
type Spieler
    = ErsterSpieler
    ... ???


type alias Model =
    { rest : ???
    , amZug : ???
    , ???
    }


initialModel : Model
initialModel =
    { ???
    , ???
    , ???
    }

Suche

v
8.2.3.6.1
dev.inf-schule.de/deklarativ/fp_elm/dynamischewebseiten/nimspiel/model
dev.inf-schule.de/8.2.3.6.1
dev.inf-schule.de/@/page/Gu6QVdINNgBfO4PV

Rückmeldung geben