TwiddleLab / Код / Строим на Python
Крестики-нолики с ботом
Что ты узнаешь
- Проектирование программы: сначала спланируй части (показать, ход, проверка), потом напиши каждую функцией.
- Игровой цикл повторяет: ход, проверка победителя, смена игрока, пока игра не кончится.
- free_cells обходит сетку; random.choice выбирает одну из свободных клеток, поэтому бот никогда не жульничает.
- Правила по порядку (выиграть, заблокировать, потом что угодно) делают бота намного сильнее. Если просмотреть все будущие ходы, он станет непобедимым.
Как идёт урок
Твоя финальная сборка: игра, в которую друг сыграет против твоего бота.
Сначала сыграй в готовую игру. Ты X.
Спланируй игровой цикл.
Расставь станции в том порядке, в каком их выполняет игра.
Какие клетки вернёт free_cells(board)?
Нажми на каждую клетку, которую, по-твоему, она перечислит. Клетки пронумерованы от 0 до 8 по рядам.
Запусти free_cells.
Два цикла обходят каждую клетку; пустые попадают в список как r * 3 + c.
Проектирование программы и игровой цикл.
Проектирование программы: реши, из каких частей она состоит, до того как писать код. Каждая часть становится функцией с понятным именем.
Игровой цикл работает, пока никто не победил и доска не полна: ход игрока, проверка, ход бота.
Маленькие функции можно проверять по одной: free_cells, winner, bot_move.
Классика: напиши bot_move.
Бот выбирает случайную свободную клетку и ставит туда O. Клетка m это ряд m // 3, столбец m % 3.
Бот друга жульничает: иногда ходит в занятую клетку.
Запусти. Потом сделай так, чтобы он выбирал из свободных клеток.
Испытание: дай боту мозги.
Перетащи правила в три ячейки. Решает первое правило, которое нашло ход. Потом проверь на 100 партиях.
Случайный бот против твоего, по 100 партий.
Запусти их и нажми на бота получше.
Твой бот играет O, и сейчас его ход. Куда он пойдёт?
Пройди правила своего бота по порядку.
Выиграть, заблокировать или что угодно? Бот играет O.
Брось каждую позицию в то, что сделает бот «выиграть-заблокировать».
Передай другу.
Друг играет X. Твой бот со своими правилами играет O.
Предыдущий урок: Сетки: списки списков · Часть курса: Строим на Python
Уроки интерактивные и работают на JavaScript. Включи его, чтобы играть.