Игра «Реверси» · Шаг 3 из 5
Куда можно пойти
Пойти в реверси можно не куда угодно, а только туда, где что-нибудь перевернётся. Этот список нужен игре трижды: подсказать игроку, не пустить его в негодную клетку и дать боту, из чего выбирать.
Что сделать
Соберите все клетки, куда игрок может пойти, — те, где шаг 1 что-нибудь переворачивает.
Что приходит
pole— поле списком строк:".","B","W"kto— за кого ищем ходы:"B"или"W"zahvat— ваш шаг 1:zahvat(pole, stroka, stolbec, kto)даёт список клеток, которые перевернутся
Что вернуть
Список клеток (строка, столбец): пустые клетки, где zahvat вернул непустой список, — по строкам сверху вниз, в строке слева направо.
Допишите функцию vozmozhnye в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт vozmozhnye, чтобы нарисовать подсказки «+», чтобы не пустить щелчок в негодную клетку и чтобы дать боту варианты. Решите шаг — и пойти можно будет только туда, где что-нибудь перевернётся.
Без этого шага: ходить можно в любую пустую клетку рядом с фишкой — даже туда, где ничего не перевернётся.
Поле ["B.", ".."], вместо настоящего шага 1 — игрушка, которая «переворачивает» что-нибудь только в правом столбце. Пустых клеток три, в правом столбце из них две — (0, 1) и (1, 1): это и есть ответ.
В проверке игрушка записана так:
zahvat = lambda pole, s, c, kto: [(0, 0)] if c == 1 else [].
Функция обходит все клетки поля: строки сверху вниз, в каждой строке столбцы слева направо. Клетка годится, если она пуста (".") и zahvat(pole, строка, столбец, kto) вернул непустой список.
Возвращает список годных клеток кортежами (строка, столбец) в порядке обхода. Годных нет — [].
zahvat приходит доводом: зовите его по этому имени, как обычную функцию. Пустоту клетки проверяйте сами — не всякая функция, которая придёт сюда, проверяет её за вас.
Образцовый тест целиком
zahvat = lambda pole, s, c, kto: [(0, 0)] if c == 1 else []
vozmozhnye(["B.", ".."], "B", zahvat)
[(0, 1), (1, 1)]
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.