Игра «Сокобан» · Шаг 2 из 6
Шаг и толчок
Кладовщик ходит на соседнюю клетку. Стена его не пускает. Если впереди ящик, кладовщик его толкает — но только если за ящиком свободно: ни стены, ни другого ящика. Тянуть ящик нельзя, толкать два разом — тоже.
Что сделать
Сделайте шаг кладовщика — а если впереди ящик, толкните его, если за ним свободно.
Что приходит
igrok— клетка кладовщикаyashchiki— клетки ящиков; менять переданные нельзяsteny— клетки стенkuda— направление:"vverh","vniz","vlevo"или"vpravo"
Что вернуть
Пару (новая клетка кладовщика, ящики по рядам и столбцам); в стену или ящик, за которым стена или ящик, — никто не двигается.
Допишите функцию hod_igroka в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт hod_igroka на каждую стрелку и на каждый шаг пути по щелчку. Решите шаг — и кладовщик начнёт толкать ящики.
Без этого шага: ящики не двигаются — в них упираешься, как в стену.
Кладовщик в (1, 1), ящик в (1, 2), ход вправо: за ящиком свободно — ящик уезжает в (1, 3), кладовщик встаёт на (1, 2). Будь в (1, 3) стена — оба остались бы на месте.
hod_igroka((1, 1), [(3, 3)], [(0, 1)], "vpravo")
((1, 2), [(3, 3)])
Функция принимает клетку кладовщика, ящики (список или множество клеток), стены и направление: «vverh», «vniz», «vlevo», «vpravo». Возвращает пару: новую клетку кладовщика и список ящиков после хода, упорядоченный по рядам и столбцам.
- Впереди стена — никто не двигается.
- Впереди ящик, а за ним стена или ящик — никто не двигается.
- Впереди ящик, за ним свободно — ящик сдвигается на клетку дальше, кладовщик встаёт на его место.
- Иначе кладовщик просто шагает.
Незнакомое направление — никто не двигается. Переданные ящики не меняются.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.