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:
- Er is een winnaar (X of O heeft drie op een rij).
- 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:
TrueofFalse.
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
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 →.