Найти тему
SamAlex

Крестики Нолики на Python: 6 Мозги для Бота

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

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

1 Игровое поле.
2 Рисуем крестики и нолики
3 Глупый Бот.
4 Проверка на выигрыш.
5 Старт, Стоп и Результаты игры.

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

Осталось еще добавить «мозгов» для нашего бота, что бы было интересней с ним играть.

Логика будет следующая:

Если можно закончить игру «Победой» (два нолика стоят на одной из линий выигрышных комбинаций и третья ячейка имеет значение «None», то ставим нолик в этой ячейке. Иначе переходим к следующему шагу.

Если можно помешать выиграть человеку (два крестика стоят на одной из линий выигрышных комбинаций и третья ячейка имеет значение «None», то ставим нолик в этой ячейке. Иначе переходим к следующему шагу.

Если на одной из линий выигрышных комбинаций стоит один нолик, а две другие ячейки имеют значение «None», ставим нолик в одну из ячеек. Иначе переходим к следующему шагу.

Проверяем если центр пустой, то ставим туда нолик. Иначе переходим к следующему шагу.

Проверяем углы, если есть пустой, то ставим нолик в один из углов.

И последние условие, если все вышенаписанные условия не сработают, то поставить нолик в случайную ячейку со значением «None».

Приступим к реализации.

Все изменения будут только в функции «bot_move». Уже имеющийся код оставим, но сместим его внутрь условного оператора «if» так как это будет наше последнее условие. В функции создадим переменную «index» и присвоим ей «None», перед каждым условием будем проверять, если «index» «None», то будем проверять условие, если условие выполнится, то в переменную «index» будет присвоено определенное значение. И все остальные условия будут пропущены.

Функция bot_move
Функция bot_move

В цикле «for» будем перебирать комбинации, и сравнивать их с нашим условием. Если в линии два нолика и значение «None», то присваиваем значение в переменную «index» индекс элемента «None». И завершаем цикл.

Проверяем первое условие
Проверяем первое условие

Код второго условия такое же, как и первого, только заменяем «о» на «х». С этими условиями играть с ботом становиться интереснее.

Проверяем второе условие
Проверяем второе условие

Код третьего условия такой же, как и первого, только в проверке ставим «о» == 1, а «None» ==2.

Проверяем третье условие
Проверяем третье условие

Код четвертого условия.

Проверяем четвертое условие
Проверяем четвертое условие

Пятое условие в цикле «for» используя функцию «range» пройдемся по углам и проверим если значение «None» то присваиваем переменной «index» значение угла. И прервем цикл оператором «brake»

Пятое условие
Пятое условие

Последнее условие у нас уже есть. Мозги для нашего бота готовы. Полностью наша функция выглядит так.

Функция bot_move
Функция bot_move

С такими мозгами наш бот стал играть лучше, но все же есть в его поведении однообразность при определенных ходах, бот делает одинаковые ходы и проигрывает. Внесем небольшие изменения в код пятого условия. Сделаем так, что бы выбирался не первый попавшийся пустой угол, а из всех пустых рандомно один из них. Вот так теперь выглядит наше условие.

Пятое условие после изменения
Пятое условие после изменения

А вот так выглядит полностью наша функция.

Игру мы закончили, она полностью работоспособная. Бот уже неплохо играет. Вот только запускать ее можно на компьютере, где установлен «Python», а без него она не запуститься. В следующей статье скомпилируем в «exe» файл.

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

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

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

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

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

7 Из PY в EXE
Наука
7 млн интересуются