Игра «Крестики-нолики» · Шаг 4 из 5
Простой бот
Бот, который ходит в первую свободную клетку, проигрывает за три хода и не сопротивляется. Простой бот играет по правилам, которые знает каждый ребёнок: выиграй, если можешь; помешай, если надо; займи середину; иначе — куда угодно.
Что сделать
Научите бота играть по-детски разумно — выиграй, помешай, займи середину.
Что приходит
pole— поле, список рядовlinii— список линий из шага 2znak— каким знаком играет ботsluchay— генератор случайностей, какrandom.Random
Что вернуть
Клетку (ряд, столбец) по первому сработавшему правилу: выиграть, помешать, середина, иначе sluchay.choice из свободных.
Допишите функцию hod_bota в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Это запасной бот: игра зовёт hod_bota, когда непобедимого из пятого шага ещё нет. Решите шаг — и бот начнёт выигрывать и мешать вам, а не ходить в первую свободную клетку.
Без этого шага: бот ходит в первую свободную клетку.
В верхнем ряду два «X» и свободная клетка (0, 2), в середине — «O». Бот играет за «O». Выиграть ему негде, а «X» не хватает одного знака до линии — бот мешает и ходит в (0, 2).
L в проверке — восемь линий поля 3×3, sl — генератор случайностей: здесь он не понадобился.
import random L = [[(0, 0), (0, 1), (0, 2)], [(1, 0), (1, 1), (1, 2)], [(2, 0), (2, 1), (2, 2)], [(0, 0), (1, 0), (2, 0)], [(0, 1), (1, 1), (2, 1)], [(0, 2), (1, 2), (2, 2)], [(0, 0), (1, 1), (2, 2)], [(0, 2), (1, 1), (2, 0)]] sl = random.Random(1)
hod_bota([["X", "X", "."], [".", "O", "."], [".", ".", "."]], L, "O", sl)
(0, 2)
Функция принимает поле, список линий, знак бота и генератор случайностей sluchay (как random.Random). Возвращает клетку (ряд, столбец) для хода бота — по первому сработавшему правилу:
- есть линия, где все клетки, кроме одной свободной, — знак бота: ход в эту свободную клетку (первая такая линия по списку);
- то же самое со знаком соперника: ход туда, чтобы помешать;
- свободна середина поля
(n // 2, n // 2)— ход в середину; - иначе
sluchay.choice(...)из свободных клеток, перечисленных по рядам сверху вниз, в ряду слева направо. Соперник «O», если бот — «X», и наоборот. Свободная клетка на поле хотя бы одна есть.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.