Игра «Змейка» · Шаг 5 из 5
Очередь нажатий
Змейка сворачивает только на такте, раз в сто пятьдесят миллисекунд. Опытный игрок успевает между тактами нажать два поворота — «вверх» и сразу «влево», чтобы обогнуть угол. Если помнить только последнее нажатие, «вверх» потеряется, и змейка вместо поворота на месте поедет влево — прямо в себя. Нажатия надо складывать в очередь, а на каждом такте забирать из неё по одному.
Что сделать
Запоминайте нажатия в очереди, чтобы два быстрых поворота между тактами сработали оба.
Что приходит
ochered— очередь ещё не сработавших нажатий,dequeили список; менять её нельзяklavisha— новое нажатие
Что вернуть
Новую очередь deque с клавишей в конце; не меняется, если в ней уже три нажатия или клавиша та же, что последняя, или противоположна ей.
Допишите функцию zapomnit в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
В игре
Игра зовёт zapomnit на каждое нажатие стрелки, а на такте забирает из очереди по одному. Решите шаг — и два быстрых поворота между тактами сработают оба: змейка обогнёт угол, а не повернёт в себя.
Без этого шага: запоминается только последнее нажатие, и два быстрых поворота между тактами сливаются в один.
zapomnit([], "vverh")
deque(['vverh'])
Функция принимает очередь нажатий, которые ещё не сработали (deque или список клавиш, первым сработает первый), и новую клавишу. Возвращает новую очередь — deque; переданную не меняет.
Клавиша встаёт в конец очереди, кроме трёх случаев — тогда очередь не меняется:
- в очереди уже три нажатия — больше змейка за три такта не сделает, лишнее только запоздает;
- клавиша та же, что последняя в очереди, — это зажатая клавиша, а не новый поворот;
- клавиша противоположна последней в очереди («vverh» и «vniz», «vlevo» и «vpravo») — такой поворот всё равно не сработает, а такт займёт.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.