Level 2PXT: Det regner mat!

Skrevet av: Helene Isnes

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

Introduksjon

"Det regner mat!" er et spill som går ut på å fange flest mulig matbiter. Det fungerer slik at matbiter faller ned på skjermen og spilleren som står på bunn skal prøve å fange maten. Spilleren skal bevege seg med knappene A og B. Liv går tapt når spilleren ikke klarer å få tak i maten. Spilleren har til sammen tre liv før spillet er over.

Steg 1: Grunnlag

Det første vi skal gjøre er å kode grunnlaget for spillet. Vi skal lage mat, en spiller og sette antall liv. Vi må også starte opp noe som holder kontroll på poengsummen.

checkSjekkliste

Skjermen vår består av 5x5 ledlys. Disse kan vi skru av og på med litt kode. I denne oppgaven bruker vi klosser fra Spill-kategorien til å sette og endre hvor lysene skal være. Posisjonen til lysene blir gitt med en x- og en y-posisjon som i et rutenett. Verdien til x angir plassen til lyset bortover (horisontalt) og verdien til y angir plassen nedover (vertikalt), dette er vist på bildet under. Hjørnet øverst til venstre har verdiene (0,0) mens hjørnet nederst til høyre har verdiene (4,4).

Bilde som viser hvordan x og y angir posisjonen til ledlysene

Spilleren skal bevege seg på nederste rad til høyre og venstre. Vi vil at spiller skal starte på midten av skjermen ved start (x: 2 og y: 4).

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

Sett spiller til-klossen finner du i Variabler. Create sprite at x: 2 y: 4-klossen finner du i kategorien Spill i Avansert.

Det er egentlig ikke så viktig hvor vi plasserer mat ved starten siden den kommer til å flytte på seg i neste steg. Det som er viktig er at mat finnes på spillebrettet ved start slik at det går an å bruke variabelen senere.

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

Både mat og spiller blir et ledlys hver på micro:biten. Hvis du vil skille litt mer mellom dem kan du få maten til å lyse litt mindre enn spilleren. Dette gjør du ved å sette sprite angir x til 0-klossen etter sett poengsum til 0. Bytt ut sprite med mat og x med lysstyrke. Det er litt forskjell på hvordan simulatoren og micro:biten opplever lysstyrke, så imens du er i simulaturen setter du lysstyrke til 100. Når du laster spillet opp til micro:biten, endre lysstyrken til 30.

Steg 2: Mat regner

I dette steget skal vi få maten til å regne ned. Maten skal starte på et tilfeldig sted på øverste rad hver runde.

checkSjekkliste

Det vi har gjort til nå er å ha satt mat til en tilfeldig x-posisjon (et tilfeldig sted bortover). Vi har i tillegg passet på at mat starter på øverste rad for hver runde. Det vi skal gjøre videre, er å lage kode for maten som skal regne ned.

For å få maten til å regne nedover, må vi endre posisjonen til variabelen mat i y-retning. Vi endrer posisjonen med 1 for hver gang vi går gjennom løkka.

Hvis vi ikke legger til pause-klosser vil maten bevege seg for fort til at vi klarer å fange den!

Steg 3: Få poeng og tap liv

Nå skal vi lage kode som enten gir spilleren poeng hvis den klarer å fange maten eller som tar bort et liv hvis spilleren ikke greier å fange den.

checkSjekkliste

Vi vil at poengsummen skal øke med én hvis spilleren klarer å fange maten.

Hvis-ellers-klossen fungerer slik at hvis spilleren får tak i maten, vil programmet kjøre koden som hører til hvis-delen av klossen. Hvis dette ikke er sant (spilleren klarte ikke å få tak i maten denne runden), vil programmet kjøre koden som hører til ellers-delen av klossen.

Når spiller ikke klarer å fange maten, skal vi miste et liv.

Videre må vi sjekke om variabelen liv er lik null, for hvis den er det, er spillet over.

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 spilleren!

Nå skal vi lage siste del av koden, nemlig koden for å bevege på spilleren!

checkSjekkliste

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

flagTest prosjektet

Koden din er nå ferdig!

For lett eller vanskelig? Du kan endre hastigheten maten faller ned og/eller endre antall liv man har ved start.

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!