Soloball
Skrevet av: Geir Arne Hjelle
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.
Steg 1: En roterende katt
Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.
Sjekkliste
-
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.
Test 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.
Sjekkliste
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.
Test 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.
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.
Sjekkliste
-
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 iBevegelse
-kategorien. -
pek i retning ((180) + (retning))
gjør at ballen snur? Vi vil se nærmere på dette i Steg 6.
Test 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.
Sjekkliste
-
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.
Test prosjektet
Klikk på det grønne flagget.
Steg 5: Nettet fanger ballen
Vi vil at ballen skal stoppe når den treffer nettet.
Sjekkliste
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
Test 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.
Sjekkliste
En bra modell for hvordan en ball spretter er at vinkelen ut er den samme som vinkelen inn.
I spillet er det to retninger vi må tenke på, retningen til ballen og retningen kattefiguren står i.
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 (retning av katt) 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
Test prosjektet
Klikk på det grønne flagget.
Lagre 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!
Sjekkliste
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.
Sjekkliste
Hastigheten på ballen styres nå av klossen
gå (3) steg
Ved å endre på 3
-tallet endrer vi hastigheten på ballen. Prøv dette selv!
-
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.
Sjekkliste
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!
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!