Brukerverktøy

Nettstedverktøy


playground:playground

Forskjeller

Her vises forskjeller mellom den valgte versjonen og den nåværende versjonen av dokumentet.

Lenk til denne sammenligningen

Begge sider forrige revisjonForrige revisjon
Neste revisjon
Forrige revisjon
playground:playground [2020/04/14 21:22] – [Oppdrag 3] royevenplayground:playground [2022/09/03 21:45] (nåværende versjon) – ekstern redigering 127.0.0.1
Linje 1: Linje 1:
-====== Husk sekvensen ====== +====== PlayGround ======
-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 aktuelle 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 derfor er det viktig at du forstår hvilke egenskaper tekster har. 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 printer lengden på den tomme teksten på skjermen, og resultatet bør bli 0. Etter lengden av teksten vil micro:biten printe selve teksten, d.v.s. ingenting ettersom teksten ikke inneholder noen tegn: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22%22%0D%0Abasic.showNumber(sekvens.length)%0D%0Abasic.showString(sekvens)%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
-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: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22A%22%0D%0Abasic.showNumber(sekvens.length)%0D%0Abasic.showString(sekvens)%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
-Dersom vi setter inn flere tegn i teksten vil lengden øke (i dette tilfellet til 2) og teksten 'AB' vil bestå av to tegn: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22AB%22%0D%0Abasic.showNumber(sekvens.length)%0D%0Abasic.showString(sekvens)%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
-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: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22AB%22%0D%0Asekvens%20%3D%20sekvens%20%2B%20%22C%22%0D%0Abasic.showNumber(sekvens.length)%0D%0Abasic.showString(sekvens)%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
- +
-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: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22AB%22%0D%0Asekvens%20%3D%20sekvens%20%2B%20%22C%22%0D%0Asekvens%20%3D%20sekvens%20%2B%20%22D%22%0D%0Abasic.showNumber(sekvens.length)%0D%0Abasic.showString(sekvens)%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
-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 printer bare tegnet på posisjon 0, og resultatet bør bli en A. Sjekk det selv ved å trykke på play-ikonet: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22ABCD%22%0D%0Abasic.showString(sekvens.charAt(0))%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
-I programmet under blir //sekvens// satt til 'ABCD', og deretter printes 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 printingen: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22ABCD%22%0D%0Abasic.showString(sekvens.charAt(0))%0D%0Abasic.showString(sekvens.charAt(1))%0D%0Abasic.showString(sekvens.charAt(2))%0D%0Abasic.showString(sekvens.charAt(3))%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
- +
-I dette eksemplet har vi samme //sekvens// som i stad, altså 'ABCD'. Merk at programmet nå vil printe tegnene i posisjon 0-3 (altså A, B, C, og D). Deretter vil programmet printe tegnet på posisjon 4. Dette tegnet finnes ikke, og et tomrom vil nå bli printet til slutt. Derfor vil skjermen tømme seg. Ettersom den siste linjen i programmet forsøker å printe 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: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22ABCD%22%0D%0Abasic.showString(sekvens.charAt(0))%0D%0Abasic.showString(sekvens.charAt(1))%0D%0Abasic.showString(sekvens.charAt(2))%0D%0Abasic.showString(sekvens.charAt(3))%0D%0Abasic.showString(sekvens.charAt(4))%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
-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: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Asekvens%20%3D%20%22ABCD%22%0D%0Afor%20(let%20indeks%20%3D%200%3B%20indeks%20%3C%3D%20sekvens.length%20-%201%3B%20indeks%2B%2B)%20%7B%0D%0A%20%20%20%20basic.showString(sekvens.charAt(indeks))%0D%0A%7D%0D%0A%60%60%60 100%,800 noscroll noborder left}} +
- +
-====== 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> +
-[[#losningsforslag_1|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//+
- +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20indeks%20%3D%200%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Abasic.forever(function%20()%20%7B%0D%0A%20%20%20%20if%20(sekvens.length%20%3D%3D%20indeks)%20%7B%0D%0A%20%20%20%20%09%0D%0A%20%20%20%20%7D%0D%0A%7D)%0D%0A%60%60%60 100%,400 noscroll noborder left}} +
- +
-Når betingelsen over er oppfylt skal programmet gjøre følgende: +
-  - Velge tilfeldig den neste verdien i sekvensen, enten 'A' eller 'B' +
-  - Legge den neste verdien til slutt i //sekvens// +
-  - Sette //indeks// til 0 +
-  - Vise den neste verdien på skjermen i ett sekund +
-  - Tømme skjermen slik at ingenting vises +
- +
-[[#losningsforslag_2|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'+
- +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Alet%20indeks%20%3D%200%0D%0Ainput.onButtonPressed(Button.A%2C%20function%20()%20%7B%0D%0A%20%20%20%20if%20(sekvens.charAt(indeks)%20%3D%3D%20%22A%22)%20%7B%0D%0A%20%20%20%20%09%0D%0A%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%09%0D%0A%20%20%20%20%7D%0D%0A%7D)%0D%0A%60%60%60 100%,400 noscroll noborder left}} +
- +
-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 gi deg selv ett nytt poeng og 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> +
-[[#losningsforslag_3|Se her for løsningsforslag.]] +
- +
- +
-====== Løsningsforslag ====== +
- +
- +
-===== Løsningsforslag 1 ===== +
-[[#oppdrag_1|Se her for oppdraget.]] +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Alet%20indeks%20%3D%200%0D%0Agame.setScore(0)%0D%0A%60%60%60%0D%0A%0D%0A 100%,400 noscroll noborder left}} +
- +
-===== Løsningsforslag 2 ===== +
-[[#oppdrag_2|Se her for oppdraget.]] +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Alet%20indeks%20%3D%200%0D%0Asekvens%20%3D%20%22%22%0D%0Aindeks%20%3D%200%0D%0Agame.setScore(0)%0D%0Abasic.forever(function%20()%20%7B%0D%0A%20%20%20%20if%20(sekvens.length%20%3D%3D%20indeks)%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(Math.randomRange(1%2C%202)%20%3D%3D%201)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20sekvens%20%3D%20sekvens%20%2B%20%22A%22%0D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20sekvens%20%3D%20sekvens%20%2B%20%22B%22%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20indeks%20%3D%20sekvens.length%20-%201%0D%0A%20%20%20%20%20%20%20%20basic.showString(sekvens.charAt(indeks))%0D%0A%20%20%20%20%20%20%20%20indeks%20%3D%200%0D%0A%20%20%20%20%20%20%20%20basic.pause(1000)%0D%0A%20%20%20%20%20%20%20%20basic.clearScreen()%0D%0A%20%20%20%20%7D%0D%0A%7D)%0D%0A%60%60%60 100%,600 noscroll noborder left}} +
- +
-Alternativ løsning: +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20ny%20%3D%20%22%22%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Alet%20indeks%20%3D%200%0D%0Asekvens%20%3D%20%22%22%0D%0Aindeks%20%3D%200%0D%0Agame.setScore(0)%0D%0Abasic.forever(function%20()%20%7B%0D%0A%20%20%20%20if%20(sekvens.length%20%3D%3D%20indeks)%20%7B%0D%0A%20%20%20%20%20%20%20%20ny%20%3D%20%22A%22%0D%0A%20%20%20%20%20%20%20%20if%20(Math.randomRange(1%2C%202)%20%3D%3D%201)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20ny%20%3D%20%22B%22%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20sekvens%20%3D%20sekvens%20%2B%20ny%0D%0A%20%20%20%20%20%20%20%20basic.showString(ny)%0D%0A%20%20%20%20%20%20%20%20indeks%20%3D%200%0D%0A%20%20%20%20%20%20%20%20basic.pause(1000)%0D%0A%20%20%20%20%20%20%20%20basic.clearScreen()%0D%0A%20%20%20%20%7D%0D%0A%7D)%0D%0A%60%60%60 100%,600 noscroll noborder left}} +
- +
- +
-===== Løsningsforslag 3 ===== +
-[[#oppdrag_3|Se her for oppdraget.]] +
- +
-{{url>https://makecode.microbit.org/---docs?md=%60%60%60blocks%0D%0Alet%20sekvens%20%3D%20%22%22%0D%0Alet%20indeks%20%3D%200%0D%0Asekvens%20%3D%20%22%22%0D%0Aindeks%20%3D%200%0D%0Agame.setScore(0)%0D%0Abasic.forever(function%20()%20%7B%0D%0A%20%20%20%20if%20(sekvens.length%20%3D%3D%20indeks)%20%7B%0D%0A%20%20%20%20%20%20%20%20if%20(Math.randomRange(1%2C%202)%20%3D%3D%201)%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20sekvens%20%3D%20sekvens%20%2B%20%22A%22%0D%0A%20%20%20%20%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20sekvens%20%3D%20sekvens%20%2B%20%22B%22%0D%0A%20%20%20%20%20%20%20%20%7D%0D%0A%20%20%20%20%20%20%20%20indeks%20%3D%20sekvens.length%20-%201%0D%0A%20%20%20%20%20%20%20%20basic.showString(sekvens.charAt(indeks))%0D%0A%20%20%20%20%20%20%20%20indeks%20%3D%200%0D%0A%20%20%20%20%20%20%20%20basic.pause(1000)%0D%0A%20%20%20%20%20%20%20%20basic.clearScreen()%0D%0A%20%20%20%20%7D%0D%0A%7D)%0D%0Ainput.onButtonPressed(Button.A%2C%20function%20()%20%7B%0D%0A%20%20%20%20if%20(sekvens.charAt(indeks)%20%3D%3D%20%22A%22)%20%7B%0D%0A%20%20%20%20%20%20%20%20indeks%20%2B%3D%201%0D%0A%20%20%20%20%20%20%20%20game.addScore(1)%0D%0A%20%20%20%20%7D%20else%20%7B%0D%0A%20%20%20%20%20%20%20%20indeks%20%3D%200%0D%0A%20%20%20%20%20%20%20%20game.addScore(-1)%0D%0A%20%20%20%20%20%20%20%20basic.showIcon(IconNames.Skull)%0D%0A%20%20%20%20%20%20%20%20basic.pause(1000)%0D%0A%20%20%20%20%20%20%20%20basic.clearScreen()%0D%0A%20%20%20%20%7D%0D%0A%7D)%0D%0A%60%60%60 100%,2000 noscroll noborder left}}+
  
playground/playground.1586899356.txt.gz · Sist endret: 2022/11/30 08:15 (ekstern redigering)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki