Soloball

Skrevet av: Geir Arne Hjelle

Kurs: Scratch
Tema: Blokkbasert, Spill
Fag: Matematikk, Programmering
Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse
Til lærerveiledningLast ned PDF

Introduksjon

Vi skal nå lære hvordan vi kan lage et enkelt ballspill med Scratch. I soloball skal du styre katten som kontrollerer ballen, slik at ballen ikke går i nettet.

Bilde av katten Felix som spiller soloball

Steg 1: En roterende katt

Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

checkSjekkliste

  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    gjenta for alltid
        pek mot [musepeker v]
    slutt
    

    Dette er et eksempel på et lite program, eller skript som det kalles i Scratch. Dette skriptet sier at kattefiguren skal stå midt på skjermen og alltid peke mot, eller se mot, musepekeren.

flagTest prosjektet

Klikk på det grønne flagget.

Steg 2: Katten løper rundt

I stedet for at katten roterer vil vi at den skal kunne løpe rundt i sirkel på skjermen.

checkSjekkliste

Vi skal nå gjøre et lite triks hvor vi flytter katten vekk fra sentrum slik at det ser ut som om den løper i sirkel i stedet for å rotere.

  • Bilde av hvordan krympe katten Felix
  • Bilde av hvordan rotere katten Felix
  • Bilde av hvordan flytte den roterte katten Felix

flagTest prosjektet

Klikk på det grønne flagget.

Hva skjedde?

Selv om ikke endret programmet vårt oppfører katten seg veldig annerledes. Skjønner du hvorfor?

Når vi sier at katten skal peke mot musepekeren må den rotere rundt et punkt. Dette punktet kalles senterpunktet til figuren.

Senterpunktet er i midten av bildet til katten. Når du trykker = ikonet under bildet vil du se hele bildet til figuren, og senterpunktet er da alltid i midten.

Senterpunkt illustrasjon

Når katten er utenfor senterpunktet vil det se ut som om katten løper rundt dette punktet i stedet for at den bare roterer uten å flytte seg.

Steg 3: En ball!

Nå skal vi lage en ball og få den til å sprette rundt på skjermen.

checkSjekkliste

  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    gjenta for alltid
        gå (3) steg
        hvis <berører [Katt v] ?>
            pek i retning ((180) + (retning))
        slutt
    slutt
    

    Klossen retning finner du helt nederst i Bevegelse-kategorien.

  • pek i retning ((180) + (retning))
    

    gjør at ballen snur? Vi vil se nærmere på dette i Steg 6.

flagTest prosjektet

Klikk på det grønne flagget.

Steg 4: Et nett!

Vi skal nå lage et nett som kan fange ballen hvis den flyr forbi katten.

checkSjekkliste

  • Bilde av en helt loddrett strek
  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    gjenta (36) ganger
        snu @turnLeft (10) grader
        lag klon av (meg)
    slutt
    

    lag klon av (meg) lager en kopi av figuren der den befinner seg, før original-figuren flytter seg videre.

flagTest prosjektet

Klikk på det grønne flagget.

Steg 5: Nettet fanger ballen

Vi vil at ballen skal stoppe når den treffer nettet.

checkSjekkliste

Foreløpig har vi ikke laget noe kode som forteller ballen at den har truffet nettet. Det skal vi gjøre nå.

  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    gjenta for alltid
        gå (3) steg
        hvis <berører [Katt v] ?>
            pek i retning ((180) + (retning))
        slutt
        hvis <berører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

flagTest prosjektet

Klikk på det grønne flagget.

Steg 6: Mer naturlig sprett

Nå spretter ballen bare fram og tilbake på samme linje hele tiden. Vi vil at den skal sprette litt mer naturlig når den treffer katten.

checkSjekkliste

En bra modell for hvordan en ball spretter er at vinkelen ut er den samme som vinkelen inn.

Bilde av hvordan en ball sprett

I spillet er det to retninger vi må tenke på, retningen til ballen og retningen kattefiguren står i.

Bilde av retning av katt og ball

Før vi gjør noe mer så trenger ballen å vite hvilken retning katten har.

 når @greenFlag klikkes
 gå til x: (0) y: (0)
 gjenta for alltid
     pek mot [musepeker v]
     sett (kattens retning) til (retning)
 slutt

Nå kan ballen få tak i retningen til katten.

I figuren over og i koden videre betyr retning retningen til ballen, siden koden tilhører ballfiguren. Så langt har vi brukt

pek i retning ((180) + (retning))

for at ballen skal snu. I figuren ser vi at dette betyr at ballen spretter tilbake der den kom i fra.

Vi bør også kompensere for retningen til Katt. Dette kan vi gjøre ved å trekke fra to ganger (retning - retning av katt). Skjønner du hvorfor av figuren? Da blir den nye retningen

(((180) + (retning)) - ((2) * ((retning) - (retning av katt)))

Vi kan forenkle dette til

(((180) - (retning)) + ((2) * (retning av katt)))
  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    gjenta for alltid
        gå (3) steg
        hvis <berører [Katt v] ?>
            pek i retning (((180) - (retning)) + ((2) * (retning av katt)))
        slutt
        hvis <berører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

flagTest prosjektet

Klikk på det grønne flagget.

saveLagre og legg ut prosjektet

Vi har nå laget et ganske morsomt spill! Hvis du vil kan du gå videre med de neste stegene for å gjøre spillet enda litt mer spennende.

For å lagre spillet ditt kan du velge Lagre nå i Fil-menyen. Spillet blir da lagret på brukerkontoen ditt hos Scratch. Om du ikke har laget deg brukerkonto kan du velge Last ned til datamaskinen i stedet.

Om du lagrer spillet på brukerkontoen din kan du også legge det ut slik at andre kan spille det. For å gjøre dette klikker du Legg ut i midten i toppen av skjermen. Du kan deretter dele nettadressen til spillet ditt med venner og familie.

Ekstra 1: Tell poeng

Alle spill blir morsommere hvis man får poeng!

checkSjekkliste

For å telle poeng skal vi bruke noe som kalles en variabel. En variabel er et navn på en verdi som kan variere.

Vi vil nå at Poeng skal settes til 0 når spillet starter. Deretter skal vi få ett poeng hver gang vi returnerer ballen.

  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    sett [Poeng v] til [0]
    gjenta for alltid
        gå (3) steg
        hvis <berører [Katt v] ?>
            pek i retning (((180) - (retning)) + ((2) * (retning av katt)))
            endre [Poeng v] med (1)
        slutt
        hvis <berører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

Ekstra 2: Øk hastigheten

Vi skal nå lage spillet vanskeligere etterhvert som tiden går, ved at ballen beveger seg stadig raskere.

checkSjekkliste

Hastigheten på ballen styres nå av klossen

gå (3) steg

Ved å endre på 3-tallet endrer vi hastigheten på ballen. Prøv dette selv!

  • Bilde av hvordan skjule variabelen "Hastighet"
  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    sett [Poeng v] til [0]
    sett [Hastighet v] til [3]
    gjenta for alltid
        gå (hastighet) steg
        hvis <berører [Katt v] ?>
            pek i retning (((180) - (retning)) + ((2) * (retning av katt)))
            endre [Poeng v] med (1)
            endre [Hastighet v] med (0.1)
        slutt
        hvis <berører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

    Pass på at du også endrer gå steg-klossen.

Ekstra 3: Unngå at katten fanger ballen

Du har sikkert opplevd at katten av og til "fanger" ballen. Vi skal nå fikse slik at den ikke gjør det.

checkSjekkliste

Av og til virker det som om katten "fanger" ballen. Dette skjer fordi ballen ikke flytter seg langt nok etter at den har snudd. Den fortsetter å berøre katten og blir derfor snudd igjen ... og igjen ... og igjen.

Flytt-variabelen vil vi bruke til å telle hvor mange flytt ballen har gjort siden den sist berørte katten. Deretter kan vi si at ballen skal snu kun hvis den har flyttet mange ganger siden den sist snudde.

  • når @greenFlag klikkes
    gå til x: (0) y: (0)
    sett [Poeng v] til [0]
    sett [Hastighet v] til [3]
    gjenta for alltid
        gå (hastighet) steg
        endre [Flytt v] med (1)
        hvis <<berører [Katt v] ?> og <(Flytt) > [20]>>
            pek i retning (((180) - (retning)) + ((2) * (retning av katt)))
            endre [Poeng v] med (1)
            endre [Hastighet v] med (0.1)
            sett [Flytt v] til [0]
        slutt
        hvis <berører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

Prøv selv

I disse ekstrastegene har vi sett på noen måter vi kan gjøre spillet bedre og mer spennende på. Her er enda flere ideer:

Det finnes mange andre ting å prøve også. Du bestemmer!

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!