Als developer, wil ik elke vijand als één eigen object bijhouden in plaats van in losse, parallelle lijsten, zodat de x, y en snelheid van één vijand nooit meer uit elkaar kunnen lopen doordat ik een van de lijsten vergeet bij te werken.
De oplossing voor parallelle lijsten: maak van elk ding één object dat alles over zichzelf
draagt. Naast de vaste data krijgt het status-attributen die starten op
False en None — en later veranderen.
Neem als voorbeeld een sensormeting die je wilt loggen. De meting heeft vaste gegevens (wat is gemeten, welke waarde) en status die pas later verandert (is hij al gelogd, en wanneer):
class Measurement:
def __init__(self, kind, value):
self.kind = kind # fixed data from parameters
self.value = value
self.logged = False # status: starts on False
self.timestamp = None # status: no time known yet
Niet elk attribuut komt uit een parameter. logged en timestamp krijgen
een vaste startwaarde die je bewust op False en None zet — het universele
"nog niet gebeurd" en "nog niets".
m = Measurement("height", 120)
print(m.logged) # False
print(m.timestamp) # None
# later, nadat de meting is verwerkt:
m.logged = True
m.timestamp = "12:03"
Hieronder staat één Measurement-object. Klik op log de meting en zie hoe de
status-attributen in het object veranderen — de vaste data blijft gelijk.
De class Measurement uit de theorie is gedefinieerd (met self.logged = False en
self.timestamp = None). Maak een meting en verander de status.
m = Measurement("height", 120)m.logged — start op ?m.timestamp — start op ?m.logged = Truem.logged — en nu?Vervang de parallelle lijsten uit taak 1 door één Enemy-blauwdruk. Bedenk zelf
de juiste attributen — je hebt het patroon gezien bij Measurement.
Enemy-class met een constructor die x, y en
speed verplicht maakt.width, height, color)
en een status-attribuut alive dat start op True.alive handmatig op False en print opnieuw.Acceptatiecriteria
Enemy heeft een constructor met verplichte x, y en speed.alive dat start op True.