SET til Elm

Projekt24

Et færdigt spil

Et mere naturligt flow

Det er på tide, at vores SET-spil kommer til at føles mere naturligt at bruge. Vi skal derfor ændre lidt på, hvad der sker når man vælger kort. Inden vi kan det, er det en god ide at lave en hjælpefunktion, der kan hjælpe os med at håndtere lister.
Øvelse
Vi skal lave en hjælpefunktion remove, der fjerner et givent element fra en list.
remove : a -> List a -> List a
Funktionen skal fungere på følgende måde:
remove 3 [1,2,3,4]   == [1,2,4]
remove 5 [3,5,7,5,5] == [3,7]
Øvelse
Følgende funktionalitet skal implementeres.

Et fuldt dæk

Når vi tager et SET, skal der ligges tre nye kort op. Inden vi kan gøre det, så skal vi have lavet et fuldt dæk af SET-kort, hvor alle 81 kort er med.
Øvelse
Lav en konstant fullDeck, der generer et fuldt SET-spil.
fullDeck : List Card
fullDeck = 
	**HER SKAL DU LAVE NOGET!**
Hint!

Du kan for eksempel bruge funktionerne List.map og List.concat.

Når vi har et fuldt SET dæk, skal vi bygge det ind i vores model.

Øvelse
Modificer din Model, så den har et felt cardPile, der svarer til det SET dæk, du har lavet med fullDeck. De 12 kort, der starter på bordet skal være de første 12 kort fra fullDeck, mens de resterende 69 kort skal gemmes i cardPile. Modificer din update-funktion, så der bliver lagt tre nye kort på bordet fra cardPile, når man tager et SET.
Øvelse
Lav en knap med teksten "flere kort", der lægger tre ekstra kort op, når man trykker på den.

Blande kort

Principielt er har vi et fuldt spil SET, men kortene skal blandes inden vi kan spille. Det ordner vi nu. At blande kortene i vores dæk svarer til at give kortene på listen fullDeck en tilfældig rækkefølge. Generelt er det ikke let, at få en computer til at gøre noget tilfædigt, og vi skal derfor bruge et af Elms avancerede biblioteker, der hedder Random.

Øvelse
Brug funktionerne Random.initialSeed, Random.step og Random.List.shuffle til at blande kortene i fullDeck.

Det sidste finish

Det sidste vi skal er at få funktionaliteten til at fungere, så spillet føles mest muligt, som når man spiller i virkeligheden.
Øvelse
Du skal sikre dig, at dit spil opfylder følgende funktionalitet: