Rozdział 17 · Projekt: „Kółko-krzyżyk”
Sprawdzaj po każdym ruchu, czy gracz wygrał
Osiem możliwych zwycięskich linii — trzy wiersze, trzy kolumny, dwie przekątne.
Po każdym ruchu musisz sprawdzić, czy w rzędzie są trzy identyczne symbole. W grze dostępnych jest łącznie osiem możliwych „linii wypłat”
proverka_pobedy.py
def proverit_pobedu():
linii_pobedy = [
(0, 1, 2), (3, 4, 5), (6, 7, 8), # Linie
(0, 3, 6), (1, 4, 7), (2, 5, 8), # kolumny
(0, 4, 8), (2, 4, 6), # przekątne
]
for a, b, c in linii_pobedy:
znacheniya = (polya[a]["text"], polya[b]["text"], polya[c]["text"])
if znacheniya[0] != "" and znacheniya[0] == znacheniya[1] == znacheniya[2]:
return znacheniya[0] # 'X' lub 'O' – jest zwycięzca
return None # jeszcze nie ma zwycięzcy
Lista krotek – Zwięzły sposób opisu 8 linii
Każda linia to krotka (rozdział 11) trzech indeksów pól. Lista ośmiu takich krotk zastępuje osiem oddzielnych kontrol
ifto musiało być napisane ręcznie.
Remis
Jeśli wszystkie dziewięć pól zostanie zapełnione i nie ma zwycięzcy, jest remis:
proverka_nichyej.py
def pole_zapolneno():
return all(knopka["text"] != "" for knopka in polya)
Praktyka: Sprawdzanie zwycięstwa i remisu
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji