Глава 17 · Интерфейс игры

Подсветка выигрышной линии

Модель уже знает, какие три клетки победили — render() их просто красит.

Данные о линии ведут к подсветке

find_winner(board)
('X', (0, 4, 8))
state.winning_line = (0, 4, 8)
render()
buttons[0], [4], [8] — зелёный фон
Модель определяет, КАКИЕ клетки победили — render() их просто красит.
podsvetka_linii.py
for index, btn in enumerate(self.buttons):
    is_win_cell = state.winning_line is not None and index in state.winning_line
    btn.config(bg=WIN_BG if is_win_cell else NEUTRAL_BG)
Подсвечиваем ИМЕННО линию — не любые совпавшие символы
Если на поле есть, скажем, четыре «X», но победили только три из них по диагонали — подсвечивается СТРОГО winning_line, а не каждая клетка с меткой «X». Проверка index in state.winning_line гарантирует это.
Диагональ 0-4-8 подсвечена зелёным, статус говорит Победил игрок X
Реальное окно полной версии игры: победная диагональ подсвечена, буквы остаются видимыми. Фрагмент выше — это только код самой подсветки, а не весь путь до победы.
Практика: подсветка выигрышной линии
Модуль tkinter открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально
Открыть практику →