Игра «Три в ряд» · Шаг 4 из 5
Обмен соседей
Ход в «три в ряд» — обмен двух соседних камней. Но не любой: обмен засчитывается, только если после него на поле собралась линия. Иначе камни остаются на местах, и ход не тратится.
Что сделать
Поменяйте местами два соседних камня — но только если после обмена на поле собралась линия.
Что приходит
pole— список строк; менять его нельзяaиb— клетки(строка, столбец), которые меняют местамиlinii— функция «поле → список клеток в линиях», ваш шаг 1
Что вернуть
Новое поле после обмена; клетки не соседи или линии не вышло — None.
Допишите функцию obmen в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт obmen, когда вы щёлкнули по второму камню рядом с выбранным. None — выбор снимается, ход не тратится. Решите шаг — и бесполезные обмены перестанут съедать ходы.
Без этого шага: меняются любые соседние камни, даже если линии не вышло, — и ход тратится зря.
Поиск линий в проверке — игрушка: линия есть, только если первая строка поля — "RRR". Обмен (0, 2) и (1, 2) в ["RRG", "GBR"] делает первую строку "RRR" — ответ ["RRR", "GBG"].
Соседи — клетки, у которых совпадает строка, а столбцы отличаются на один, или наоборот. По диагонали — не соседи; клетка сама себе — не сосед.
Соседи — поменять камни местами в копии поля и спросить linii(копия). Непустой ответ — вернуть копию, пустой — None.
Образцовый тест целиком
linii = lambda pole: [(0, 0)] if pole[0] == "RRR" else []
obmen(["RRG", "GBR"], (0, 2), (1, 2), linii)
['RRR', 'GBG']
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.