Найти в Дзене
SamAlex

Крестики Нолики на Python: 4 Проверка на выигрыш

Продолжаю серию статей по написанию игры «Крестики Нолики» на Python. Предыдущие части: 1 Игровое поле. 2 Рисуем крестики и нолики. 3 Глупый Бот. Ранее мы создали игровое поле, создали функции отрисовки Крестика и Нолика и функцию обработки кликов по игровому полю, создали «Глупого Бота», который ставит нолики в пустые ячейки. В этой статье определим функцию на проверку выигрыша и функцию зачеркивания выигрышной комбинации. Создадим список «combinations» в него запишем все возможные комбинации индексов поля выигрышных ситуаций. Всего их 8. Три горизонтальных линии, три вертикальных и две диагонали. И создадим переменную «win» и присвоим значение «None». Определим функцию «winner» которая будет вызываться после каждого хода игрока или компьютера и проверять был ход выигрышным или нет. В функции определим переменную «win» как глобальную, создадим пустой список «variants» в которой будем добавлять списки комбинаций игрового поля для проверки на выигрыш. Пройдемся циклом «for» по нашему сп

Продолжаю серию статей по написанию игры «Крестики Нолики» на Python.

Предыдущие части:

1 Игровое поле.
2 Рисуем крестики и нолики.
3 Глупый Бот.

Ранее мы создали игровое поле, создали функции отрисовки Крестика и Нолика и функцию обработки кликов по игровому полю, создали «Глупого Бота», который ставит нолики в пустые ячейки. В этой статье определим функцию на проверку выигрыша и функцию зачеркивания выигрышной комбинации.

Создадим список «combinations» в него запишем все возможные комбинации индексов поля выигрышных ситуаций. Всего их 8. Три горизонтальных линии, три вертикальных и две диагонали. И создадим переменную «win» и присвоим значение «None».

Создаем список в который запишем все возможные комбинации
Создаем список в который запишем все возможные комбинации

Определим функцию «winner» которая будет вызываться после каждого хода игрока или компьютера и проверять был ход выигрышным или нет. В функции определим переменную «win» как глобальную, создадим пустой список «variants» в которой будем добавлять списки комбинаций игрового поля для проверки на выигрыш. Пройдемся циклом «for» по нашему списку «combinations» и добавим в список «variants» списки, состоящие из трех значений текущего состояния игровой ситуации. Далее условными операторами проверим:

Если наш список «variants» содержит список, состоящий из трех «х», то в переменную «win» присвоим значение «Ты ПОБЕДИЛ!»;

Если наш список «variants» содержит список, состоящий из трех «у», то в переменную «win» присвоим значение «Бот Выиграл»;

Если в нашем списке «condition» не осталось элементов со значением «None», то в переменную «win» присвоим значение «Ничья».

Функция "winner"
Функция "winner"

Определим функцию «creat_win_line» которая будет вызываться после завершении игры и зачеркивать победную комбинацию на игровом поле. Пройдемся циклом «for» по нашему списку «combinations» и в цикле будем создавать список «win_line» который будет содержать одну комбинацию состояния игры. В условии будем проверять этот временный список с помощью метода «count», если «х» встречается 3 раза или «у» встречается 3 раза. То определяем начальный и конечный индекс ячейки игрового поля, которые надо перечеркнуть. И с помощью метода «create_line» рисуем линию. Обновляем наш экран. Прерываем цикл с помощью оператора «break».

Функция "creat_win_line"
Функция "creat_win_line"

Добавляем вызов функции «creat_win_line» в функцию «winner», в случае выигрыша игрока или выигрыша компьютера.

Добавляем вызов функции "creat_win_line"
Добавляем вызов функции "creat_win_line"

Определим еще одну функцию «end_game» которая будет вызываться в конце игры. На данном этапе функция будет только выдавать в консоль «Игра окончена» и значение переменной «win», для этого будем использовать «f-строку». В следующих статьях вернемся к этой функции и добавим в нее еще функционал.

Функция "end_game"
Функция "end_game"

Теперь внесем изменения в функцию «click». После как мы поставили крестик, проверяем:

Если функция «winner» вернула, что-то кроме «None» то вызываем функцию «end_game»;

В противном случае игра продолжается, и вызываем функцию «bot_move»;

Запускаем проверку, если функция «winner» вернула, что-то кроме «None» то вызываем функцию «end_game»;

В противном случае ничего не делаем, и программа ждет хода игрока.

Функция "click"
Функция "click"

Запускаем, проверяем, все работает.

Код в текстовом файле можно скачать ТУТ

А на сегодня все.

Спасибо за внимание. Если Вам понравился материал, поддержите канал, поставьте "Лайк", оставьте комментарий и подпишитесь на мой канал.

Продолжение следует:

5 Старт, Стоп и Результаты игры
6 Мозги для Бота
7 Из PY в EXE

#python #игры на python #Крестики нолики на python #tkinter #функции в python