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)
event.type == pygame.KEYDOWN срабатывает в момент, когда нажали
любую клавишу. А event.key говорит, какую именно:
K_UP, K_DOWN, K_LEFT,
K_RIGHT — это стрелки.
if проверяет первое условие. Если оно не подошло — elif
(это «else if», иначе если) проверяет следующее. Сработает только один из них.
Зачем рядом стоит and direction != (0, 1)? Представь: змейка едет
вниз, и ты нажал вверх. Новая голова окажется прямо на месте
первого сегмента тела — змейка сразу врежется сама в себя!
Поэтому мы запрещаем поворот, если он противоположен текущему направлению.
direction != (0, 1) читается как «если сейчас НЕ едем вниз».
while True, клавиши вообще
не будут работать. Весь for event ... должен быть внутри
главного цикла.
elif event.key == pygame.K_w and direction != (0, 1): → вверх, и
так далее для K_s, K_a, K_d.