Invasjon fra verdensrommet – et spillprosjekt i Scratch

Dette opplegget er laget til bruk på Talentsenter i Realfag hvor vi hadde en samling om programmering for elever på mellomtrinnet. Fokus i prosjektet er å vise hvordan en kan lage et relativt enkelt spill i Scratch, for så å utvikle dette spillet videre i mange ulike retninger med ny funksjonalitet.

Opplegget ble gjennomført på med høy elevmedvirkning. Elevene ble presentert en ide, for så å komme med innspill på hva som måtte gjøres og hvordan det kunne løses på hvert eneste steg. Jeg har selvsagt en ide og en plan om hvor vi skal, men spiller mye på elevenes innspill.

Dette er en veldig artig måte å arbeide på, og elevene følte eierskap til spillet. Det hjalp selvsagt at de fikk lov til å gjøre visuelle endringer helt fra starten av, og at de fikk spille spillet på egendesignede spillkontrollere av MakeyMakey etterpå.

Oppgave
Vi skal lage et spill inspirert av det gode gamle Space Invaders spillet. Nederst skal vi ha et romskip som beveger seg sidelengs med piltastene og skyter mot gjenstander som faller ned fra himmelen. For hver gjenstand som skytes ned skal en få poeng. Om en gjenstand kommer for langt ned, er spillet ferdig.

Versjon 1 av spillet (enkel) finner du her: https://scratch.mit.edu/projects/916110970
Versjon 2 av spillet (litt mer komplisert) finner du her: https://scratch.mit.edu/projects/911917643

Steg 1 – Klargjøring
Vi oppretter et nytt prosjekt og finner en passende bakgrunn. Deretter sletter vi katten, og finner et romskip, lyn og en passende gjenstand vi kan skyte ned. I dette eksempelet har jeg brukt en flygende dinosaur.

Dessuten må vi endre størrelsene på objektene slik at de passer inn på skjermen og i spillet. Et romskip som dekker halve skjermen ser ganske dumt ut.

Lynet er også orientert feil, så det må vi snu 180 grader.

Steg 2 – Få romskipet til å bevege seg
Vi ønsker at romskipet skal bevege seg sidelengs ved hjelp av piltastene. Verdien kan endres alt etter hvor fort en ønsker romskipet skal bevege seg. Her passer det fint å snakke om koordinatsystemet som ligger som ligger til grunn for all bevegelse i Scratch.

Steg 3 – Få romskipet til å skyte
Romskipet skal skyte lyn når mellomromstasten trykkes. Vi trenger flere lyn, så vi må bruke muligheten til å lage kloninger av lynet.

Først må vi skjule lynet. Dette gjør vi når spillet starter.

Når mellomstasten trykkes, skal vi lage en kloning av lynet.

Siden lynet og romskipet er to forskjellige objekter, må disse kommunisere med hverandre slik at det ser ut til at lynene kommer fra romskipet. Dette kan løses på flere måter, men en spennende måte er å bruke en variabel til dette.

Vi lager en variabel som vi kaller «romskip_x», og som får romskipet sin x-posisjon når mellomromstasten trykkes. Denne koden må legges på romskipet, ellers så får den lynets posisjon.

Lynet bruker denne verdien når det gjenskapes som klon. Y-verdien settes til en passende verdi som er omtrent hvor romskipet er.

Deretter må lynes vises og bevege seg mot toppen av skjermen. Til dette bruker vi «gli»-blokken, og y-verdien settes til en passende verdi på toppen av spillet. Der slettes klonen.

Når dette testes ut, vil kanskje noen påpeke at lynet dukker opp i forkant av romskipet. Dette kan løses ved at en legger i blokken «legg bakerst» når flagget klikkes.

På tide å teste at en kan bevege romskipet fram og tilbake med piltastene, og at lynet fyres av når mellomromstasten. Kanskje må hastigheten endres, kanskje må størrelsen endres. Dette finner elevene raskt ut av.

Steg 4 – Plassere ut mål
Vi må selvsagt ha noe å skyte på. Dette kan gjøres på flere måter, og jeg kommer til å presentere en enkel og en mer komplisert måte.

Enkel variant
I den enkle versjonen skal vi la et og et mål dukke opp tilfeldige steder øverste på skjermen. De skal falle mot bakken. Også her skal vi bruke kloning, da vi har behov for flere mål om gangen.

Når spillet starter skal målet, i dette tilfellet en flygende dinosaur, skjules.

Deretter lager vi en løkke som lager klonene. For å unngå at det dukker opp en haug med kloner med en gang spillet starter, legger vi inn en vent-blokk som gjør slik at det blir et opphold mellom hver klone. For å gjøre dette litt mer spill-relatert venter vi et ukjent antall sekunder mellom hver gang vi lager en klon.

Komplisert variant
I den kompliserte varianten, skal vi sette ut 8 kloner av målet på en lang rekke. Bortsett fra det, skal de oppføre seg på akkurat samme måte. Vi skal ha flere rekker med mål, så vi bruker en gjenta for alltid-løkke.

For å plassere ut de 8 klonene på en rekke, må vi definere et startpunkt. Jeg har valgt å sette dette startpunktet øverst oppe til venstre. Jeg legger denne verdien i en variabel jeg har kalt target_x.

Siden vi skal ha flere kloner, legger vi en ny løkke inne i denne som kjøres et gitt antall ganger. Vi går til en gitt posisjon, lager klonen og endrer variabelen med en fast verdi slik at neste klonen kan plasseres. Denne verdien må kanskje endres for at alle klonene skal få plass. I tillegg må kanskje antall kloner reduseres eller økes. Elevene må prøve seg fram.

Til slutt må det legges inn en pause, slik at disse får falle litt før neste rad dukker opp. Dette gjør vi ved å sette inn en vent-blokk utenfor løkken som lager klonene, men inne i gjenta for alltid-løkken. Verdien må justeres etter hvor fort klonene faller, og må prøves ut.

Steg 5 – La målene falle mot romskipet
Når klonen starter skal den plasseres tilfeldig et sted på toppen før den vises fram. Her passer det godt å repetere hvordan koordinatsystemet som definerer hvordan skjermen i Scratch er bygget opp.

Vi ønsker så at målet, i dette tilfellet dinosauren, skal falle mot bunnen. Det skal ikke falle helt til bunnen, men så langt at når det kommer ned til romskipet skal spillet avsluttes. Her kan vi legge inn en løkke, som går helt til den når en gitt posisjon. Verdien som ligger inne i «endre y» blokken definerer hastigheten målet faller med. Jo større verdi, jo raskere faller den.

På tide å teste at ting fungerer så langt. Test ut spillet:
– kan du bevege romskipet med piltastene?
– kan du skyte ut lyn med mellomromstastene?
– dukker målene opp slik de skal?
– faller målene mot romskipet?
– stopper spillet om målet kommer helt ned til romskipet?

Steg 6 – Registrere treff
Elevene vil nok oppdage at ting må endres for at alt skal se bra ut. Dette er en naturlig del av prosessen. Ganske raskt vil de også reagere på at målene ikke forsvinner om lynene treffer dem. Det er heller ikke noe system for poeng, noe som ofte er hovedgrunnen til å spille.

Vi begynner med å registrere at målet blir truffet. Dette kan gjøres på flere måter, og i denne løsningen bruker vi en test som kjøres hele tiden, mens målet beveger seg nedover (den legges inne i løkken). Vi bruker berører-blokken for å oppdage at to objekter berører hverandre.

Når målet berører lynet, skal målet, altså klonen slettes.

Steg 7 – Få poeng for treff
Vi må lage et poeng-system for spillet. Vi oppretter en variabel som vi kaller poeng som må nullstilles når spillet starter. Vi legger denne på det grønne flagget under målet, og setter denne til 0.A

Spilleren skal få poeng når lynet treffer målet, så vi kan plassere denne på samme sted som vi registrerer treffet (se steg 6).

Steg 8 – Fjerne lynet etter treff
Første gang jeg kjørte denne økten med elever, hadde vi noen elever som la merke til (og irriterte seg over) at lynene ikke forsvant om de traff målet. På denne måten kunne de dermed også treffe mål som kom bak. Dette kunne vi ikke ha noe av, så vi måtte legge inn kode som fjernet lynet også.

Siden vi hadde kodet lynet på en slik måte vi gjorde, kunne vi ikke bruke berører-blokken slik vi gjorde på målet. Eventuell test ville ikke bli kjørt før etter at det hadde nådd posisjonen sin. Dermed måtte vi løse det på en annen måte.

Vi valgte å sende en melding fra målet til lynet om at målet var truffet!

På lynet, legger vi inn kode som mottar meldingen treff, og sletter klonen. Enkelt og greit.

Nå er spillet klart til å spilles. Men det er viktig å gjøre en grundig test.

  • Forsvinner målene når de blir truffet?
  • Får spilleren poeng når målet blir truffet?
  • Blir poengene satt til null når spillet starter?
  • Forsvinner lynet når målet blir truffet?

Det er mange ting å tenke på, og når en tester slik, vil elevene finne nye ting de ønsker å legge til spillet. Andre elever vil være veldig fornøyd når spillet er i denne versjonen.

Videreutvikling av spillet (med tips til løsning)

  • Startside – lage en ny bakgrunn med informasjon og logo, skjule alle objekter
  • Game over – når spillet er slutt, lage en ny bakgrunn med informasjon, skjule objekter
    Begge disse endringene kan løses ved å sende meldinger og bytte bakgrunner
  • Flere liv til romskipet
    Kan løses ved hjelp av en variabel som settes ved spillstart og endres underveis
  • Øke vanskelighetsgraden ved at målene faller raskere mot romskipet
  • Øke vanskelighetsgraden ved at det kommer mål oftere og oftere
    Kan løses ved hjelp av variabler som styrer verdiene og som endres etterhvert
  • Øke vanskelighetsgraden ved at målene slipper bomber mot romskipet…..

Kommentarer er stengt.

Blogg på WordPress.com.

opp ↑