Продолжаю серию статей по написанию игры «Крестики Нолики» на Python.
Предыдущие части:
1 Игровое поле
2 Рисуем крестики и нолики
Ранее мы создали игровое поле, создали функции отрисовки Крестика и Нолика и функцию обработки кликов по игровому полю. В этой статье займемся логикой игры, создадим «Глупого Бота», который будет ставить нолики в пустые ячейки.
Для хранения состояния текущей игры присвоим переменной «condition» значение списка из 9 значение «None». Элементы списка будут соответствовать ячейкам игрового поля.
Значение «None» будет обозначать, что ячейка свободна
Значение «x» будет обозначать, что на поле стоит крестик
Значение «о» будет обозначать, что на поле стоит нолик
Добавим функционал в нашу функцию «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