Ga naar inhoud

Level 4.5: Pygame Zero Intro

Bekijk de volledige code
# =============================================================================
# ZOMBIE SMASH - Level 4.5
# =============================================================================
# Start met: pgzrun zombie.py
# Of met F5 in VSCode
#
# Dit is je eerste GRAFISCHE spel met Pygame Zero!
# Nieuw in dit level:
# - Pygame Zero basics (geen while loop nodig!)
# - Actor: een plaatje dat je kunt bewegen
# - draw(): wordt 60x per seconde aangeroepen om te tekenen
# - on_mouse_down(): wordt aangeroepen als je klikt
# - global: om variabelen buiten een functie te veranderen
# =============================================================================

import random

# =============================================================================
# PYGAME ZERO IMPORTS
# =============================================================================
# Pygame Zero heeft speciale objecten die we importeren:
# - Actor: een sprite (plaatje) dat je kunt bewegen en tekenen
# - sounds: om geluidseffecten af te spelen
# - Screen: het scherm waar we op tekenen
# =============================================================================

from pgzero.builtins import Actor, sounds
from pgzero.screen import Screen
screen: Screen  # Dit helpt VSCode met code-suggesties

# =============================================================================
# VENSTER INSTELLINGEN
# =============================================================================
# WIDTH en HEIGHT bepalen hoe groot het venster wordt (in pixels)
# TITLE is de tekst in de titelbalk van het venster
# Pygame Zero herkent deze variabelen automatisch!
# =============================================================================

WIDTH = 800
HEIGHT = 600
TITLE = "Zombie Smash"

# =============================================================================
# ACTOR (SPRITE)
# =============================================================================
# Een Actor is een plaatje dat je kunt bewegen en tekenen
# Actor("zombie") laadt het plaatje "zombie.png" uit de images/ map
# Je kunt de positie veranderen met zombie.x en zombie.y
# =============================================================================
zombie = Actor("zombie")
score = 0


def plaats_zombie():
    """Zet de zombie op een willekeurige plek op het scherm."""

    # We houden 50 pixels afstand van de randen
    zombie.x = random.randint(50, WIDTH - 50)
    zombie.y = random.randint(50, HEIGHT - 50)


# Zet zombie op willekeurige startpositie
plaats_zombie()


# =============================================================================
# DE DRAW FUNCTIE
# =============================================================================
# Pygame Zero roept draw() automatisch 60x per seconde aan
# Hier teken je alles wat je op het scherm wilt zien
#
# BELANGRIJK: draw() tekent het HELE scherm opnieuw elke keer
# Daarom beginnen we met screen.fill() om alles te wissen
# =============================================================================
def draw():
    """Teken het scherm"""

    # Vul het hele scherm met een kleur (wist het vorige frame)
    screen.fill("darkgreen")

    # Teken de zombie Actor
    zombie.draw()

    # Teken de score in de linkerbovenhoek
    # topleft=(10, 10) betekent 10 pixels van links en 10 van boven
    screen.draw.text(f"Score: {score}", topleft=(10, 10), fontsize=30, color="white")


# =============================================================================
# MUISKLIK EVENT
# =============================================================================
# on_mouse_down() wordt aangeroepen als de speler klikt
# De parameter "pos" is een tuple (x, y) met de muispositie
#
# .collidepoint(pos) checkt of de klik BINNEN de Actor valt
# =============================================================================
def on_mouse_down(pos):
    """Wordt aangeroepen als je klikt."""

    # =================================================================
    # GLOBAL
    # =================================================================
    # Normaal kan een functie variabelen van buiten alleen LEZEN
    # Met "global score" zeggen we: ik wil score ook kunnen VERANDEREN
    # Zonder global zou Python denken dat je een nieuwe lokale variabele maakt
    # =================================================================
    global score

    # Check of de klik op de zombie was
    if zombie.collidepoint(pos):
        # Speel een geluid af (whack.wav uit de sounds/ map)
        sounds.whack.play()

        # Verhoog de score
        score += 1

        # Zet zombie op nieuwe plek
        plaats_zombie()

Dit level is een aparte minigame

Dit is een apart mini-spelletje om Pygame Zero te leren kennen. Als je al bekend bent met grafische games, kun je direct door naar Level 5 om het echte Zombie spel te bouwen!

Wat leer je?

In dit level leer je over Pygame Zero - een library om grafische spelletjes te maken. Je leert hoe je een plaatje op het scherm zet en hoe je muisklikken afhandelt.

Opstarten

cd levels/level-4.5
pgzrun zombie.py

Of open zombie.py in VS Code en druk op F5.

De code

Het scherm instellen

WIDTH = 800
HEIGHT = 600
TITLE = "Zombie Smash"

Dit bepaalt de grootte en titel van je spelvenster.

Een Actor maken

zombie = Actor("zombie")
  • Een Actor is een plaatje dat je kan tekenen en verplaatsen
  • "zombie" verwijst naar images/zombie.png
  • De Actor heeft een x en y positie

De draw() functie

def draw():
    screen.fill("darkgreen")
    zombie.draw()
    screen.draw.text(f"Score: {score}", topleft=(10, 10), fontsize=30)
  • draw() wordt elke frame aangeroepen (60x per seconde!)
  • screen.fill() vult het scherm met een kleur
  • zombie.draw() tekent de zombie op zijn huidige positie
  • screen.draw.text() tekent tekst op het scherm

Klikken detecteren

def on_mouse_down(pos):
    global score
    if zombie.collidepoint(pos):
        sounds.whack.play()
        score += 1
        plaats_zombie()
  • on_mouse_down(pos) wordt aangeroepen als je klikt
  • pos is de (x, y) positie van je muisklik
  • zombie.collidepoint(pos) checkt of je op de zombie klikte
  • global score is nodig om de score variabele aan te passen

Geluiden afspelen

sounds.whack.play()
  • Geluidsbestanden staan in de sounds/ map
  • sounds.whack verwijst naar sounds/whack.wav
  • .play() speelt het geluid af

Nieuwe concepten

Concept Wat het doet
Actor("naam") Maak een sprite van images/naam.png
actor.draw() Teken de actor op het scherm
actor.x, actor.y Positie van de actor
actor.collidepoint(pos) Check of een punt de actor raakt
draw() Wordt elke frame aangeroepen om te tekenen
on_mouse_down(pos) Wordt aangeroepen bij muisklik
sounds.naam.play() Speel sounds/naam.wav af

BEKIJK

  1. Run pgzrun zombie.py
  2. Klik op de zombie
  3. Let op hoe de score omhoog gaat

PROBEER

Verander de achtergrondkleur van "darkgreen" naar een andere kleur zoals "purple" of "black".