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

Крестики Нолики на Python: 3 Глупый Бот

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

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

1 Игровое поле
2 Рисуем крестики и нолики

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

Для хранения состояния текущей игры присвоим переменной «condition» значение списка из 9 значение «None». Элементы списка будут соответствовать ячейкам игрового поля.

Индексы списка и ячеек игрового поля
Индексы списка и ячеек игрового поля

Значение «None» будет обозначать, что ячейка свободна

Значение «x» будет обозначать, что на поле стоит крестик

Значение «о» будет обозначать, что на поле стоит нолик

создали список с 9*None
создали список с 9*None

Добавим функционал в нашу функцию «click» которая обрабатывает клики по игровому полю и вызывает функцию «add_x». Для получения информации о состоянии ячейки из нашего списка «condition», нам по координатам ячейки надо вычислить индекс элемента списка, соответствующего нашей ячейки.

index = колонка нашей ячейки + (ряд нашей ячейки * 3)

index = colum + row*3

Добавим проверку если элемент списка «None», то элементу присваиваем значение «х» и вызываем функцию «add_x». Для проверки работоспособности добавим вывод нашего списка. Теперь наша функция выглядит так.

Функция обработки кликов по игровому полю
Функция обработки кликов по игровому полю

Запускаем и проверяем. Кликаем по ячейки.

В месте клика на игровом поле появляются крестики, а также в списке значения «None» заменяются на «х».

Займемся нашим «Глупым Ботом»

Бот будет работать по принципу из пустых ячеек выбирать одну случайную и ставить там нолик.

Импортируем библиотеку «random»

Создадим функцию «bot_move». В ней создадим пустой список «empty_indexes» в который будем добавлять индексы элементов списка «condition» со значением «None». Пробежимся циклом for по нашему списку «condition» используя функцию «enumerate», которая кроме самого элемента будет нам возвращать его индекс. В цикле будем проверять, если элемент «None» то его индекс будем добавлять в список «empty_indexes». С помощью метода «random.choice» случайным образом выберем один элемент из списка «empty_indexes» и присвоим его в переменную «index». В список «condition» по этому индексу запишем значение «о» и вызовем функцию «add_x» передав в нее координаты ячейки.

colum= остаток от деления индекса элемента на 3

Row = целочисленное деление индекса элемента на 3

Так выглядит наша функция.

Функция ходов компьютера
Функция ходов компьютера

Добавим в функцию «click» вызов функции «bot_move», что бы бот ходил автоматически после нашего хода.

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

Запускаем и проверяем.

Когда заканчиваются пустые ячейки выходит ошибка, в метод «random.choice» передан пустой список. Исправим эту ошибку, в функцию «bot_move» после формирования списка индексов добавим проверку, если список не пустой, то выполним все действия. Так выглядит наша функция.

Ошибок больше не возникает, но у нас игра не заканчивается. В следующей статье напишем функцию проверки на выигрыш.

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

#python #tkinter #Игры на python #программирование на python #крестики нолики на python

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

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

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

4 Проверка на выигрыш
5 Старт, Стоп и Результаты игры
6 Мозги для Бота
7 Из PY в EXE
Наука
7 млн интересуются