App’en er et lille huske spil, hvor der bliver vist en liste med tal, som man skal se om man kan huske. Længden på listen til stige. Hvor mange tal kan du huske?
I denne app skal vi bruge variabler, lister og en while loop.
Første version af app’en er en simpel layout, bestående af nogle knapper til at lave og reset listen, og tekstboks til at vise listen.
Opgave
- Opret et nyt projekt – kald det “HuskeSpil”
I Designer
- Tilføj en knap – omdøb den til “KnapNyListe”
- Ændre navn på knappen til “Lav en ny liste”
- Tilføj en knap – omdøb den til “KnapReset”
- Ændre navn på knappen til “Reset liste”
- Tilføj en tekstboks – omdøb den til “TekstDisplay”
- Ændre Hint til: “Listen vises her”
Når man trykker på knappen “KnapNyListe”, skal der laves en liste med tilfældige tal mellem 0 og 9. Bagefter skal den vises i tekstboksen “TekstDisplay”. For at vi ved hvilke tal som bliver lagt i listen, og til at vise listen i tekstboksen, skal vi bruge en variabel “Liste”. Denne skal være tom til at starte med. For hver gang man trykker på “KnapNyListe” skal listen ændres, og der bliver lagt et ekstra tal oveni listen. Vi skal bruge en variabel “size” til at vide hvor mange tal der skal være i listen. Når der skal lægges tal i listen skal vi bruge et “while” loop. Et while loop gentager koden som står ud for “do” så længe “test” er sandt. I denne app vil vi gerne blive ved med at tilføje et tilfældigt tal mellem 0 og 9 så længde længden på “Liste” er mindre end (<) “size”. Betingelsen som skal være sand og stå ud fra test skal altså være: “Længde på listen “Liste” < “size””. Under do-delen skal vi så sige “Tilføj et element til “Liste”, hvor element = tilfældigt tal fra 0 til 9″. Til sidst, uden for while loop skal vi huske at lægge 1 til “size”, så næste gang vi trykker på “KnapNyListe” bliver listen længere.
Når man trykker på “KnapReset”, skal “Liste” laves til en tom liste og “size” skal være 1. Teksten på “TekstDisplay” skal vise hint.
Opgave
I Blocks:
- Opret en variabel “Liste” – denne skal være en tom liste til at starte med.
- Opret en variabel “size” – denne skal være 1 til at starte med
- KnapNyListe:
- Find og vælg kode-blokken “when KnapNyListe.Click”
- Sæt listen til at være tom – “create empty list”
- Find og vælg kode-blokken “while test, do” under Control
- Ud fra test: længden af “Liste” skal være mindre end (<) “size”
- Ud fra do: tilføj et element til “Liste”, item = et tilfældigt tal mellem 0 og 9
- Læg et tal til “size” – “size” = “size” + 1
- Sæt TekstDisplay teksten til at vise “Liste”
- KnapReset:
- Find og vælg kode-blokken “when KnapReset.Click”
- Sæt “Liste” til at være tom – “create empty list”
- Sæt “size” til at være 1
- Sæt TekstDisplay teksten til at være Hint for TekstDisplay
TEST: For hver gang man trykker på “Ny liste” knappen vises listen i tekstboksen. Tallene ændre sig, og der kommer et tal mere i listen. Hvis man trykker på “Reset” knappen vises hint i tekstboksen, og næste gang man trykker på “Ny liste” starter listen med at vise 1 tal.
Øvelse: Den ene skal se tal-rækken, bagefter skal han/hun sige tallene højt for den anden uden at kunne se tal-rækken. Se hvor mange i kan huske. Skift når man ikke kan huske listen.
Ekstra opgave
App’en skal ændres sådan at app’en husker de tal som er lagt i listen og der tilføjes et nyt tal til listen. Man skal altså ikke ”nulstille” listen hver gang der skal tilføjes et tal.
I kan vælge om i vil lave en ny app (HuskeSpil2) eller i vil ændre tingene i jeres app. Der er en del kode som skal laves om, så det kan være en fordel at lave en ny app.
Først ændre vi på listen, så når man trykker på ”KnapNyListe” starter man med at sætte ”Liste” til at være tom. Herefter tilføjes et tilfældigt tal mellem 0 og 9 til ”Liste”. Til sidst skal ”Liste” vises som teksten i ”TekstDisplay”. Der skal tilføjes en ny knap til app’en, som gøres i Designer, denne skal omdøbes til ”KnapNytTal” og teksten på knappen ændres til ”Nyt tal”. Knappen skal bruges til at tilføje et nyt tal til ”Liste”. Så hver gang man trykker på ”KnapNytTal” tilføjes et tilfældigt tal mellem 0 og 9 til ”Liste”. Bagefter skal du huske at vise ”Liste” som teksten på ”TekstDisplay”.
Når der tilføjes et tal til listen skal vi lige være sikker på listen ikke er tom. Derfor skal vi bruge en if/else: Hvis ”Liste” ikke er tom, kan man tilføje et tal. Ellers skal teksten i ”TekstDisplay” vise teksten: ”Listen er tom, lav en ny liste”.
Variablen ”size” skal ikke bruges med de nye ændringer til app’en, så al koden med ”size” kan fjernes i Blocks.
Opgave
I Designer
- Tilføj en knap – omdøb den til “KnapNytTal”
- Ændre navn på knappen til “Tilføj tal”
I Blocks
- KnapNyListe:
- Sæt ”Liste” til at være tom – ”create empty list”
- Tilføj et element til ”Liste” – item = tilfældigt tal (random integer) fra 0 til 9
- Sæt teksten på ”TekstDisplay” til at være ”Liste”
- KnapNytTal:
- Find og vælg kode-blokken if/else under Control.
- Ud fra if: Er ”Liste” tom – is list empty? List: ”Liste”
- Sæt teksten på ”TekstDisplay” til at være: ”Listen er tom, lav en ny liste først”
- Ud fra else:
- Tilføj et element til ”Liste” – item = tilfældigt tal fra 0 til 9
- Sæt teksten på ”TekstDisplay” til at være ”Liste”
- Ud fra if: Er ”Liste” tom – is list empty? List: ”Liste”
- Find og vælg kode-blokken if/else under Control.
- Variablen ”size” kan fjernes fra koden
TEST: Hver gang man trykker på ”Ny liste” knappen vises der kun 1 tal i tekstboksen.
App’en kan også ændres sådan at tekstboksen kun viser listen i et bestemt stykke tid, hvorefter man selv skal skrive tallene i tekstboksen. Derefter skal app’en tjekke om man har tastet tallene korrekt ind.
Vi starter med at kunne tjekke om tallene man selv indtaster er korrekt med de tal som app’en laver (vi gemmer altså uret til senere.) Hertil skal du tilføje en knap ”KnapTjekListe”, som skal sammenligne den liste som laves når man trykker på ”Ny liste” og ”Tilføj tal” med de tal som du skriver ind i tekstboksen. Der skal bruges en variabel som skal være en liste med tallene som du selv skriver i tekstboksen.
Tilføj en label, som skal vise en tekst der fortæller om man kunne huske tallene eller ej. Hvis man kunne huske alle tal, skal label vise en ”tillykke, du kunne huske alle tal” tekst, hvis man har for lidt eller for mange tal skal label vise en ”der er vist noget galt her, prøv igen”, og hvis man har tastet et forkert tal skal label vise ”du gættede forkert, start forfra”.
TEST HJÆLP: Det kan være en fordel at have en ekstra tekstboks i starten til at skrive sine tal, så man kan sammenligne de tal man selv skriver, med tallene som app’en laver. Det kan også være en fordel at have en ekstra label til at vise hvordan listen ser ud med de tal man selv skriver. Her kan man se om den gemmer tallene korrekt. HUSK at slette den ekstra tekstboks og label igen når du er færdig.
Start med at lave en ny variabel og kald den ”MinListe”. Den skal være tom (create empty list) til at starte med, på denne måde ved app’en at ”MinListe” er en liste.
Når man trykker på knappen ”KnapTjekListe”, skal man først sikre at ”MinListe” er en tom liste. Sæt derfor ”MinListe” til at være en tom liste. Herefter skal vi lægge de tal som vi har skrevet i tekstboksen over i ”MinListe”. BEMÆRK: Når man skriver tallene i tekstboksen, skal man have et mellemrum mellem hvert tal. Dette er vigtigt for at kunne skelne mellem tallene. Derfor skal man have fat i ”split at spaces” (du finder den under Text) – hent teksten som er skrevet i tekstboksen. (Test – her kan man vælge at vise listen på den ekstra label.)
Nu skal vi sammenligne de to lister ”Liste” og ”MinListe”. Vi starter med at tjekke om længden på listerne er den samme. Hvis den ikke er, er det fordi der enten er for mange eller for få tal i ”MinListe”. Hertil skal vi bruge en if/else if/else. Find en if kode-blok under Control og tilføj en else if og else til den.
I if skal vi tjekke om længden på de to lister er den samme. Derfor skal vi have fat i en ”=” blok. På den ene side, skal du have længden på ”Liste” og på den anden side skal du have længden på ”MinListe”. Hvis dette er sandt, skal vi tjekke hvert tal i ”Liste” med tallene i ”MinListe”. Til dette skal vi bruge et ”for each” loop. Et for each loop udføre koden et bestemt antal gange, som man bestemmer ud for ”from” og ”to”. I denne app skal from = 1 og to = længden på ”Liste”. For hvert tal i ”Liste” vil vi gerne tjekke om dette tal er det samme som tallet i ”MinListe”, som står på samme plads. Det vil sige vi skal bruge en ny if/else blok. Sæt denne ud for do. Altså, ud for do: Tilføj en if/else blok.
Vi regner med at man kan huske tallene 😉 Derfor tjekker vi i denne if/else at tallene ikke er det samme. I if: tjek om tallet i ”Liste” ikke er lig med ”≠” tallet i ”MinListe”. Hertil skal du bruge kode-blokken ”select list item, list = ”Liste” eller ”MinListe”, index = ”tal” (fra for each). Hvis dette er sandt, skal teksten for LabelTjekLTal skrive ”Du fejlede”. I else skal teksten for LabelTjekTal være ” Tillykke! Du kunne huske alle tal. Prøv med flere tal”.
Nu skal du tilbage til den første if/else if/else. I else if skal du tjekke om længden på ”Liste” er større end (>) længden på ”MinListe”. Hvis dette er sandt skal teksten for LabelTjekTal være ”Du mangler nogle tal. Prøv igen”.
I else skal teksten for LabelTjekTal være ”Du har for mange tal. Prøv igen.”
Opgave
I Designer
- Tilføj en knap – omdøb til “KnapTjekListe”
- Ændre navn på knappen til “Tjek listen”
- Tilføj en label – omdøb til ”LabelTjekTal”
- Fjern teksten fra label.
I Blocks
- Lav en ny variabel ”MinListe” – denne skal være tom til at starte med
- KnapTjekListe
- Sæt ”MinListe” til at være en tom liste – ”create empty list”
- Sæt ”MinListe” til at være teksten fra tekstboksen, men der skal splittes på mellemrum (– split at spaces – teksten fra tekstboks)
- Find og vælg kode-blokken if under Control – tilføj en else if, og else:
- Ud fra if: længde på ”Liste” er lig (=) længde på ”MinListe”
- For hvert ”tal” fra 1 til længde på ”Liste” – for each number from .. to .. by 1
- I do:
- Find og vælg if/else kode-blokken
- Ud fra if: hent element fra ”Liste” ved index tal er ikke lig (≠) hent element fra ”MinListe” ved index tal – brug ”select list item”, index er ”tal” eller number variablen under for each
- Ud fra then: Sæt teksten for LabelTjekTal til at være et join med ”Du fejlede ved: ” og ”select list item, list = ”MinListe”, index = ”tal”
- Ud fra else: Sæt teksten for LabelTjekTal til at være ”Tillykke! Du kunne huske alle tal. Prøv med flere tal”.
- Ud fra if: hent element fra ”Liste” ved index tal er ikke lig (≠) hent element fra ”MinListe” ved index tal – brug ”select list item”, index er ”tal” eller number variablen under for each
- Ud fra else if: længde på ”Liste” større end (>) længde på ”MinListe”
- Sæt teksten for LabelTjekTal til at være ”Du mangler nogle tal. Prøv igen.” – vælg blokken ” ” under Text
- I else:
- Sæt teksten for LabelTjekTal til at være ”Du har skrevet for mange tal. Prøv igen.”
- Find og vælg if/else kode-blokken
- Ud fra if: længde på ”Liste” er lig (=) længde på ”MinListe”
Nu skal vi have app’en til at vise tallene i tekstboksen for kun en bestemt tidsperiode, hvorefter man selv skal indtaste tallene i tekstboksen.
Du skal bruge et ur (Clock), som du finder under Sensors i Designer.
Vejledning kommer senere. Prøv eventuelt selv.
Hint: Uret skal starte når man trykker på ”KnapNyListe” eller ”KnapNytTal”. Uret skal køre et bestemt stykke tid hvor tallene fra ”Liste” vises i ”TekstDisplay”. Når tiden er gået skal teskten i ”TesktDisplay” være tom. Herefter er det meningen man selv skal skrive tallene i ”TekstDisplay” og tjekke om tallene er korrekt når man trykker på ”KnapTjekTal”.