Sprint 6 · De blauwdruk  ·  US3: Van dict naar object — de Enemy

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.

Taak 2: Eén object draagt zijn eigen status

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.

Vaste data plus status in één object

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"
Nu kan niets meer uit de pas lopen.
De waarde, of hij gelogd is, en het tijdstip zitten allemaal in hetzelfde object. Verplaats of verwijder je een meting, dan gaat alles mee. Geen tweede en derde parallelle lijst meer.

Zie de status veranderen

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.

m = Measurement("height", 120)
>>> Oefenomgeving: Python REPL Simulator

De class Measurement uit de theorie is gedefinieerd (met self.logged = False en self.timestamp = None). Maak een meting en verander de status.

  1. m = Measurement("height", 120)
  2. m.logged — start op ?
  3. m.timestamp — start op ?
  4. m.logged = True
  5. m.logged — en nu?
Python 3.11 REPL Simulator · class Measurement is gedefinieerd.
>>> 
🧩

Jouw opdracht: bouw de Enemy-class

Vervang de parallelle lijsten uit taak 1 door één Enemy-blauwdruk. Bedenk zelf de juiste attributen — je hebt het patroon gezien bij Measurement.

  1. Schrijf een Enemy-class met een constructor die x, y en speed verplicht maakt.
  2. Geef elke vijand vaste attributen (width, height, color) en een status-attribuut alive dat start op True.
  3. Maak één vijand aan en print alle attributen.
  4. Zet daarna alive handmatig op False en print opnieuw.

Acceptatiecriteria

  • Enemy heeft een constructor met verplichte x, y en speed.
  • Er is een status-attribuut alive dat start op True.
  • Je print de attributen vóór en ná het aanpassen van de status.
  • Je kunt uitleggen waarom de parallelle-lijsten-bug uit taak 1 nu onmogelijk is.