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 1: Parallelle lijsten lopen uit de pas

In je arcade-game valt er een golf vijanden van boven naar beneden. Voor elke vijand wil je de x, de y en de snelheid bijhouden. Met aparte, parallelle lijsten kun je dat doen — tot je er één in het midden invoegt en alles verschuift. Dan hoort de snelheid ineens bij de verkeerde vijand.

Drie lijsten die bij elkaar horen — op afspraak

Een golf vijanden bestaat uit posities en snelheden. Daarnaast wil je per vijand bijhouden of hij nog leeft. De voor de hand liggende oplossing: één lijst per eigenschap, uitgelijnd op dezelfde index.

enemy_x     = [40, 180, 300, 420]
enemy_speed = [3, 5, 2, 4]
alive = [True, True, True, True]

# Vijand 0 is neergeschoten
alive[0] = False

Dit werkt zolang de drie lijsten exact even lang blijven en op elke index naar hetzelfde verwijzen. Die relatie — index 2 hoort overal bij dezelfde vijand — staat nergens in de code. Het is gewoon een afspraak in je hoofd.

Voeg één vijand in het midden in en het breekt.
Als je op index 2 een extra vijand toevoegt in enemy_x maar vergeet dat ook te doen in alive, schuift alles na index 2 één plek op. Ineens hoort alive[3] bij de verkeerde vijand. Niets crasht — je golf gedraagt zich gewoon fout.

Zie de lijsten uit de pas lopen

Hieronder staan drie parallelle lijsten. Klik op Voeg vijand in het midden in — maar alleen in de bovenste lijst, zoals het per ongeluk in de praktijk gebeurt. Kijk hoe de kolommen niet meer op elkaar aansluiten.

enemy_x
enemy_speed
alive
De oplossing (volgende taken): maak van elke vijand één object dat zijn eigen x, y, snelheid en status draagt. Dan kan niets meer uit de pas lopen, want alles wat bij een vijand hoort zit erin.
>>> Oefenomgeving: Python REPL Simulator

De drie parallelle lijsten staan klaar: enemy_x, enemy_speed en alive (elk met vier elementen). Voel hoe breekbaar de afspraak is.

  1. enemy_x[2] — welke x hoort bij vijand 2?
  2. alive[2] — leeft die nog?
  3. enemy_x.insert(2, 999) — voeg een vijand in, alléén hier.
  4. enemy_x[2] en alive[2] — gaan ze nog over dezelfde vijand?
  5. len(enemy_x) en len(alive) — nog even lang?
Python 3.11 REPL Simulator · drie parallelle lijsten van lengte 4 staan klaar.
>>> 
🧩

Jouw opdracht: reproduceer de stille bug

Bouw opzettelijk een vijandengolf met parallelle lijsten en breek het, zodat je de pijn zelf voelt.

  1. Maak drie parallelle lijsten voor een golf van vier vijanden: enemy_x, enemy_speed en alive.
  2. Print per vijand een regel met x, snelheid en status door de lijsten per index af te lopen.
  3. Gebruik insert() om een extra vijand alleen in de enemy_x-lijst in te voegen.
  4. Print opnieuw en toon aan dat x en status niet meer op elkaar aansluiten.
  5. Beschrijf in een opmerking wat er fout ging en waarom er geen foutmelding verscheen.

Acceptatiecriteria

  • Er zijn drie parallelle lijsten die per index bij elkaar horen.
  • Je print de golf voor en na het invoegen van een extra vijand.
  • De tweede uitvoer toont dat de kolommen niet meer op elkaar aansluiten.
  • In een opmerking leg je uit waarom dit een stille bug is (geen crash, maar fout gedrag).