Brukerverktøy

Nettstedverktøy


playground:playground

Dette er en gammel utgave av dokumentet!


Husk sekvensen

I denne oppskriften skal du trinn for trinn lage et spill hvor micro:biten velger en tilfeldig bokstav (A eller B) og viser denne på skjermen. Deretter skal du huske denne bokstaven og trykke på den tilsvarende knappen. Dersom micro:biten velger bokstav A skal du altså trykke på knapp A. Deretter skal micro:biten velge en ny bokstav (f.eks. B) og du skal da trykke på A først, deretter på B. Dersom du har greid å huske hele sekvensen så langt (Altså A fulgt av B) skal micro:biten velge en ny tilfeldig bokstav, f.eks. enda en B. Da skal du trykke A-B-B på tastene før micro:biten velger neste bokstav i rekkefølgen. Utfordringen for deg blir å huske hele sekvensen etter hvert som den blir lengre og lengre.

Om datatypen tekst

En datamaskin kan behandle data av forskjellige typer: tekst, tall og tabeller er tre forskjellige datatyper som oppfører seg forskjellig. I denne oppskriften skal du bruke datatypen tekst, og av en eller annen grunn har makecode valgt å legge menyen for Tekst under Avansert. Dette må ikke forståes slik at alt som har med tekst å gjøre er vanskelig, for det er det ikke. Men for å bruke alle de fantastiske mulighetene man har med tekster er det viktig at man forstår hvilke egenskaper denne datatypen har. De viktigste egenskapene er vist i de følgende eksemplene.

I mange programmeringsspråk kalles denne datatypen også for «string» (på engelsk) eller «streng» (på norsk). Vi bruker variabler for å lagre tekster, på samme måte som vi lagrer tall, og den største forskjellen på tekst og tall er at tekst har en variabel lengde. En tom tekst (altså tekst som ikke inneholder noen tegn, selv ikke mellomrom) vil ha en lengde på 0. Her har jeg kalt teksten for sekvens ettersom spillet krever at vi starter med en tom tekst som vi hele tiden legger til nye tegn i, og din jobb er å huske denne sekvensen etter hvert som spillet skrider fram.

Dersom du trykker på play-ikonet under eksemplet vil du se at micro:biten viser lengden på den tomme teksten på skjermen, og resultatet bør bli 0. Etter lengden av teksten vil micro:biten vise selve teksten, d.v.s. ingenting ettersom teksten ikke inneholder noen tegn: https://makecode.microbit.org/---docs

Hvis vi derimot setter inn tegnet 'A' (i mange programmeringsspråk kalles et tegn for en char) i teksten vil micro:biten først vise tekstens lengde (altså 1 ettersom teksten består av ett tegn) og deretter tegnet selv, altså 'A'. Test det selv ved å trykke på play-ikonet: https://makecode.microbit.org/---docs

Dersom vi setter inn flere tegn i teksten vil lengden øke (i dette tilfellet til 2) og teksten 'AB' vil bestå av to tegn: https://makecode.microbit.org/---docs

Dersom vi til å begynne med har teksten 'AB' og vil utvide denne kan vi bruke kommandoen «sett sammen» for å tilføye f.eks. en C. Nå vil teksten bli 'ABC' og lengden vil bli tre: https://makecode.microbit.org/---docs

Vi kan likeledes tilføye så mange tegn vil vil. I eksemplet under starter vi med sekvensen 'AB', og legger først til en 'C' (sekvens er nå 'ABC') og deretter legger vi til en 'D' og sekvens får sin endelige verdi 'ABCD'. Lengen på sekvens er nå 4: https://makecode.microbit.org/---docs

Vi kan hente ut det tegnet som står på en bestemt posisjon i sekvens. Det første tegnet står på posisjon 0, det andre tegnet står på posisjon 1, osv. Akkurat denne måten å nummerere på (altså at man starter på 0 og ikke 1, som vi mennesker ofte gjør) kalles null-indeksering og vil av og til forvirre uvante programmerere, men dette er en vanesak. I eksemplet under har vi teksten 'ABCD' og viser bare tegnet på posisjon 0, og resultatet bør bli en A. Sjekk det selv ved å trykke på play-ikonet: https://makecode.microbit.org/---docs

I programmet under blir sekvens satt til 'ABCD', og deretter vises hvert enkelt tegn i rekkefølge på skjermen. Merk at D'en blir stående ettersom det ikke er noen kommando for å tømme skjermen etter den siste visningen: https://makecode.microbit.org/---docs

I dette eksemplet har vi samme sekvens som i stad, altså 'ABCD'. Merk at programmet nå vil vise tegnene i posisjon 0-3 (altså A, B, C, og D). Deretter vil programmet vise tegnet på posisjon 4. Dette tegnet finnes ikke, og et tomrom vil nå bli vist til slutt. Derfor vil skjermen tømme seg. Ettersom den siste linjen i programmet forsøker å vise et tegn som ikke finnes, finnes det en risiko for at programmet krasjer dersom man gjør slik som i eksemplet under. Man skal aldri forsøke å gjøre noe som helst med verdier som ikke eksister, og skal derfor så langt det er mulig forsøke å unngå situasjoner som den under: https://makecode.microbit.org/---docs

For å unngå slike situasjoner pleier man ofte å bruke en løkke med en variabel kalt indeks til å hente ut elementer fra en slik tekst. Dersom sekvens er 'ABCD' vil man bruke en løkke slik at indeks får verdiene mellom 0 og 3. Merk at i eksemplet bruker man et triks hvor maks-verdien til indeks blir satt til én mindre enn lengden på sekvens. Ettersom sekvens har en lengde på 4 tegn, setter man en maks-grense på én mindre, altså 3. Denne gang skal D'en bli stående på skjermen, for denne programmet vil kun hente ut gyldige indekser mellom 0 og 3: https://makecode.microbit.org/---docs

Programmere spillet

Oppdrag 1

Ved start skal du lage en variabel som kalles sekvens. Den skal inneholde en tom tekst. Du skal lage en annen variabel som du kaller indeks. Denne skal settes til lengden av sekvens. Du skal også sette poengsummen din til 0 poeng. <hidden Tips 1>Du trenger kommandoer fra menyene for Tekst, Variabler og Spill.</hidden>

Se her for løsningsforslag.

Oppdrag 2

Variabelen sekvens skal til å begynne med være tom, og variabelen indeks skal inneholde posisjonen til ett av tegnene i teksten. Normalt sett skal lengden av sekvens og verdien av indeks aldri være lik, se siste del av eksemplet på toppen av siden. Men når indeks er lik lengden av sekvens (slik situasjonen f.eks. er ved starten av spillet) betyr det at vi må legge til ett nytt tegn i sekvens.

https://makecode.microbit.org/---docs

Når betingelsen over er oppfylt skal programmet gjøre følgende:

  1. Velge tilfeldig den neste verdien i sekvensen, enten 'A' eller 'B'
  2. Legge den neste verdien til slutt i sekvens
  3. Sette indeks til 0
  4. Vise den neste verdien på skjermen i ett sekund
  5. Tømme skjermen slik at ingenting vises

Se her for løsningsforslag.

Oppdrag 3

Hvis du løste forrige oppdrag riktig vil micro:biten nå velge enten 'A' eller 'B' og legge til denne til slutt i sekvens. Tegnet du skal huske vil også bli vist på skjermen i ett sekund. Nå skal du bruke «Når knapp trykkes»-funksjonene til å sjekke om du trykker på riktig knapp.

Lengden på sekvens skal ved første gjennomføring av spillet være 1, og indeks skal være 0. Tegnet i sekvens ved indeks 0 vil altså være enten 'A' eller 'B'.

https://makecode.microbit.org/---docs

Når du trykker på knapp A må du sjekke om tegnet ved posisjon indeks faktisk var en A. Dersom det var det har du husket riktig - i så fall skal du gå ett hakk videre i sekvens. Dersom tegnet ved posisjon indeks ikke var en A har du husket galt og må begynne på nytt igjen. Du skal også miste ett poeng for å ha husket galt. <hidden Tips 1>Du trenger kommandoer fra menyene for Variabler og Spill</hidden> <hidden Tips 2>Dersom du husket riktig bokstav og skal gå videre i sekvens er det tilstrekkelig å endre indeks med 1. Dermed er du klar til å sjekke neste verdi i sekvens ved neste knappetrykk.</hidden> <hidden Tips 3>Dersom du ikke husket riktig kan du sette indeks til 0. Dermed får du en sjanse til å taste inn hele sekvensen fra begynnelsen igjen. Det kan være en god idé å vise ett eller annet slags ikon på skjermen når man husker feil slik at man kan se helt tydelig at man må starte forfra igjen.</hidden> <hidden Tips 4>Kommandoene for å håndtere «når knapp A trykkes» skal være nesten identiske som kommandoene for å håndtere «når knapp B trykkes».</hidden>

Se her for løsningsforslag.

Videre arbeid

  1. I løsningsforslagene er det ikke tatt med funksjonalitet for å endre poengsummer. Dette blir din jobb. Du skal gi deg selv ett poeng for hver gang du har husket hele sekvensen riktig. Hvor skal du legge inn denne funksjonen? Du skal også miste ett poeng for hver gang du husker sekvensen feil.
  2. Kanskje du kan endre på spillet slik at du til å begynne med har f.eks. ti liv. Hver gang du husker sekvensen feil mister du ett liv?
  3. Spill-menyen inneholder en nedtellingsfunksjon. Kan du modifisere spillet slik at hver omgang varer i f.eks. 2 minutter. Hva blir den lengste sekvensen du greier å huske i løpet av disse to minuttene?
  4. I dette spillet brukes variabelen indeks til mye forskjellig - bl.a. lagrer den informasjon om hvilket tegn i sekvens spilleren er forventet å trykke på. Når man trykker riktig blir indeks øket med 1 for å sjekke neste tegn. Ser du sammenhengen mellom å øke verdien til indeks for hvert knappetrykk og det eksemplet hvor en for-løkke går gjennom alle gyldige verdier av indeks? Når indeks øker og blir like stor som lengden av sekvens er ikke indeks lenger en gyldig posisjon i sekvens. Det betyr at du har kommet til slutten av sekvens uten feil, og derfor er klar for å legge til et nytt tegn i sekvens. Les grundig over programmet ditt og sørg for at du forstår hvordan variablene indeks og sekvens fungerer sammen, her kan du lære mye om indekser og null-indeksert informasjon som f.eks. en tekst eller en tabell.

Løsningsforslag

Løsningsforslag 1

Se her for oppdraget.

https://makecode.microbit.org/---docs

Løsningsforslag 2

Se her for oppdraget.

https://makecode.microbit.org/---docs

Alternativ løsning: https://makecode.microbit.org/---docs

Løsningsforslag 3

Se her for oppdraget.

https://makecode.microbit.org/---docs

Komplett løsning

Under følger en komplett og fungerende versjon av spillet. Dersom du trykker på play-ikonet under kommandoene vil du kunne teste ut spillet i simuleringen. https://makecode.microbit.org/---docs

playground/playground.1586903196.txt.gz · Sist endret: 2022/11/30 08:15 (ekstern redigering)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki