PXT: Snake. Introduksjon. Skrevet av: Håvard Nygård Jakobsen

Like dokumenter
PXT: Himmelfall. Introduksjon. Skrevet av: Helene Isnes og Julie Revdahl

Steg 1: Piler og knappetrykk

PXT: Det regner mat! Introduksjon. Steg 1: Grunnlag. Sjekkliste. Skrevet av: Helene Isnes

PXT: Det regnar mat! Introduksjon. Steg 1: Grunnlag. Sjekkliste. Skrevet av: Helene Isnes. Oversatt av: Stein Olav Romslo

"Hjerneteppe!" er en huskelek hvor du skal huske stadig lengre rekker med bokstaver!

PXT: Flasketuten peker på

PXT: Tikkende bombe. Introduksjon. Steg 1: Vi starter spillet. Skrevet av: Kolbjørn Engeland

Bygge en kube. Introduksjon. Steg 1: Lage en ny mod. Skrevet av: Pål G. Solheim

Her skal du lære å programmere micro:biten slik at du kan spille stein, saks, papir med den eller mot den.

Kan micro:biten vår brukes som et termometer? Ja, den har faktisk en temperatursensor!

PXT: Bjelleklang. Introduksjon. Skrevet av: Kolbjørn Engeland, Julie Revdahl

PXT: Micro:bit repeater

Snake Expert Scratch PDF

PXT: Spå fremtiden med bilder

Bygge en pyramide. Introduksjon. Steg 1: Lage en ny mod. Sjekkliste. Skrevet av: Pål G. Solheim

Steg 1: Katten og fotballbanen

Bygg et Hus. Introduksjon. Steg 1: Prøv selv først. Skrevet av: Geir Arne Hjelle

Om du allerede kjenner Scratch og har en Scratchbruker kan du gå videre til Steg 1.

Hvor i All Verden? Del 3. Introduksjon. Steg 0: Forrige gang. Sjekkliste. Skrevet av: Geir Arne Hjelle

Tetris. Introduksjon. Skrevet av: Kine Gjerstad Eide. Lag starten på ditt eget tetris spill!

Steg 1: Hvordan styre figurer med piltastene

Lærerveiledning - Snake

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

Verden. Introduksjon. Skrevet av: Kine Gjerstad Eide og Ruben Gjerstad Eide

Verden - Del 2. Steg 0: Oppsummering fra introduksjonsoppgaven. Intro

Sprettball Erfaren ComputerCraft PDF

Bygg et Hus. Steg 1: Prøv selv først. Sjekkliste. Introduksjon. Prøv selv

PXT: Komponer en melodi

Det du skal gjøre i denne oppgava er først å sette opp bakgrunnen til spillet og så rett og slett å få firkanter til å falle over skjermen.

Steg 1: Lag et flyvende spøkelse

Bygge en kube. Steg 1: Lage en ny mod. Sjekkliste. Introduksjon

Soloball. Introduksjon. Steg 1: En roterende katt. Sjekkliste. Skrevet av: Geir Arne Hjelle

Start et nytt PXT-prosjekt, for eksempel ved å gå til makecode.microbit.org (

Donkey Kong. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle

Verden - Del 2. Intro. Skrevet av: Kine Gjerstad Eide

Hvor i All Verden? Del 2. Introduksjon. Steg 0: Forrige gang. Skrevet av: Geir Arne Hjelle

PXT: Hermegåsa. Introduksjon. Skrevet av: Felix Bjerke og Tjerand Silde

Kan micro:biten vår brukes som en terning? Ja, det er faktisk ganske enkelt!

Steg 1: Lag bakken og få den til følge med

Kanter, kanter, mange mangekanter. Introduksjon: Steg 1: Enkle firkanter. Sjekkliste. Skrevet av: Sigmund Hansen

Verden. Steg 1: Vinduet. Introduksjon

super:bit-oppdraget Lærerveiledning Versjon 1, august 19.

Straffespark Introduksjon Scratch Lærerveiledning

Uendelig bakke. Introduksjon. Skrevet av: Kine Gjerstad Eide

Spøkelsesjakten. Steg 1: Lag et flyvende spøkelse. Sjekkliste. Introduksjon

Pong. Oversikt over prosjektet. Steg 1: En sprettende ball. Plan. Sjekkliste. Introduksjon

Snøballkrig. Introduksjon. Steg 1: En snøballkaster. Skrevet av: Geir Arne Hjelle

Steg 1: Vår første datamaskin

Steg 1: Bli kjent med spillet

1. Rullende navn, s 3 2. Smilefjes, s 5 3. Skritteller, s 7 4. Orakel, s 9 5. Stein, saks og papir, s Kompass, s 14

Bli Kjent med Datamaskinen Introduksjon ComputerCraft PDF

Hvor i All Verden? Del 3 Erfaren Scratch PDF

Robotinvasjon Introduksjon ComputerCraft PDF

Steg 1: Opprette spillskjerm

JS: Grunnleggende JavaScript

Hoppehelt. Introduksjon. Steg 1: Streken. Sjekkliste. Skrevet av: Geir Arne Hjelle

For å sjekke at Python virker som det skal begynner vi med å lage et kjempeenkelt program. Vi vil bare skrive en enkel hilsen på skjermen.

Tryll bort heksa. Introduksjon. Sjekkliste Følg instruksjonene på lista. Huk av etter hvert. Test. Lagre 2/8

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon:

Hvor gammel er du? Hvor gammel er du? Del 1: Skrive ut til skjerm. Gjøre selv. Skrevet av: Sindre O. Rasmussen, Kodeklubben Trondheim

Steg 1: Husker du skilpadden?

Vi har sett enkle datamaskiner. Nå skal vi leke oss med roboter, og finne ut hvordan vi kan få dem til å gjøre forskjellige ting for oss.

Breakout. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle og Martin Lie

PXT: Hermegåsa. Steg 1: Sjekk at du har riktig utstyr. Sjekkliste. Introduksjon

Klask-en-Muldvarp. Introduksjon. Skrevet av: Basert på MITs "MoleMash for App Inventor 2"-guide (

Steg 1: Installere programvaren

Sprettende ball. Introduksjon: Steg 1: Vindu. Sjekkliste. Skrevet av: Sigmund Hansen

Steg 1: Hente grafikk fra nettet

Steg 1: Få Flakse til å falle

Sprettball. Introduksjon. Skrevet av: Geir Arne Hjelle

Bygge en pyramide. Steg 1: Lage en ny mod. Sjekkliste. Introduksjon

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang

Tell sekunder. Introduksjon. Skrevet av: Teodor Heggelund. I denne oppgaven skal vi lage vårt eget spill!

Mattespill Nybegynner Python PDF

På tide med et nytt spill! I dag skal vi lage tre på rad, hvor spillerne etter tur merker ruter med X eller O inntil en av spillerne får tre på rad.

Spøkelsesjakten. Introduksjon

Asteroids. Introduksjon. Oversikt over prosjektet. Skrevet av: Geir Arne Hjelle

Kanter, kanter, mange mangekanter

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Norgestur. Introduksjon. Steg 1: Et norgeskart. Sjekkliste. Skrevet av: Geir Arne Hjelle

Her skal du lære å programmere micro:biten slik at du kan spele stein, saks, papir med den eller mot den.

JS: Grunnleggende JavaScript Nybegynner

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Norsk informatikkolympiade runde

Skilpaddefraktaler Erfaren Python PDF

Steg 1: Få noe på skjermen

3D-Flakser, Del 1 Ekspert Scratch PDF

Hvor i All Verden? Del 2 Erfaren Scratch PDF

Ping pong. Introdusjon: Steg 1: Sprettende ball. Sjekkliste. Skrevet av: Torbjørn Vik Lunde

Skrevet av: Oppgaven er laget av GDG Bergen ( AU/GDGBergen/), og tilpasset Kodeklubbens format på oppgaver.

Flaksefugl Nybegynner Scratch Lærerveiledning

Løpende strekmann Erfaren Videregående Python PDF

Sprettende ball Introduksjon Processing PDF

Kom i gang med micro:bit

Steg 1: Tekst på flere linjer

Hvor i All Verden? Del 1. Introduksjon. Steg 1: Styr et helikopter. Skrevet av: Geir Arne Hjelle

Steg 0: Installere Pygame Zero

Snøballkrig Ekspert Scratch Lærerveiledning

Steg 1: Lag bildedeklarasjon

Bursdag i Antarktis. Introduksjon. Steg 1: En katt på villspor. Sjekkliste. Skrevet av: Caroline Tandberg

Transkript:

PXT: Snake Skrevet av: Håvard Nygård Jakobsen Kurs: Microbit Tema: Elektronikk, Blokkbasert, Spill Fag: Programmering Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse Introduksjon En eller annen variant av Snake har eksistert på datamaskiner helt siden slutten av 1970-tallet. Mange voksne kjenner spillet fra Nokias mobiltelefoner, mens mange barn kjenner det fra moderne versjoner som slither.io (http://slither.io). I spillet styres en slange rundt på skjermen, og slangen må unngå å krasje i kanten av skjermen og seg selv. Slangen vokser når den spiser mat som dukker opp tilfeldige steder, og spillet går fortere og fortere etterhvert som slangen vokser. I denne oppgaven bruker vi engelske navn på blokkene og variabler. Dette er bla. for at det skal være lettere å finne igjen innebygde funksjoner når vi bytter mellom blokkprogramering og javascript siden funksjonene har engelske navn i javascript. Det er veldig vanlig å bruke engelske navn på funksjoner og variabeler blant programmerere. Dette gjør det bla. enklere å poste kode på internettforum og få hjelp fra hele verden.

Denne oppgaven er forholdsvis lang, men vi tar det skritt for skritt og forklarer underveis. La oss sette i gang. Steg 1: Tegne slangen Det første vi trenger er en liten kodesnutt som tegner slangen vår. Skjermen vår består av 5x5 ledlys. Disse kan vi skru av og på som vi vil med litt kode. For å tegne slangen trenger vi noe som kan passe på hvor vi skal tegne slangen. Til dette skal vi bruke en array, en type variabel som inneholder en liste med verdier. I listen vår bruker vi to verdier for å tegne en bit av slangen, den første verdien sier hvilken rekke bortover (X) vi skal tegne i og den neste sier hvilken kolonne nedover (Y) vi skal tegne i. Sammen gir dette oss en X,Y posisjon til leden som vi skal skru på. Steg for steg

Først starter vi med å lage en array og sette de første verdiene. Arrays finne du under Advanced. Finn blokken set list to og endre variabelnavnet til snake. Legg den inn i on start blokken. Trykk + til du har fire verdier i listen og sett dem til 2, 2, 2 og 3. Da skal det se slik ut: Nå trenger vi litt kode for å tegne slangen. For å gjøre det litt enklere å holde oversikt over programmet vårt så gjør vi dette med en funksjon. Lag en ny funksjon som heter drawsnake() og legg en for-loop inni denne. En for-loop er en vanlig måte å gå gjennom en liste. For-loopen starter på 0 og skal slutte når den har kommet til lengden av arrayen snake minus en. Hvorfor begynner vi på 0 og går til antall minus en? Tenk deg at du har en stabel med ark, f.eks. en oppgave som denne. Hvor mange ganger må du bla for å lese den første siden? Hvor mange ganger må du bla for å lese alle arkene? Slik er det med en array også, arrayen begynner på posisjon 0, og du må da bruke antall minus en for å bla igjennom alle. Hvis dette er vanskelig å forstå, så tenk "sånn er det bare".

Lag to variabler, x og y. Inni loopen henter vi ført ut en verdi fra snake arrayen med get value at med index og legger i x -variabelen, deretter teller vi opp index med en, og henter ut ut en verdi til og putter i y. Nå har vi det vi trenger for å tegne et punkt i slangen. Til dette bruker vi plot(x,y) funksjonen som ligger under led -fanen. Nå må vi bare kalle denne funksjonen fra et sted. Vi legger inn et kall til drawsnake() i forever() Test prosjektet Prøv spillet i simulatoren for å teste koden så langt. Sjekk at det blir tegnet to punkter.

Prøv å legge til et punkt til i snake. Da må du legge til to verdier. Sjekk at det nye punktet også blir tegnet. Bytt til javascript. Klarer du å kjenne igjen koden som er generert fra blokkprogrammeringen når du bytter til javascript? Egentlig er det vi skriver noe som heter Typescript som er en variant av Javascript. I vanlig Javascript trenger vi ikke bruke type på variabler, men det må man noen steder i Typescript. F.eks. hvis en variabel skal inneholde tall må vi spesifisere at det er et tall med let x: number. Da har vi det vi trenger for å tegne slangen. Men det er litt kjedelig når den står stille. Det må vi gjøre noe med! Steg 2: Slithering snake Nå skal vi få slangen til å bevege seg. Siden slangen kan bevege seg opp, ned, venstre og høyre så trenger vi en variabel som sier hvilken retning den er på vei. Vi beveger slangen ved å legge til et nytt punkt i begynnelsen og ta vekk det siste punktet på halen. Tips I denne oppgaven bruker vi både blokkprogrammering og håndskrevet kode. Før vi bytter mellom blokkprogrammering og javascript så kan det være lurt å lagre spillet. Det pleier å gå fint å bytte mellom blokker og javascript selv om noen blokker kan bli grå. Det hender at makecode ikke skjønner noe kode og kode forsvinner. Da er det veldig greit å ha et lagret punkt å gå tilbake til. Men du trenger ikke bry deg med om f.eks. noen variabler flytter litt rundt på seg. Steg for steg

Lag en ny variabel. Kall variabelen direction. Sett variabelen til 'up' i oppstartsblokken. Nå skal vi lage en funksjon som oppdaterer snake. Får å få til dette må vi skrive litt javascript. Lag først fuksjonen updatesnake(). function updatesnake(){ Først i funksjonen henter vi ut "hodet" til slangen dvs. det første punktet, x og y- koordinater, i fra snake. x = snake[0] y = snake[1] Deretter skal vi trekke i fra en på y hvis direction er 'up', plusse på en på y hvis 'down', trekke fra en på x hvis 'left' og plusse på en på x hvis 'right'. if (direction == 'up') { y = y - 1; if (direction == 'down') { y = y + 1; if (direction == 'left') { x = x - 1 if (direction == 'right') { x = x + 1 Så dytter vi inn x og y i begynnelsen av arrayen snake med funksjonen unshift() og fjerne et punkt (to verdier, x og y) fra halen med funksjonen pop(), slik at slangen beveger seg et hakk

snake.unshift(y); snake.unshift(x); snake.pop(); snake.pop(); Til slutt legger vi til et kall til updatesnake() i forever() basic.forever(function () { drawsnake(); updatesnake(); ) Hvis du ikke har gjort det alt er det på tide å lagre koden. Gi prosjektet navn "Snake" og trykk save. Test prosjektet Prøv koden i simulatoren for å teste koden så langt. Ta en titt på programmet i simulatoren. Oppfører det seg som du forventet? Ikke? Forstår du hvorfor dette skjer? Hvis du har gjort alt riktig fram til nå så har du nå fire prikker på rekke midt på skjermen. Det er fordi vi aldri skrur av ledlyset der slangen har vært. Vi legger til en funksjon til i forever() : basic.forever(function () { basic.clearscreen(); drawsnake(); updatesnake(); )

Men vi må gjøre en liten ting til for at det skal fungere skikkelig. Hvis du tester det slik det er nå vil du kanskje se et par kjappe blink før skjermen er tom. Skjønner du hvorfor? Dette er et godt tidspunkt for å teste en funksjon i microbitsimulatoren. Vi kan kjøre programmet i sakte fart ved å trykke på sneglen for å se hva som skjer, steg for steg. Nå skjønner du kanskje hva som er problemet? Det går for fort! La oss legge inn en liten pause: basic.forever(function () { basic.clearscreen(); drawsnake(); updatesnake(); basic.pause(1000); ) Steg 3: Styring Nå er det på tide at vi legger inn litt styring av slangen. Men først lager vi en liten startskjerm. Steg for steg Lag en ny variabel. Kall variabelen isplaying og sett til false i startsblokken. Aller først i startblokken legger du en show icon -blokk med "snake"-ikonet.

I forever -funksjonen legger du en if som tester om isplaying er sant( true ). I så fall skal programmet tegne og oppdatere, så dette putter du inni if -blokken. Så legger vi til funksjoner for knappene. Når knappen blir trykket setter du isplaying til true Test prosjektet i simulatoren

Nå skal slangeikonet vises til du trykker på en knapp, da starter spillet. Men vi trenger litt mer kode for å styre. Når man spiller skal A-knappen styre slangen 90 grader mot venstre fra nåværende retning mens B-knappen styre slangen 90 grader mot høyre. Steg for steg Legg til en if-else i knappekoden. Hvis vi er i isplaying -modus, så skal knappetrykket styre slangen. Hvis vi trykker på A knappen og direction er 'up' så endrer vi den til 'left', hvis den er 'left' så endrer vi til 'down', osv. Og motsatt for B kanppen. Hvis vi ikke er i isplaying -modus så må vi skru den på.

input.onbuttonpressed(button.a, function () { if (isplaying) { if (direction == 'up') { direction = 'left'; else if (direction == 'left') { direction = 'down'; else if (direction == 'down') { direction = 'right'; else if (direction == 'right') { direction = 'up'; else { isplaying = true ) input.onbuttonpressed(button.b, function () { if (isplaying) { if (direction == 'up') { direction = 'right'; else if (direction == 'right') { direction = 'down'; else if (direction == 'down') { direction = 'left'; else if (direction == 'left') { direction = 'up'; else { isplaying = true; ) Test prosjektet Prøv spillet i simulatoren for å teste koden så langt. Sjekk at styringen virker. Nå kan du styre slangen, men det er et lite problem. Hvis vi trykker for to ganger på en knapp så går slangen i stikk motsatt retning. Det vil vi ikke siden slangen på denne måten går gjennom seg selv og det blir bare tull.

Steg for steg Legg til en ny variabel som heter buttonpressed Endre begge onbuttonpressed funksjonene med følgende kode input.onbuttonpressed(button.a, function () { if (isplaying) { if (buttonpressed) { return; buttonpressed = true; Sett buttonpressed til false i updatesnake() Test prosjektet Prøv spillet i simulatoren for å teste koden så langt. Hvis alt stemmer nå er det bare ett knappetrykk som gjelder for hvert hakk slangen beveger seg. Steg 4: GAME OVER! Men vi kan jo styre slangen selv om den kjører utenfor skjermen, det skal selvfølgelig ikke være lov! Steg for steg Lag en ny funksjon som du kaller checkgameover(x,y). I denne sjekke vi om x og y er innenfor skjermen. Hvis x eller y er utenfor er det game over. Det viser vi med en hodeskalle. Vi må også sette isplaying til false, og slange og retning tilbake til utgangspunktet ved start. Så venter vi litt før vi setter "snake"-ikonet som i startskjermen.

function checkgameover(x: number, y: number) { if(x < 0 x > 4 y < 0 y > 4) { direction = 'up'; snake = [2, 1, 2, 2] basic.showicon(iconnames.skull); basic.pause(2000); basic.showicon(iconnames.snake); isplaying = false; Vi kaller checkgameover() i updatesnake() før unshift() og bruker x og y som vi har der som parametere til funksjonen. Test prosjektet På tide å prøve spillet på micro:bit Steg 5: Litt lyd, takk! Steg for steg La oss legge til et blip for hver gang slangen beveger seg. Vi legger til denne kodelinjen i begynnelsen av updatesnake(). Den spiller noten C, femte oktav i 20 ms som blir et fint lite blip. music.playtone(note.c5, 20) Så vil vi spille en liten melodi når det er game over. Microbitten har noen innebygde melodier som vi kan spille. Melodien Wawawawa eller Funeral passer kanskje best? Legg til denne kodelinjen i checkgameover() rett før du viser hodeskallen.

music.beginmelody(music.builtinmelody(melodies.wawawawaa), MelodyOp tions.once); Test prosjektet Koble til hodetelefoner eller høytaler til micro:bit og sjekk at du får lyd. Test i simulatoren hvis du ikke har mulighet til å koble til noe. Steg 6: Mat Nå har kan man styre slangen, det blir game over og vi har litt lyd. På tide å legge til litt mat slik at vi får et skikkelig spill. Maten skal vi generere på et tilfeldig sted, men vi må passe på at det ikke er på slangen. Slik gjør vi: Steg for steg Lag to nye variabler, foodx og foody. Øverst i koden legger du til disse kodelinjene let foodx: number = 0 let foody: number = 0 Så trenger vi en funksjon for å generere maten et tilfeldig sted function generatefood(){ foodx = Math.randomRange(0, 4); foody = Math.randomRange(0, 4); Men hvis vi er skikkelig uheldige nå så er maten et sted på slangen. Det må vi passe på at den ikke er. Først lager vi en funksjon som sjekker om et punkt er på slangen. Vi bruker samme metoden som i drawsnake() for å hente en og en posisjon på slangen (du kan kopiere 'innmaten' i fra drawsnake() og endre den hvis du vil) og sammenligner den med de posisjonene vi sender inn. Hvis begge stemmer er vi på slangen.

function isonsnake(myx: number, myy: number) { for (let index = 0; index <= snake.length - 1; index+=2) { if (myx === snake[index] && myy === snake[index+1]) { return true; return false; Oppdater generatefood() slik function generatefood() { foodx = Math.randomRange(0, 4); foody = Math.randomRange(0, 4); if (isonsnake(foodx, foody)) { generatefood(); Kall generatefood() under oppstart, like etter der du setter koordinatene i snake -arrayen. Da har vi en posisjon til maten, men vi må også tegne den. Lag en ny funksjon drawfood() slik function drawfood() { led.plot(foodx, foody); Kall drawfood() i fra forever(), etter clearscreen()

basic.forever(function () { if (isplaying) { basic.clearscreen() drawfood(); drawsnake(); basic.pause(1000); updatesnake(); ) Test prosjektet Test i simulatoren for å sjekke at maten blir tegnet. Nå har vi laget maten, da gjenstår det bare å spise den. Hvordan vet vi at vi er på riktig sted for å spise maten? Jo, hvis x og y i updatesnake() er den samme posisjonen som foodx og foody. Da skal slangen vokse med et punkt. Hvordan gjør vi det? Vi lar bare være å fjerne det siste punktet på halen i updatesnake(). Smart? Steg for steg Vi legger til denne lille kodesnutten som spiller en liten trudelutt når vi er på samme sted som maten, og genererer ny mat i updatesnake(). Hvis slangen ikke spiser mat, gjør vi det samme som før. if (x == foodx && y == foody) { music.beginmelody(music.builtinmelody(melodies.bading), MelodyO ptions.once); generatefood(); else { snake.pop(); snake.pop(); Etterhvert som slangen vokser må vi sjekke at den ikke biter seg selv. Vi har allerede en funksjon for å sjekke om x og y er på slangen. Vi legger til denne sjekken i checkgameover()

function checkgameover(x: number, y: number) { if (x < 0 x > 4 y < 0 y > 4 isonsnake(x,y)) { direction = 'up'; snake = [2, 1, 2, 2] music.beginmelody(music.builtinmelody(melodies.wawawawaa), Melo dyoptions.once); basic.showicon(iconnames.skull); basic.pause(2000); basic.showicon(iconnames.snake); isplaying = false; I tilegg til at slangen vokser og gjør det vanskeligere på den måten, så skal spillet også gå fortere etterhvert. Det gjør vi med å redusere pausen mellom hver oppdatering. Til det trenger vi en variabel som vi kaller for updaterate. La den være 1000 til å begynne med. Så skal vi trekke fra litt for hver oppdatering og litt mer hver gang slangen spiser mat. Endre slutten av updatesnake() slik if (x === foodx && y === foody) { music.beginmelody(music.builtinmelody(melodies.bading), MelodyO ptions.once); updaterate *= 0.95; generatefood(); else { snake.pop(); snake.pop(); buttonpressed = false updaterate -= 5; Så bruker vi updaterate i pausen i forever()

basic.forever(function () { if (isplaying) { basic.clearscreen(); drawsnake(); drawfood(); basic.pause(updaterate); updatesnake(); ) Test prosjektet Prøv spillet på micro:bit og sjekk at alt fungerer. Steg 7: Litt pynt Nå har vi i grunnen et fungerede spill. Men vi skal pynte bittelitt på det for å gjøre det litt bedre. Det kan være litt vanskelig å se maten noen ganger siden den kan komme hvor som helst og er lik slangen. For å gjøre det lettere å se den skal vi få den til å blinke. Det gjør vi med å bruke input.runningtime(). Denne funksjonen gir oss antall millisekund siden siden microbiten ble skrudd på. Steg for steg Hent ut input.runningtime() i begynnelsen av drawfood() og legg den i en variabel. Vi bruker et "triks" med % -operatoren for å dele i 500 millisekunder. Vi tegner bare maten hvis den resterende verdien er større enn 250, det gir oss ganske rask blinking. Koden ser slik ut: function drawfood() { const currenttime = input.runningtime(); if(currenttime%500 > 250){ led.plot(foodx, foody); Nå kan vi ikke lenger bruke pause() i forever(). Ta bort den kodelinjen.

Spillet må fremdeles vente mellom hver oppdatering av slangen. Til dette trenger vi en variabel som vi kan kalle lastupdatetime. Denne må vi resette samme sted som vi setter isplaying = true på første knappetrykk. lastupdatetime = input.runningtime(); I forever() henter vi ut tiden og ser om det har gått lengre tid enn updaterate siden vi gjorde en oppdatering. I så fall er det på tide med en ny oppdatering, og til slutt settes lastupdatetime slik at det er klart til å vente til neste gang vi skal gjøre en oppdatering. basic.forever(function () { ) if (isplaying) { basic.clearscreen(); drawsnake(); drawfood(); const currenttime = input.runningtime(); if(currenttime - lastupdatetime >= updaterate) { updatesnake(); lastupdatetime = currenttime; Test prosjektet på micro:bit Prøv spillet på micro:bit. Forhåpentligvis fungerer det brillefint. Gratulerer, du har nå gjort ferdig spillet. Her kommer et par utfordringer! Utfordring Legg til score og highscore som vises etter at du dør. Spill en liten melodi og vis New highscore hvis spilleren slo rekorden.

Tips: Du kan bruke lengden til snake-arrayen til å regne ut poeng. Utfordring Styr slangen automagisk. Få den til å gå rundt og finne mat selv og prøve å ikke krasje. Tips: Du har allerede skrevet kode som sjekker om slangen kjører utenfor eller kolliderer med seg selv. Du kan bruke den samme koden til å sjekke posisjonen og endre retning( direction ) mot høyre eller venstre hvis den krasjer, finne ny posisjon og sjekke om den også krasjer. For å finne maten kan du snu mot den når du kommer på samme rad eller kolonne som maten. Lisens: CC BY-SA 4.0 (http://creativecommons.org/licenses/by-sa/4.0/deed)