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.
Górny łańcuch znaków jest zajęty X, status mówi: Gracz wygrał X!
Okno plików prawdziwego prototypu: X zebrał najwyższą linię – proverit_pobedu() znalazł zwycięzcę.

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)
Pole całkowicie wypełnione X i O bez zwycięskiej linii, status pokazuje Remis!
Rzeczywiste okno pełnego pliku prototypu: wszystkie dziewięć pól zajęte, ale nie ma zwycięskiej linii.
Praktyka: Sprawdzanie zwycięstwa i remisu
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →