Level 2PXT: Det regnar mat!

Skrevet av: Helene Isnes

Oversatt av: Stein Olav Romslo

Kurs: Microbit
Tema: Elektronikk, Blokkbasert, Spill
Fag: Matematikk, Programmering
Klassetrinn: 5.-7. klasse, 8.-10. klasse, Videregående skole
Bilde av BokmålPå Bokmål

Introduksjon

"Det regnar mat!" er eit spel som går ut på å fange flest mogleg matbitar. Det fungerer slik at matbitar fell ned på skjermen og spelaren som står på botnen skal prøve å fange maten. Spelaren skal bevege seg med knappane A og B. Ein mistar liv når spelaren ikkje klarar å få tak i maten. Spelaren har til saman tre liv før spelet er over.

Steg 1: Grunnlag

Det fyrste me skal gjere er å kode grunnlaget for spelet. Me skal lage mat, ein spelar og setje antal liv. Me må også starte noko som kan halde styr på poenga.

checkSjekkliste

Skjermen vår har 5x5 ledlys. Desse kan me skru av og på med litt kode. I denne oppgåva brukar me klossar frå Spel-kategorien til å setje og endre kor lysa skal vere. Posisjonen til lysa blir gitt ved ein x- og ein y-posisjon, som i eit rutenett. Verdien til x gir plassen til lyset bortover (vassrett) og verdien til y gir plassen nedover (loddrett), som du ser på biletet under. Hjørnet øvst til venstre er (0, 0) og hjørnet nedst til høgre er (4, 4).

Bilete som viser korleis x og y gir posisjonen til ledlysa

Spelaren skal bevege seg til høgre og venstre nedst på skjermen. Me vil at spelar skal starte på midten av skjermen når me startar, (x = 2 og y = 4).

let spiller: game.LedSprite = null
spiller = game.createSprite(2, 4)

Du finn Set spelar til-klossen i Variablar. Create sprite at x: 2 y: 4-klossen finn du i kategorien Spel i Avansert.

Det er eigentleg ikkje så viktig kor me plasserer mat ved starten, sidan den skal flytte på seg i neste steg. Det som er viktig er at mat er på spelebrettet når me startar, slik at det går an å bruke variabelen seinare.

let spiller = game.createSprite(2, 4)
let mat = game.createSprite(2, 2)
let liv = 3
game.setScore(0)

Både mat og spelar blir eit ledlys kvar på micro:bit-en. Viss du vil skilje dei meir frå kvarandre kan du få maten til å lyse litt mindre enn spelaren. Det gjer du ved å setje sprite angir x til 0-klossen etter set poengsum til 0. Bytt ut sprite med mat og x med lysstyrke. Simulatoren og micro:bit-en opplever lysstyrke på litt ulike måtar, så i simulatoren kan du ha lysstyrke 100, men når du lastar det ned bør du ha endra lysstyrken til 30.

Steg 2: Mat regnar

I dette steget skal me få maten til å regne ned. Maten skal starte på ein tilfeldig stad på øvste rad kvar runde.

checkSjekkliste

Til no har me sett mat til ein tilfeldig x-posisjon, og sikra at den startar på øvste rad kvar runde. Vidare skal me lage kode for maten som skal regne ned.

For å få maten til å regne nedover må me endre posisjonen til mat i y-retninga. Me endrar posisjonen med 1 for kvar gong me går gjennom løkka.

Viss me ikkje legg til pause-klosser vil maten bevege seg for fort til at me klarar å fange den!

Steg 3: Få poeng og tap liv

No skal me lage kode som anten gir spelaren poeng viss den fangar maten, eller som tek bort eit liv viss spelaren ikkje klarar det.

checkSjekkliste

Me vil at poengsummen skal auke med 1 viss spelaren klarar å fange maten.

Viss-elles-klossen fungerer slik at viss spelaren får tak i maten, så vil programmet køyre koden som høyrer til viss-delen av klossen. Viss ikkje dette er sant (spelaren klarte ikkje å få tak i maten denne runden), så vil programmet køyre koden som høyrer til elles-delen av klossen.

Når spelar ikkje klarar å fange maten skal me miste eit liv.

Vidare må me sjekke om variabelen liv er lik null, for viss den er det har spelaren tapt.

basic.forever(function () {
    let spiller: game.LedSprite = null
    let mat: game.LedSprite = null
    mat.set(LedSpriteProperty.X, Math.randomRange(0, 4))
    mat.set(LedSpriteProperty.Y, 0)
    basic.pause(300)
    for (let i = 0; i < 4; i++) {
        mat.change(LedSpriteProperty.Y, 1)
        basic.pause(300)
    }
    if (spiller.isTouching(mat)) {
        game.addScore(1)
    } else {
        liv += -1
        if (liv == 0) {
            game.gameOver()
        }
    }
})

flagTest prosjektet

Steg 4: Beveg spelaren!

No skal me lage siste del av koden, nemleg koden for å styre spelaren!

checkSjekkliste

  input.onButtonPressed(Button.A, function () {
      let spiller: game.LedSprite = null
      spiller.change(LedSpriteProperty.X, -1)
  })

flagTest prosjektet

No er koden ferdig!

Er spelet for lett eller vanskeleg? Du kan endre hastigheiten maten fell ned med og/eller endre kor mange liv ein startar med.

Utfordring

Lisens: CC BY-SA 4.0

Forbedre denne siden

Funnet en feil? Kunne noe vært bedre?
Hvis ja, vennligst gi oss tilbakemelding ved å lage en sak på Github eller fiks feilen selv om du kan. Vi er takknemlige for enhver tilbakemelding!