Ga naar hoofdinhoud

9.12 Bouwsteen 6 — terminal(bord)

Leerdoel: je bepaalt of een spel afgelopen is. Deze functie gebruikt jouw winner uit pagina 11 — precies het patroon van pagina 9.

Wat doet deze functie?

terminal(bord) returnt True als het spel klaar is, anders False.

Een spel is "klaar" in twee gevallen:

  1. Er is een winnaar (X of O heeft drie op een rij).
  2. Er is geen lege cel meer (het bord is vol, dus geen zet mogelijk).

Bij één van beide is het spel terminal. Geen winnaar en wel lege cellen → het spel gaat door.

Functies stapelen

Deze functie gebruikt winner(bord) uit pagina 11. We hergebruiken hem in plaats van de check opnieuw te schrijven:

def terminal(bord):
if winner(bord) is not None:
return True
# geen winnaar — check of er nog lege cellen zijn
...

Zie hoe terminal zelf weinig nieuw werk doet. Hij delegeert aan winner. Dat is precies waar pagina 9: functies in functies over ging.

Specificatie

  • Input: een bord.
  • Output: True of False.

Voorspel

Voor elk van deze borden — terminal of niet?

a = [[None]*3, [None]*3, [None]*3] # leeg
b = [["X","X","X"], ["O","O",None], [None]*3] # X wint
c = [["X","O","X"], ["O","X","O"], ["X","O","X"]] # vol, geen winnaar
d = [["X","O","X"], ["O",None,None], [None]*3] # spel loopt nog
Antwoord
  • a: niet terminal (leeg, geen winnaar).
  • b: terminal (X wint).
  • c: terminal (vol, remise).
  • d: niet terminal (lege cellen, geen winnaar).

Bouw zelf en test

Python
Code-omgeving wordt voorbereid…
Tip

Stap 1: if winner(bord) is not None: return True.

Stap 2: loop door alle cellen. Vind je een None, dan is er nog een zet mogelijk → return False.

Stap 3: lus klaar zonder None te vinden → bord vol → return True.

Python-trucje (optioneel, korter): if all(cel is not None for rij in bord for cel in rij): return True.

Door naar stap 13: bouwsteen 7 — utility →.