Rozdział 17 · Zasady gry
Wygrać, zremisować i terminal state
Wypełnione pole nie zawsze kończy się remisem. Kolejność szachów jest częścią zasad gry.
is_draw() jest czystą funkcją
is_draw.py
def is_draw(board):
winner, _ = find_winner(board)
return winner is None and all(board)
„Po pełnym nastroju”
Samo wypełnione pole nie gwarantuje remisu – jeśli ostatni ruch wygrywa linię w tym samym czasie, jest to WYGRANA, a nie remis. Kolejność czeku decyduje o wszystkim.
Ostatni ruch: Wygrana pokonuje remis
O
O
X
X
X
O
X
X
O
Obowiązkowe przewidywanie ćwiczenie
Przed przeczytaniem kodu – przewidywać: jeśli dziewiąty ruch wypełni OSTATNIĄ pustą komórkę I zbuduje linię, co pokaże program? "Draw" czy "Win X"? Poprawna odpowiedź to "Win", jeśli
find_winner() jest sprawdzane WCZEŚNIEJ is_draw(). Właśnie dlatego is_draw najpierw woła w sobie find_winner i dopiero potem patrzy na wypełnienie.Terminal state
WYGRANA i REMISA to prawdziwe ślepe zaułki: gdy tylko gra tam dochodzi, droga powrotna do „Gra trwa dalej”
Trzy terminale dają rzeczywiste okno
Praktyka: Wygrana kontra remisy – procedura weryfikacji
Automatyczna weryfikacja — w tym test „ostatni ruch wygrywa, a nie kończy się remisem”