PGZ - Løpende strekmann
Skrevet av: Ole Andreas Ramsdal, Kodeklubben Trondheim
Introduksjon
I denne oppgaven skal du lage et spill der du styrer en strekmann som hopper over hindringer.

Steg 0: Installere Pygame Zero
For å gjøre denne oppgaven må du installere Pygame Zero. Start med å sjekke at du har installert Python 3, altså at Python-versjonen din er nummerert på formen 3.X.X.
Åpne kommandolinjen (engelsk: command prompt) på datamaskinen din. Bruker du Windows kan du åpne start-menyen og skrive cmd (eventuelt Ledetekst, som er det norske navnet på programmet som skal kjøre). På Mac og Linux åpner du terminalvinduet. Skriv inn følgende:
Windows og Mac:
pip install pgzero
Linux:
sudo pip install pgzero
Noen Linux-systemer kaller den pip3
, i så fall må du skrive det i stedet for pip
i koden over. Hvis pip ikke er installert kan du prøve å skrive
sudo python3 -m ensurepip
før du prøver sudo pip install pgzero
igjen.
Steg 1: Ny fil
Begynn med å lage en fil som kan kjøres med Pygame Zero.
Sjekkliste
-
WIDTH = 550 HEIGHT = 250
Steg 2: Hindringer
Du skal nå lage boksene som strekmannen løper mot. Dette skal gjøres ved hjelp av en klasse.
Sjekkliste
-
class Box: # Skriv egenskaper her def draw(self): # Skriv koden som tegner boksen her
Tips:
Bruk kommandoen
screen.draw.filled_rect()
for å tegne rektangler. En rød boks som er 50 piksler bred og høy tegnes i venstre topp med:screen.draw.filled_rect( Rect(0, 0, 50, 50) , (255, 0, 0) )
En blå boks i høyre bunn 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 nå lage en strekmann som vi skal kalle stick_man
.
Sjekkliste
-
stick_man = Actor('running_man')
-
stick_man.bottomleft = 50, HEIGHT
-
For at koden skal kjøre må du lagre bildet av strekmannen under som
running_man.png
i mappenimages
der du har lagretrun_stickman.py
.
Steg 4: Funksjonene draw() og update()
De fleste spill i [Pygame Zero] har funksjonene [draw()
(les mer)] og [update()
(les mer)]. Draw-funksjonen sørger for at spillvinduet blir tegnet og update-funksjonen gjør endringer i spillet før de tegnes med draw()
.
[Pygame Zero]: https://pygame-zero.readthedocs.org/ [draw()
(les mer)]: https://pygame-zero.readthedocs.org/en/latest/hooks.html?highlight=draw#draw [update()
(les mer)]: 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.
-
Hvis boksen er ute av bildet på venstre side, flytt den til høyre side av vinduet.
-
Hvis strekmannen er truffet, skriv "Du ble truffet!" til terminalen.
def update(): # Flytt boksen mot venstre if "boksen er ute av bildet": # Flytt boksen til høyre side av bildet if "strekmannen er truffet": print("Du ble truffet!")
-
Tips
Flytt boksen
For å få boksen til å flytte seg kan du endre x-posisjonen til boksen.
Sjekk om strekmannen blir truffet
Legg merke til at y-aksen til spillvinduet er positiv nedover, motsatt av det som er vanlig i matematikk. Boksens x- og y-posisjon er hvor boksens øverste venstre hjørne er plassert, som er merket i bildet som (x, y).

Den røde firkanten illustrerer hvor stort bildet til strekmannen er. I tilfellet merket 1 ser du at boksens øverste venstre hjørne er inni bildet til strekmannen. Dette må du sjekke i if-setningen.
I tilfelle 2 er boksens øvre høyre hjørne inne den røde firkanten, dette må du også sjekke i if-setningen.
Hvordan finne posisjonen til strekmannen?
-
stick_man.bottom
gir posisjonen til bunnen avstick_man
. -
stick_man.left
gir posisjonen til venstre side avstick_man
.
Steg 5: Animasjoner
Du skal nå gjøre det mulig for strekmannen å hoppe med "space" tasten.
Sjekkliste
-
def on_key_down(key): #(Din kode)
on_key_down()
(les mer) kjøres hver gang spilleren trykker på en tast. Hvilken tast som trykkes sendes til funksjonen somkey
. -
jump_up = animate(stick_man, 'decelerate', duration=0.4, bottom=(HEIGHT - box.height*1.5))
Koden forteller at:
-
Vi skal lage en animasjon med
stick_man
. -
Bevegelsen skal være av type
decelerate
, som er høy hastighet i begynnelsen, deretter saktere og saktere. -
Animasjonen skal vare i 0.4 sekunder.
-
bottom
avstick_man
skal flyttes tilHEIGHT - box.height*1.5
, altså 1,5 gang av høyden til boksen. -
Animasjonen gis navnet
jump_up
.
-
-
def back_down(): animate(stick_man, 'accelerate', duration=0.4, bottom=HEIGHT)
Forstår du hva koden skal animere?
-
jump_up.on_finished = back_down
Tips
Dette er en skisse på hvordan koden din skal se ut:
def on_key_up(key):
if ("key er space" and
"strekmannen er på bakken"):
# Animasjon oppover
# Når animasjon oppover er ferdig, animer ned
def back_down():
# Animasjon ned
Steg 6: Poeng
Vi skal nå gi poeng ettersom hvor mange bokser vi klarer å hoppe over. Vi trenger to variabler, en for poeng og en for å huske om strekmannen har blitt truffet av boksen.
Sjekkliste
-
def update(): global SCORE # resten av din kode
-
screen.draw.text("Poeng: " + str(SCORE), (400, 30), color = (0, 0, 0))
Test spillet ditt
Utfordringer:
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!