🎮 Все игры 🐍 Змейка
1 2 3 4 5 6 7
Урок 5

Управляем стрелками

Что ты увидишь Уже настоящую змейку (пока без еды), которая поворачивает по стрелкам. Файл: step5_keys.py
⬇️ Скачать код урока

📝 Код урока (новое — внутри цикла событий)

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:
            # Меняем направление, но НЕ даём развернуться на 180°
            if event.key == pygame.K_UP and direction != (0, 1):
                direction = (0, -1)
            elif event.key == pygame.K_DOWN and direction != (0, -1):
                direction = (0, 1)
            elif event.key == pygame.K_LEFT and direction != (1, 0):
                direction = (-1, 0)
            elif event.key == pygame.K_RIGHT and direction != (-1, 0):
                direction = (1, 0)

🔍 Что тут происходит

KEYDOWN — «клавишу нажали»

event.type == pygame.KEYDOWN срабатывает в момент, когда нажали любую клавишу. А event.key говорит, какую именно: K_UP, K_DOWN, K_LEFT, K_RIGHT — это стрелки.

if / elif — «или то, или другое»

if проверяет первое условие. Если оно не подошло — elif (это «else if», иначе если) проверяет следующее. Сработает только один из них.

⭐ Защита от разворота на 180°

Зачем рядом стоит and direction != (0, 1)? Представь: змейка едет вниз, и ты нажал вверх. Новая голова окажется прямо на месте первого сегмента тела — змейка сразу врежется сама в себя!

едем вниз: [.][Г] [#] ← тело прямо под головой нажали вверх → новая голова попадёт В тело = смерть

Поэтому мы запрещаем поворот, если он противоположен текущему направлению. direction != (0, 1) читается как «если сейчас НЕ едем вниз».

⚠️ Это был баг в самой первой версии Если поставить цикл событий вне while True, клавиши вообще не будут работать. Весь for event ... должен быть внутри главного цикла.
🎮 Попробуй сам Добавь управление на буквах WASD (для второй руки):
elif event.key == pygame.K_w and direction != (0, 1): → вверх, и так далее для K_s, K_a, K_d.
← НазадУрок 4 — Движение