Game states

Toestandsdiagrammen worden ook gebruikt bij het ontwerpen van computerspellen. Dit dwingt je na te denken over de werking van je spel zonder dat je gelijk gaat programmeren. Zo maak je duidelijk wat er wel en niet kan in je spel. Laten we kijken naar een (versimpeld) voorbeeld van mogelijkheden in een spel.

  • Speler begint in een startscherm

  • Speler kan het spel gaan spelen of stoppen

  • Tijdens het spel kan er een aantal dingen gebeuren

    • Spel op pauze / spelen

    • Speler kan dood gaan

    • Speler kan spel eindigen

  • Er is een gameover scherm; speler kan hier ook kiezen opnieuw te spelen.

  • Bij stoppen sluit het spel af

Lijkt duidelijk toch? Maar mag de speler bijvoorbeeld van het startscherm direct naar het game over scherm? Dat zou raar zijn. Of kan het spel uit zichzelf op pauze gezet worden? Om dat overzichtelijk te maken kun je een toestandsdiagram gebruiken zoals hieronder:

Hoe kun je dit nu gebruiken bij het maken van je spel? Je kunt hiermee een structuur maken in je code zodat duidelijk is in welke state je zit en wat dan de mogelijkheden zijn. We kunnen het diagram bijvoorbeeld naar Python omzetten zoals hieronder.

STATES = {"START": 0, "SPEEL": 1, "PAUZE": 3, "GAME_OVER": 4, "STOP": 5}

state = STATES["START"]

while not state == STATES["STOP"]:
  if state == STATES["START"]:
    # Teken start scherm etc.
    if klik_start:
      state = STATES["SPEEL"]
    elif klik_stop:
      state = STATES["STOP"]
      
  elif  state == STATES["SPEEL"]:
    # Laat speler spel spelen
    if klik_pauze:
      state = STATES["PAUZE"]
    elif klik_stop:
      state = STATES["STOP"]
    elif speler_dood:
      state = STATES["GAME_OVER"]
      
  elif state == STATES["PAUZE"]:
    # Spel gepauzeerd
    if klik_speel:
      state = STATES["SPEEL"]
    
  elif state == STATES["PAUZE"]:
    # Spel gepauzeerd
    if klik_speel:
      state = STATES["SPEEL"]

  elif state == STATES["GAME_OVER"]:
    # Laat game over scherm zien
    if klik_start:
      state = STATES["START"]
    elif klik_stop:
      state = STATES["STOP"]

Vergelijk de code maar eens met het diagram. Je ziet:

  • Per toestand is er een apart blok (if-statement) met wat er gebeurt

  • In dat blok staat ten eerste wat er in de toestand gedaan moet worden

  • In ieder blok zie je naar welke andere state je kunt (overgangen)

  • In dit geval blijft het herhalen totdat je toestand STOP zit.

Last updated