Войти Создать аккаунт

Игра «Крестики-нолики» · Шаг 5 из 5

Непобедимый бот

В крестиках-ноликах всего несколько тысяч позиций — компьютер успевает перебрать их все. Бот, который заглядывает до конца партии за себя и за соперника, не проигрывает никогда; лучший ваш результат против него — ничья.

Что сделать

Сделайте бота, который не проигрывает никогда, — перебором всех продолжений партии.

Что приходит

  • pole — поле, список рядов

  • znak — каким знаком играет бот

  • linii — список линий из шага 2

Что вернуть

Клетку (ряд, столбец) с лучшей оценкой для бота; при равенстве — первую по рядам; свободных нет — None; как оценивать — в «Подробных правилах».

Допишите функцию luchshiy_hod в редакторе справа. Результат верните через return — то, что напечатано, на проверку не влияет.

В игре

Игра зовёт luchshiy_hod на каждый ход бота. Решите шаг — и бот станет непобедимым: лучшее, что вы сможете, — ничья.

Без этого шага: непобедимого бота нет — None, и оболочка зовёт простого из шага 4.

Пример

Вы поставили крестик в середину. Бот («O») перебирает все продолжения: ход на сторону проигрывает при точной игре, ход в угол — ничья. Лучшая оценка у всех четырёх углов, и бот берёт первый из них по порядку — (0, 0).

L в проверке — восемь линий поля 3×3, как их строит второй шаг.

Тот же пример кодом
Перед вызовом
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)]]
Вызов
luchshiy_hod([[".", ".", "."], [".", "X", "."], [".", ".", "."]], "O", L)
Вернуть
(0, 0)

Готовая игра →

Ctrl+Enter — проверить

Обсуждение

Вопросов пока нет.

Войдите, чтобы спросить.