🏠 Главная 🐍 Змейка
1 2 3 4 5 6 7 8
Урок 4 · самый важный

Змейка двигается сама

Что ты увидишь Змейка едет вправо и уезжает за край экрана. Файл: step4_move.py
⬇️ Скачать код урока

🔍 Направление — это тоже пара чисел

Куда ползёт змейка, мы храним в переменной direction — паре (dx, dy): насколько сдвинуться по x и по y за один шаг.

directionКуда
(1, 0)вправо (x +1)
(-1, 0)влево (x −1)
(0, 1)вниз (y +1)
(0, -1)вверх (y −1)

Помни: в играх ось y смотрит вниз. Поэтому «вверх» — это y минус один.

⭐ Самый красивый трюк в игре

Змейка не двигается целиком. Каждый кадр мы добавляем новую голову спереди и убираем хвост сзади. Со стороны это выглядит как движение!

Было: [Г][.][.][.] Шаг 1: [Н][Г][.][.][.] ← snake.insert(0, new_head) добавили голову Шаг 2: [Н][Г][.][.] ← snake.pop() убрали хвост
🔮 Сначала подумай, потом запусти Сейчас direction = (1, 0). Куда поедет змейка — вправо, влево, вверх или вниз? А если поставить (0, -1)? Скажи ответ вслух, потом запусти и проверь. Угадал?

📝 Код урока

direction = (1, 0)   # едем вправо

while True:
    # ... события ...

    # Считаем новую голову: старая голова + направление
    head_x, head_y = snake[0]
    new_head = (head_x + direction[0], head_y + direction[1])

    snake.insert(0, new_head)  # новая голова в начало
    snake.pop()                # убираем последний (хвост)

    # ... рисуем змейку как в уроке 3 ...

    clock.tick(10)  # 10 кадров в секунду!

🔍 Разбор

Считаем новую голову

Берём координаты головы и прибавляем направление:

new_head = (head_x + direction[0], head_y + direction[1])
#           5 + 1 = 6          10 + 0 = 10   →  (6, 10)

insert и pop

⚠️ Самая частая ошибка Если забыть clock.tick(10), змейка будет лететь 60 клеток в секунду — ты даже не успеешь моргнуть. Число 10 значит «10 шагов в секунду».
🐞 Сломалось! Почини Скачай bug2_pop_order.py и запусти. Змейка не ползёт, а растёт без конца! Вспомни: обычный шаг — вставить голову и убрать хвост. Чего не хватает? Почини одной строчкой. Застрял? → словарь ошибок.
🎮 Попробуй сам 1. Пусти змейку вверх: direction = (0, -1).
2. По диагонали: direction = (1, 1). Странно ползёт, да?
3. Сделай быстрее или медленнее: поменяй 10 в tick.

🧠 Проверь себя

Выбери ответ. Ошибёшься — 30 секунд на то, чтобы вернуться в урок и перечитать.

Как змейка двигается каждый кадр?

✅ Самый красивый трюк игры: insert(0, new_head) и pop(). Со стороны это выглядит как движение.

Что хранит direction, например (1, 0)?

✅ (1, 0) — вправо, (0, -1) — вверх. Ось y смотрит вниз, поэтому вверх это y минус один.
← НазадУрок 3 — Змейка-список