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.
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.
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.
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.
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.
De drie parallelle lijsten staan klaar: enemy_x, enemy_speed en
alive (elk met vier elementen). Voel hoe breekbaar de afspraak is.
enemy_x[2] — welke x hoort bij vijand 2?alive[2] — leeft die nog?enemy_x.insert(2, 999) — voeg een vijand in, alléén hier.enemy_x[2] en alive[2] — gaan ze nog over dezelfde vijand?len(enemy_x) en len(alive) — nog even lang?Bouw opzettelijk een vijandengolf met parallelle lijsten en breek het, zodat je de pijn zelf voelt.
enemy_x,
enemy_speed en alive.insert() om een extra vijand alleen in de
enemy_x-lijst in te voegen.Acceptatiecriteria