Продолжаю серию статей по написанию игры «Крестики Нолики» на Python.
Предыдущие части:
1 Игровое поле.
2 Рисуем крестики и нолики
3 Глупый Бот.
4 Проверка на выигрыш.
5 Старт, Стоп и Результаты игры.
Наша игра уже почти готова. Мы создали игровое поле, создали функции отрисовки Крестика и Нолика и функцию обработки кликов по игровому полю, создали «Глупого Бота», который ставит нолики в пустые ячейки. Сделали проверку выигрыша и функцию зачеркивания выигрышной комбинации. Корректное завершение игры с выводом статистики.
Осталось еще добавить «мозгов» для нашего бота, что бы было интересней с ним играть.
Логика будет следующая:
Если можно закончить игру «Победой» (два нолика стоят на одной из линий выигрышных комбинаций и третья ячейка имеет значение «None», то ставим нолик в этой ячейке. Иначе переходим к следующему шагу.
Если можно помешать выиграть человеку (два крестика стоят на одной из линий выигрышных комбинаций и третья ячейка имеет значение «None», то ставим нолик в этой ячейке. Иначе переходим к следующему шагу.
Если на одной из линий выигрышных комбинаций стоит один нолик, а две другие ячейки имеют значение «None», ставим нолик в одну из ячеек. Иначе переходим к следующему шагу.
Проверяем если центр пустой, то ставим туда нолик. Иначе переходим к следующему шагу.
Проверяем углы, если есть пустой, то ставим нолик в один из углов.
И последние условие, если все вышенаписанные условия не сработают, то поставить нолик в случайную ячейку со значением «None».
Приступим к реализации.
Все изменения будут только в функции «bot_move». Уже имеющийся код оставим, но сместим его внутрь условного оператора «if» так как это будет наше последнее условие. В функции создадим переменную «index» и присвоим ей «None», перед каждым условием будем проверять, если «index» «None», то будем проверять условие, если условие выполнится, то в переменную «index» будет присвоено определенное значение. И все остальные условия будут пропущены.
В цикле «for» будем перебирать комбинации, и сравнивать их с нашим условием. Если в линии два нолика и значение «None», то присваиваем значение в переменную «index» индекс элемента «None». И завершаем цикл.
Код второго условия такое же, как и первого, только заменяем «о» на «х». С этими условиями играть с ботом становиться интереснее.
Код третьего условия такой же, как и первого, только в проверке ставим «о» == 1, а «None» ==2.
Код четвертого условия.
Пятое условие в цикле «for» используя функцию «range» пройдемся по углам и проверим если значение «None» то присваиваем переменной «index» значение угла. И прервем цикл оператором «brake»
Последнее условие у нас уже есть. Мозги для нашего бота готовы. Полностью наша функция выглядит так.
С такими мозгами наш бот стал играть лучше, но все же есть в его поведении однообразность при определенных ходах, бот делает одинаковые ходы и проигрывает. Внесем небольшие изменения в код пятого условия. Сделаем так, что бы выбирался не первый попавшийся пустой угол, а из всех пустых рандомно один из них. Вот так теперь выглядит наше условие.
А вот так выглядит полностью наша функция.
Игру мы закончили, она полностью работоспособная. Бот уже неплохо играет. Вот только запускать ее можно на компьютере, где установлен «Python», а без него она не запуститься. В следующей статье скомпилируем в «exe» файл.
Код в текстовом файле можно скачать ТУТ
#python #программирование #tkinter #игра на python #Крестики нолики на Python
А на сегодня все.
Спасибо за внимание. Если Вам понравился материал, поддержите канал, поставьте "Лайк", оставьте комментарий и подпишитесь на мой канал.
Продолжение следует:
7 Из PY в EXE