Level 1Soloball

Skrevet av: Geir Arne Hjelle

Oversatt av: Stein Olav Romslo

Kurs: Scratch
Tema: Blokkbasert, Spill
Fag: Matematikk, Programmering
Klassetrinn: 1.-4. klasse, 5.-7. klasse, 8.-10. klasse
Bilde av BokmålPå Bokmål

Introduksjon

No skal me lære korleis me lagar eit enkelt ballspel i Scratch. I Soloball skal du styre katten som kontrollerer ballen slik at ballen ikkje går i nettet.

Bilete av katten Felix som speler soloball

Steg 1: Ein roterande katt

Me startar med å sjå på korleis me kan få kattefiguren til å rotere.

checkSjekkliste

  • når @greenFlag vert trykt på
    gå til x: (0) y: (0)
    gjenta for alltid
        peik mot [musepeikar v]
    slutt
    

    Dette er eit døme på eit lite program, eller skript, som det kallast i Scratch. Dette skriptet seier at kattefiguren skal stå midt på skjermen og alltid peike mot, eller sjå mot, musepeikaren.

flagTest prosjektet

Klikk på det grøne flagget.

Steg 2: Katten spring rundt

I staden for at katten roterer vil me at den skal kunne springe rundt i sirkel på skjermen.

checkSjekkliste

No skal me gjere eit lite triks der me flyttar katten vekk frå sentrum slik at det ser ut som den spring i sirkel i staden for berre å rotere.

  • Bilete av korleis krympe katten Felix
  • Bilete av korleis rotere katten Felix
  • Bilete av korleis flytte den roterte katten Felix

flagTest prosjektet

Klikk på det grøne flagget.

Kva skjedde?

Sjølv om me ikkje endra programmet vårt oppfører katten seg veldig annleis. Forstår du kvifor?

Når me seier at katten skal peike mot musepeikaren må den rotere om eit punkt. Dette punktet kallast senterpunktet til figuren. Du kan sjå (og endre) senterpunktet til ein figur ved å klikke på Velsenterpunkt øvst til høgre på skjermen.

Når me flyttar senterpunktet utanfor katten vil det sjå ut som om katten spring rundt dette punktet i staden for at den berre roterer utan å flytte seg.

Steg 3: Ein ball!

No skal me lage ein ball og få den til å sprette rundt på skjermen.

checkSjekkliste

  • når @greenFlag vert trykt på
    gå til x: (0) y: (0)
    gjenta for alltid
        gå (3) steg
        viss <rører [Katt v] ?>
            peik i retning ((180) + (retning))
        slutt
    slutt
    

    Klossen retning finn du heilt nedst i Rørsle-kategorien.

  • peik i retning ((180) + (retning))
    

    gjer at ballen snur? Me skal sjå nærare på dette i steg 6.

flagTest prosjektet

Klikk på det grøne flagget.

Steg 4: Eit nett!

No skal me lage eit nett som kan fange ballen viss den flyr forbi katten.

checkSjekkliste

  • Bilete av ein heilt loddrett strek
  • når @greenFlag vert trykt på
    gå til x: (0) y: (0)
    gjenta (36) gongar
        snu @turnLeft (10) gradar
        lag avtrykk
    slutt
    

    Klossen lag avtrykk stemplar ein figur på bakgrunnen slik at den blir der. Du kan fjerne slike avtrykk att ved å bruke slett-klossen.

flagTest prosjektet

Klikk på det grøne flagget.

Steg 5: Nettet fangar ballen

Me vil at ballen skal stoppe når den treff nettet.

checkSjekkliste

Til no har me ikkje laga noko kode som fortel ballen at den har treft nettet. Det skal me gjere no.

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

flagTest prosjektet

Klikk på det grøne flagget.

Steg 6: Meir naturleg sprett

No sprett ballen berre framm og attende på same linje heile tida. Me vil at den skal sprette meir naturleg når den treff katten.

checkSjekkliste

Ein bra modell for korleis ein ball sprett er at vinkelen ut er den same som vinkelen inn. Tenk på korleis ein ordentleg ball sprett viss du kastar den inn i ein vegg frå ein skrå vinkel.

Bilete av korleis ein ball sprett

I spelet er det to retningar me må tenke på: retninga til ballen og retninga kattefiguren står i.

Bilete av retning for katt og ball

I figuren over og i koden vidare tyder retning retninga til ballen, sidan koden høyrer til ballfiguren. Til no har me brukt

peik i retning ((180) + (retning))

for at ballen skal snu. I figuren ser me at dette tyder at ballen sprett tilbake dit den kom frå.

Me bør òg kompensere for retninga til Katt. Dette kan me gjere ved å trekke frå to gonger (retning - retning av katt). Forstår du korleis når du ser på figuren? Då blir den nye retninga

(((180) + (retning)) - ((2) * ((retning) - ([retning v] av [Katt v])))

Me kan forenkle dette til

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

flagTest prosjektet

Klikk på det grøne flagget.

saveLagre og legg ut prosjektet

No har me laga eit ganske morosamt spel! Viss du vil kan du gå vidare med dei neste stega for å gjere spelet endå meir spanande.

For å lagre spelet ditt kan du velje Lagre no i Fil-menyen. Då blir spelet lagra på brukarkontoen din hjå Scratch. Viss du ikkje har laga brukarkonto kan du velje Last ned til datamaskinen i staden.

Viss du lagrar spelet på brukarkontoen din kan du òg velje å leggje det ut slik at andre kan spele det. For å gjere det klikkar du på Legg ut øvst til høgre. Så kan du dele nettadressa til spelet ditt med venene og familien din.

Ekstra 1: Tell poeng

Alle spel blir meir morosame om ein får poeng!

checkSjekkliste

For å telje poeng skal me bruke noko som kallast ein variabel. Ein variabel er eit namn på ein verdi som kan variere.

No vil me at Poeng skal setjast til 0 når spelet startar. Så skal me få eitt poeng kvar gong me returnerer ballen.

  • når @greenFlag vert trykt på
    gå til x: (0) y: (0)
    set [Poeng v] til [0]
    gjenta for alltid
        gå (3) steg
        viss <rører [Katt v] ?>
            peik i retning (((180) - (retning)) + ((2) * ([retning v] av [Katt v])))
            endra [Poeng v] med (1)
        slutt
        viss <rører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

Ekstra 2: Auk hastigheita

No skal me gjere spelet vanskelegare etter kvart som tida går, ved at ballen beveger seg stadig raskare.

checkSjekkliste

Hastigheita på ballen blir no styrt av klossen

gå (3) steg

Ved å endre på 3-talet endrar me hastigheita på ballen. Prøv å gjere det sjølv!

  • Bilete av korleis ein skjuler variabelen "Hastigheit"
  • når @greenFlag vert trykt på
    gå til x: (0) y: (0)
    set [Poeng v] til [0]
    set [Hastigheit v] til [3]
    gjenta for alltid
        gå (Hastigheit) steg
        viss <rører [Katt v] ?>
            peik i retning (((180) - (retning)) + ((2) * ([retning v] av [Katt v])))
            endra [Poeng v] med (1)
            endra [Hastigheit v] med (0.1)
        slutt
        viss <rører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

    Pass på at du endrar gå steg-klossen òg.

Ekstra 3: Unngå at katten fangar ballen

Du har sikkert opplevd at katten av og til "fangar" ballen. No skal me fikse dette.

checkSjekkliste

Av og til virkar det som om katten "fangar" ballen. Det skjer fordi ballen ikkje flyttar seg langt nok etter at den har snudd. Den er framleis borti katten, og difor snur den att... Og igjen... Og igjen.

Me skal bruke Flytt-variabelen til å telje kor mange flytt ballen har gjort sidan den var borti katten sist. Så kan me seie at ballen berre skal snu viss den har flytta mange gonger sidan sist den snudde.

  • når @greenFlag vert trykt på
    gå til x: (0) y: (0)
    set [Poeng v] til [0]
    set [Hastigheit v] til [3]
    gjenta for alltid
        gå (Hastigheit) steg
        endra [Flytt v] med (1)
        viss <<rører [Katt v] ?> og <(Flytt) > [20]>>
            peik i retning (((180) - (retning)) + ((2) * ([retning v] av [Katt v])))
            endra [Poeng v] med (1)
            endra [Hastigheit v] med (0.1)
            set [Flytt v] til [0]
        slutt
        viss <rører fargen [#ff0000] ?>
            stopp [alle v] :: control
        slutt
    slutt
    

Prøv sjølv

I desse ekstrastega har me sett på nokre måtar me kan gjere spelet betre og meir spanande. Her er endå fleire idear:

Det er mange andre ting du kan prøve på. 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!