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.
Nu zet je alles bij elkaar: de constructor van je Game bewaart de speler, de lijst
vijanden, de kogels en de score als attributen op self. Eén object dat de hele spelstaat
draagt — en dat je in één keer aan de engine geeft, zodat je hele spel draait.
Neem als voorbeeld een Session die een verbinding bewaart plus wat status. De
constructor zet regel voor regel de attributen op self:
class Session:
def __init__(self):
self.connection = Connection() # een ander object
self.active = False # status
self.duration = 0 # teller
self.name = "session-1" # vaste data
Na s = Session() is s één object dat alles bij zich draagt: het
verbindings-object én de losse status. Geen zwevende globals meer — alles zit in self.
Klik op Volgende regel en volg hoe de constructor stap voor stap de attributen op
self zet. Rechts vult het object zich.
De class Session uit de theorie is gedefinieerd (met self.active = False,
self.duration = 0 en self.name = "session-1"). Maak een sessie en bekijk
zijn toestand.
s = Session()s.active en s.duration — de startstatus.s.names.duration = 30 — pas de toestand aan.s.duration — en nu?Bouw de constructor van je eigen Game die de hele spelstaat bundelt, en geef hem aan
de engine zodat je spel echt draait. Gebruik je Player- en Enemy-classes
uit de vorige taken en zet game_engine.py ernaast.
Game met __init__(self, width, height).self.player (een Player-object),
self.enemies (een lijst met een paar Enemy-objecten),
self.bullets = [], self.score = 0 en self.width/self.height.if __name__ == "__main__":, maak een Game aan
en start het spel met run_world(game) uit game_engine.game.player is een echt Player-object, game.enemies bevat
meerdere vijanden, game.score is 0).Acceptatiecriteria
Game bewaart player, enemies, bullets,
score, width en height als attributen.self.player is een echt Player-object (object-in-object).if __name__ == "__main__":.run_world(game) toont speler + vallende vijanden + de score; er zijn geen losse
globals meer.