Komme i gang med Pygame Zero
N?r man jobber med objekter og klasser kan det v?re b?de fint og motiverende ? visualisere objektene. Dette er en kjapp introduksjon til hvordan Pygame Zero kan brukes til ? visualisere et Sau-objekt. Det kan v?re lurt ? f?lge instruksene her f?r man begynner p? obligen for denne uken.
Steg 1: Installer Pygame Zero
Hvis du har Python med pip (de fleste har det automatisk i Python 3), kan du installere Pygame Zero via terminalen slik:
python3 -m pip install pgzero
Et vanlig problem p? Mac-er er at man ogs? m? installere noen biblioteker f?rst:
brew install sdl sdl_image sdl_mixer sdl_ttf portmidi;
Dette krever igjen at man har Brew installert, men det er stort sett enkelt og kjapt ? installere (se her).
Mulig problem p? Windows
Hvis man sliter med at pgzrun ikke finnes (i pathen), kan man komme rundt dette ved ? importere pgzrun
og kj?re programmet med Python som vanlig:
- Importer pgzrun ?verst i filen:
import pgzrun
- Legg til
pgzrun.go()
nederst i filen - Kj?r programmet slik du ellers kj?rer Python (f. eks gjennom Pycharm)
Installere i Pycharm
Hvis man bruker Pycharm har man ofte et virtual environment per prosjekt, og m? installere pakken i prosjektet. Dette gj?res i Settings -> Project -> Python Iterpreter. Der finnes en liste over pakker og man kan klikke p? + for ? installere en ny pakke.
Steg 2: Sjekk at installasjonen fungerer
Pygame Zero har en kommando pgzrun
som vi skal kj?re i terminalen. Denne kommandoen kan kj?re et python-program, men gir det noen ekstra egenskaper som gj?r at vi blant annet kan vise et vindu p? skjermen.
Sjekk at du kan kj?re pgzrun
i terminalen, og at du f?r noe slikt tilbake:
pygame 1.9.6
Hello from the pygame community. https://www.pygame.org/contribute.html
Usage: pgzrun [options]
pgzrun: error: You must specify which module to run.
NB: Hvis du vanligvis kj?rer koden direkte i Pycharm eller annet program, s? vil programmet kj?res med python og ikke pgzrun-kommandoen. Hvis du ?nsker ? kj?re programmet med python-kommandoen, s? kan det gj?res ved ? legge til f?lgende nederst i filen:
import pgzrun
pgzrun.go()
Steg 3: Vi lager en klasse vi vil visualisere:
Sauen v?r har et bilde (en tekstreng) og en posisjon, som vi representerer som antall pixler fra venstre side og toppen av skjermen:
class Sau():
def __init__(self, bilde, posisjon_venstre, posisjon_topp):
self._bilde = bilde
self._posisjon_venstre = posisjon_venstre
self._posisjon_topp = posisjon_topp
self._fart_fra_venstre = 2
self._fart_fra_topp = 2
def beveg(self):
self._posisjon_venstre += self._fart_fra_venstre
self._posisjon_topp += self._fart_fra_topp
De to instansvariablene _fart_fra_venstre
og _fart_fra_topp
bruker vi for ? representere hvor mange pixler i de to retningene vi vil ha sauen skal bevege seg per tidsenhet. I stedet for km/t bruker vi her pixler/frameoppdatering, dvs pixler for hver gang skjermen oppdaterer bildet.
Metoden beveg
kommer til ? bli kalt hver gang bildet skal tegnes p? skjermen, og endrer da posisjonen i henhold til farten.
Det siste vi trenger er en metode som faktisk tegner sauen p? skjermen. Legg til f?lgende metode i klassen Sau:
def tegn(self, skjerm):
skjerm.blit(self._bilde, (self._posisjon_venstre, self._posisjon_topp))
Steg 4: Litt prekode for ? f? Pygame Zero til ? virke
Sau-klassen skal n? v?re komplett, og vi trenger bare litt kode for ? fortelle Pygame Zero hva som skal skje. Lag en fil (f. eks spill.py
) i samme mappe som sau.py med f?lgende innhold:
from sau import Sau
# Dette er prekode som gjoer at pygame-zero fungerer. Ikke endre dette:
WIDTH = 900
HEIGHT = 700
sau = Sau("sau", 100, 200)
# draw() er en metode Pygame Zero kaller hver gang den skal tegne noe p? skjermen (som den gj?r mange ganger i sekundet)
# Her sier vi at hver gang Pygame Zero skal tegne noe, s? vil vi at den skal kalle tegn-metoden til sauen v?r
def draw():
# Tegn f?rst et rektangel (bakgrunnen v?r)
screen.fill((128, 81, 9))
# Tegn deretter sauen
sau.tegn(screen)
# update() kalles ogs? mange ganger i sekundet. Her vil vi bevege sauen v?r
def update():
sau.beveg()
Steg 5: Kj?r programmet!
Last ned denne sauen og lagre som sau.png i en mappe images
som igjen m? ligge i samme mappe som python-filene dine.
Deretter skal det bare v?re ? skrive f?lgende i terminalen, og sauen b?r bevege seg over skjermen:
pgzrun spill.py
Lek deg gjerne med beveg-metoden til Sau for ? endre bevegelsen. Her kan man legge inn tilfeldige bevegelser f. eks.
Det g?r ogs? an ? lage flere sauer og endre draw
og update
til ? tegne og oppdatere alle.