******** Pygame 1 ******** Introductie =========== Pygame is een open-source, cross-platform gratis bibliotheek voor het ontwikkelen van games met Python. - open-source: de bron-code is vrij beschikbaar, en moet vrij beschikbaar blijven - cross-platform: is niet gebonden aan 1 platform, maar werkt op o.a. Linux, macOS en Windows - gratis: je hoeft er niet voor te betalen :-) Installatie =========== Net zoals de andere Python modules die je tot nu toe reeds installeerde, kan je ook pygame met pip installeren. Installeer pygame met pip: `pip install pygame` Initialisatie ============= In het onderstaande voorbeeld wordt eerst de pygame module geïmporteerd met het `import` statement. Dit maakt de pygame functionaliteit beschikbaar voor je programma. Vervolgens wordt de bibliotheek geïnitialiseerd, dit wil zeggen dat pygame zich onder andere klaarmaakt om beeld en geluid aan te sturen. Met de functie `set_mode()` maak je een venster aan met de opgegeven afmetingen in pixels. Let op: De parameter van `set_mode` is een tuple van 2 getallen. .. _opgave1: .. literalinclude:: ex/opgave1.py :caption: voorbeeld 1 Kopieer bovenstaande code en voer uit. Opgave 2 -------- Pas de code uit :ref:`voorbeeld 1 ` aan, zodat je een venster van 800 op 600 pixels krijgt. Fill en flip ------------ De functie `fill()` vult het scherm met de opgegeven kleur. .. _opgave3: .. literalinclude:: ex/opgave3.py :caption: voorbeeld 2 :emphasize-lines: 5-6 Kopieer bovenstaande code en voer uit. De parameter `(250, 0, 0)` van de functie `fill()` geeft de kleur aan waarmee het scherm gevuld dient te worden. De kleur wordt opgegeven als een combinatie van rood, groen en blauw waarden (RGB). Opgave 4 -------- Pas de code uit opgave 3 aan, zodat het scherm groen wordt. Opgave 5 -------- In onderstaand voorbeeld wordt met de functie `load()` een tekening ingeladen uit het bestand `player.png`. De functie `blit()` toont deze tekening op het scherm op coördinaten (50, 50). .. literalinclude:: ex/opgave4.py Kopieer bovenstaande code en voer uit. Als je de code nu uitvoert, krijg je een foutmelding omdat het bestand `player.png` niet gevonden wordt. Download `player.png` en plaats het bestand in dezelfde map als waar je Python code staat. Voer de code nu uit. Wat gebeurt er? Opgave 6 -------- Pas de code uit opgave 5 aan, zodat de tekening in de linkerbovenhoek van het scherm getoond wordt, dit is coördinaat (0,0). Game-loop ========= In de vorige opgaven werd het programma helaas slechts een fractie van een seconde getoond, en meteen verdween het venster weer van het scherm. Dit heeft een logische verklaring: Je Python programma wordt regel na regel uitgevoerd, en het programma eindigt zodra alle regels zijn uitgevoerd. Om dit te voorkomen, wordt er een zogenaamde “game-loop” of algemener “event-loop” gebruikt. Dit is een while-loop zoals jullie die in een eerdere opgave leerden gebruiken. Opgave 7 -------- In onderstaande code worden de laatste twee regels code tot in het oneindige herhaald door de while-lus. .. literalinclude:: ex/opgave7.py Voer bovenstaande code uit. Wat gebeurt er? Wat loopt er mis? Opgave 8 -------- We kunnen de illusie wekken dat het figuurtje beweegt door de afbeelding telkens op een andere positie te tekenen. In onderstaand voorbeeld beweegt het figuurtje zich naar rechts. .. literalinclude:: ex/opgave8.py Pas bovenstaande code aan zodat het figuurtje zich naar rechtsonder begeeft. Event handling (gebeurtenissen verwerken) ========================================= In de voorgaande opgaven kon je de werking van het programma niet beïnvloeden. Nu passen we de code aan zodat we toetsenbordinvoer kunnen verwerken. Opgave 9 -------- .. literalinclude:: ex/opgave9.py Voer bovenstaande code uit. Wat gebeurt er? Pas de code aan zodat het figuurtje zich dubbel zo snel verplaatst. Opgave 10 --------- .. literalinclude:: ex/opgave10.py Wat denk je dat in bovenstaande code gebeurt? Voer bovenstaande code uit. Wat gebeurt er? Pas de code aan zodat het figuurtje zich bij het opstarten in het midden van het scherm bevindt. Opgave 11 --------- Tot nu toe was het niet mogelijk om het programma correct af te sluiten. We passen nu de code aan zodat we door “q” in te drukken, het programma kunnen beëindigen. .. literalinclude:: ex/opgave11.py Kopieer bovenstaande code en voer uit. Pas de code aan zodat je je speler met de pijltjestoetsen naar boven en onder kunt verplaatsen. If-elif-else ============ Eerder zagen we hoe we code conditioneel kunnen uitvoeren met behulp van “if” en “else”. .. literalinclude:: ex/opgave12.py Als we echter meerdere condities willen testen kunnen we “elif” gebruiken: .. literalinclude:: ex/opgave13.py We kunnen onze code dan ook als volgt aanpassen: .. literalinclude:: ex/opgave14.py