Sprint 6 · De blauwdruk  ·  US4: De Game — alles in één object

Als developer, wil ik de speler, alle vijanden en de score in één Game-object bewaren dat ik in één keer aan de engine meegeef, zodat mijn spel niet meer op losse globals draait en de hele spelstaat overal makkelijk is door te geven.

Taak 1: Losse globals zweven rond je script

Er is maar één spel — waarom dan een class? Kijk eerst naar wat je nu hebt: player_x, score, enemies en running als losse globale variabelen die overal doorheen zwerven. Precies het scope-probleem uit sprint 5.

Vier globals die bij één ding horen

Stel je bouwt een script dat een server monitort. Je krijgt een handvol variabelen die allemaal over diezelfde server gaan, maar los van elkaar bestaan:

connection = Connection()
cpu_usage = 0
is_online = False
memory_usage = 0

# ... tientallen regels verder, in een functie ...
def check_status():
    global is_online          # anders werkt het niet — scope-gedoe
    connection.ping()
    is_online = True

Deze vier horen bij elkaar — het zijn eigenschappen van dezelfde server — maar niets in de code zegt dat. Ze zwerven als losse globals rond. Wil een functie er één aanpassen, dan heb je global nodig en loop je precies tegen het scope-probleem van sprint 5 aan.

"Maar er is toch maar één server?"
Klopt. Toch is dat niet het punt van een class. Een class is niet "om er veel van te maken" — hij bundelt data en gedrag die bij elkaar horen. Eén ServerMonitor-object vervangt die vier zwevende globals door één samenhangend geheel.

Zie het verschil

Klik tussen de twee weergaven. Links zweven de globals los rond je script; rechts zitten dezelfde gegevens gebundeld in één object.

ServerMonitor-object
connection
cpu_usage
is_online
memory_usage
>>> Oefenomgeving: Python REPL Simulator

Er staan losse globale variabelen klaar: player_x = 220, score = 0 en running = True. Voel hoe los ze zijn — er is niets dat ze samenbindt.

  1. player_x en score — twee losse variabelen.
  2. game — probeer "het hele spel" op te vragen. Wat gebeurt er?
  3. score = 10 — pas een global aan.
  4. player_x = 120
  5. Bedenk: hoe zou je in één keer "alles van het spel" willen zien?
Python 3.11 REPL Simulator · losse globals: player_x=220, score=0, running=True.
>>> 
🧩

Jouw opdracht: spot de zwevende globals

Schrijf een klein game-script met losse globals. Je gaat de losse globals in kaart brengen — de voorbereiding op het bundelen tot een object.

  1. Schrijf een script met minstens vier losse globale variabelen die allemaal over hetzelfde spel gaan (bijvoorbeeld player_x, score, enemies en running).
  2. Schrijf een functie add_score die score aanpast, en gebruik daarbij global.
  3. Zet in commentaar bij elke global welk "ding" van het spel hij beschrijft.
  4. Beschrijf in commentaar welk probleem uit sprint 5 (scope / global) je hier terugziet, en welke vier gegevens bij elkaar in één object zouden horen.

Acceptatiecriteria

  • Er zijn minstens vier losse globals die hetzelfde spel beschrijven.
  • Een functie past een global aan met het sleutelwoord global.
  • In commentaar benoem je het scope-probleem uit sprint 5.
  • Je somt op welke gegevens straks samen in één object horen.