Глава 17 · Проект: «Крестики-нолики»

Проверяем после каждого хода, победил ли игрок

Восемь возможных выигрышных линий — три строки, три столбца, две диагонали.

После каждого хода нужно проверить: не выстроились ли три одинаковых символа подряд. Всего в игре восемь возможных «выигрышных линий» — три строки, три столбца и две диагонали:

proverka_pobedy.py
def proverit_pobedu():
    linii_pobedy = [
        (0, 1, 2), (3, 4, 5), (6, 7, 8),  # строки
        (0, 3, 6), (1, 4, 7), (2, 5, 8),  # столбцы
        (0, 4, 8), (2, 4, 6),             # диагонали
    ]
    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' или 'O' — есть победитель
    return None   # победителя пока нет
Список кортежей — компактный способ описать 8 линий
Каждая линия — кортеж (глава 11) из трёх индексов поля. Список из восьми таких кортежей заменяет восемь отдельных проверок if, которые пришлось бы писать вручную.
Верхняя строка занята X, статус говорит Победил игрок X!
Реальное окно полного файла прототипа: X собрал верхнюю строку — proverit_pobedu() нашла победителя.

Ничья

Если все девять клеток заполнены, а победителя нет — это ничья:

proverka_nichyej.py
def pole_zapolneno():
    return all(knopka["text"] != "" for knopka in polya)
Поле полностью заполнено X и O без выигрышной линии, статус говорит Ничья!
Реальное окно полного файла прототипа: все девять клеток заняты, но выигрышной линии нет.
Практика: проверка победы и ничьей
Интерактивный ноутбук прямо в браузере — Python 3.14 через Pyodide, без установки
Открыть практику →