Ga naar hoofdinhoud

9.11 Bouwsteen 5 — winner(bord)

Leerdoel: je checkt drie rijen, drie kolommen en twee diagonalen om te bepalen of iemand heeft gewonnen.

Wat doet deze functie?

winner(bord) geeft terug wie drie op een rij heeft. Acht mogelijke winnende lijnen in tic-tac-toe:

  • 3 rijen (horizontaal)
  • 3 kolommen (verticaal)
  • 2 diagonalen

Als geen enkele lijn vol is met dezelfde speler, return None.

Specificatie

  • Input: een bord.
  • Output: "X", "O" of None.
  • Voorbeelden:
    • X vol op rij 0 → "X".
    • O op de hoofd-diagonaal → "O".
    • Leeg bord → None.
    • Vol bord zonder drie-op-een-rij → None.

Hoe controleer je een lijn?

Een lijn is een rij van drie cellen. Hij is "gewonnen door X" als alle drie "X" zijn. Idem voor O.

Compacte check:

if rij[0] == rij[1] == rij[2] and rij[0] is not None:
return rij[0] # de winnaar

De and rij[0] is not None is belangrijk: drie keer None mag niet tellen als "winnaar".

Voorspel

Welke lijn is winnend op dit bord?

bord = [["X", "O", "X"],
["O", "X", "O"],
["O", "O", "X"]]
Antwoord

De anti-diagonaal (0,2) (1,1) (2,0) is X X O — niet winnend.

De hoofd-diagonaal (0,0) (1,1) (2,2) is X X X — X wint.

Kolommen, rijen: geen drie op een rij.

Dus winner(bord)"X".

Bouw zelf en test

Python
Code-omgeving wordt voorbereid…
Tip

Kolom-check:

for j in range(3):
if bord[0][j] == bord[1][j] == bord[2][j] and bord[0][j] is not None:
return bord[0][j]

Diagonalen — twee aparte if's:

if bord[0][0] == bord[1][1] == bord[2][2] and bord[0][0] is not None:
return bord[0][0]
if bord[0][2] == bord[1][1] == bord[2][0] and bord[0][2] is not None:
return bord[0][2]

Helemaal aan het eind blijft return None staan: geen winnaar gevonden.

Door naar stap 12: bouwsteen 6 — terminal →.