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
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.
Følgende funktionalitet skal implementeres.
- Når man har vælgt tre kort, skal det automatisk tjekkes om de et et SET. Hvis det er et SET skal kortene fjernes. Hvis det ikke er et SET, så skal markeringen fjernes.
- Det skal være muligt at fravælge et kort, som man allerede har valgt ved at klikke på det igen.
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
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
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.
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
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:
Du skal sikre dig, at dit spil opfylder følgende funktionalitet:
- Hvis der bliver taget et SET, når der er flere end 12 kort på bordet, skal der ikke lægges nye kort op.
- Når der tages et SET, skal de øvrige kort rykkes mindst muligt.
- Det skal kun være muligt at lægge tre ekstra kort op, hvis der ikke er noget SET blandt de kort, der allerede ligger på bordet.