Глава 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, которые пришлось бы писать вручную.Ничья
Если все девять клеток заполнены, а победителя нет — это ничья:
proverka_nichyej.py
def polye_zapolneno():
return all(knopka["text"] != "" for knopka in polya)
Практика в Jupyter Notebook
17-05-pobeda.ipynb · проверка победы и ничьей