PGZ - Springande strekmann
Skrevet av: Ole Andreas Ramsdal, Kodeklubben Trondheim
Oversatt av: Stein Olav Romslo
Introduksjon
I denne oppgåva skal du lage eit spel der du styrer ein strekmann som hoppar over hindringar.

Steg 0: Installere Pygame Zero
For å gjere denne oppgåva må du installere Pygame Zero. Start med å sjekke at du har installert Python 3, altså at Python-versjonen din er nummerert på forma 3.X.X.
Åpne kommandolinja (engelsk: command prompt) på datamaskina di. Brukar du Windows kan du åpne start-menyen og skrive cmd (eventuelt Ledetekst, som er det norske namnet på programmet som skal køyre). På Mac og Linux åpnar du terminalvindauget. Skriv inn følgjande:
Windows og Mac:
pip install pgzero
Linux:
sudo pip install pgzero
Nokre Linux-system kallar den pip3
, i så fall må du skrive det i staden for pip
i koden over. Viss pip ikkje er installert kan du prøve å skrive
sudo python3 -m ensurepip
før du prøver sudo pip install pgzero
att.
Steg 1: Ny fil
Start med å lage ei fil som kan køyrast med Pygame Zero.
Sjekkliste
-
WIDTH = 550 HEIGHT = 250
Steg 2: Hindringar
No skal du lage boksane som strekmannen spring mot. Dette skal du gjere ved hjelp av ei klasse.
Sjekkliste
-
class Box: # Skriv eigenskapar her def draw(self): # Skriv koden som teiknar boksen her
Tips: Bruk kommandoen
screen.draw.filled_rect()
for å teikne rektangel. Ein raud boks som er 50 pikslag brei og høg blir teikna oppe til venstre med:screen.draw.filled_rect( Rect(0, 0, 50, 50) , (255, 0, 0) )
Ein blå boks nede til høgre blir:
screen.draw.filled_rect( Rect(WIDTH-50, HEIGHT-50, 50, 50) , (0, 0, 255) )
-
box = Box()
-
def draw(): box.draw()
Steg 3: Strekmann
Du skal du lage ein strekmann me kallar stick_man
.
Sjekkliste
-
stick_man = Actor('running_man')
-
stick_man.bottomleft = 50, HEIGHT
- For at koden skal køyre må du lagre biletet av strekmannen under som
running_man.png
i mappaimages
der du har lagrarun_stickman.py
.
- For at koden skal køyre må du lagre biletet av strekmannen under som
-
Steg 4: Funksjonane draw() og update()
Dei fleste spela i [Pygame Zero] har funksjonane [draw()
(les meir)] og [update()
(les meir)]. Draw-funksjonen syt for at spelvindauget blir teikna, og update-funksjonen gjer endringar i spelet før dei blir teikna med draw()
.
[Pygame Zero]: https://pygame-zero.readthedocs.org/ [draw()
(les meir)]: https://pygame-zero.readthedocs.org/en/latest/hooks.html?highlight=draw#draw [update()
(les meir)]: https://pygame-zero.readthedocs.org/en/latest/hooks.html?highlight=update#update
Sjekkliste
-
def draw(): screen.clear() screen.fill((255, 255, 255)) stick_man.draw() box.draw()
-
-
Få boksen til å flytte seg mot venstre.
-
Viss boksen er ute av biletet på venstre side, flytt den til høgre side av vindauget.
-
Viss strekmannen blir treft av boksen, skriv "Du traff boksen!!" til terminalen.
def update(): # Flytt boksen mot venstre if "boksen er ute av biletet": # Flytt boksen til høgre side av biletet if "strekmannen er treft": print("Du traff boksen!")
-
Tips
Flytt boksen
For å få boksen til å flytte seg kan du endre x-posisjonen til boksen.
Sjekk om strekmannen blir treft
Legg merke til at y-aksen til spelvindauget er positiv nedover, motsett av det som er vanleg. Boksen sin x- og y-posisjon er der boksen sitt øvre venstre hjørne er plassert. Det er merka i biletet som (x, y)
.

Den raude firkanten illustrerer kor stort biletet til strekmannen er. I tilfellet merka 1 ser du at boksen sitt øvre venstre hjørne er inni biletet til strekmannen. Dette må du sjekke i if-setninga.
I tilfelle 2 er boksen sitt øvre høgre hjørne inne i biletet til strekmannen. Det må du òg sjekke i if-setninga.
Korleis finne posisjonen til strekmannen?
-
stick_man.bottom
gir posisjonen til botnen avstick_man
. -
stick_man.left
gir posisjonen til venstre side avstick_man
.
Steg 5: Animasjonar
No skal du gjere det mogleg for strekmannen å hoppe med mellomromtasten.
Sjekkliste
-
def on_key_down(key): #(Koden din)
on_key_down()
(les meir) blir køyrt kvar gong spelaren trykkar på ein tast. Kva tast som blir trykka blir sendt til funksjonen somkey
. -
jump_up = animate(stick_man, 'decelerate', duration=0.4, bottom=(HEIGHT - box.height*1.5))
Koden fortel at:
-
Me skal lage ein animasjon med
stick_man
. -
Rørsla skal vere av typen
decelerate
, som tyder høg hastigheit i starten, og så saktare og saktare. -
Animasjonen skal vare i 0,4 sekund.
-
bottom
avstick_man
skal flyttast tilHEIGHT - box.height*1.5
, altså 1,5 gonger høgda til boksen. -
Animasjonen får namnet
jump_up
.
-
-
def back_down(): animate(stick_man, 'accelerate', duration=0.4, bottom=HEIGHT)
Forstår du kva koden skal animere?
-
jump_up.on_finished = back_down
Tips
Dette er ei skisse for korleis koden din skal sjå ut:
def on_key_up(key):
if ("key er mellomrom" and
"strekmannen er på bakken"):
# Animasjon oppover
# Når animasjon oppover er ferdig, animer ned
def back_down():
# Animasjon ned
Steg 6: Poeng
No skal me gi poeng etter kor mange boksar me klarar å hoppe over. Me treng to variablar, ein for poeng, og ein for å hugse om strekmannen blir treft av boksen.
Sjekkliste
-
def update(): global SCORE # reisten av koden din
-
screen.draw.text("Poeng: " + str(SCORE), (400, 30), color = (0, 0, 0))
Test spelet ditt
Test spelet ditt! Kor mange poeng klarar du å få?
Utfordringar
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!