Глава 19 · Правила игры
Столкновение со стеной
GRANICA — предел координаты центра головы, а не размер окна; граница включена в легальную область.
Граница — координата центра сегмента, а не края экрана
GRANICA = 280 — это не размер окна (600×600), а предел для
координаты центра головы. При толщине сегмента в 20 пикселей голова с центром
ровно в 280 всё ещё целиком помещается на видимом поле; на 300 она бы уже выходила за
край.
is_wall_collision.py
def is_wall_collision(head, *, half=280):
x, y = head
return abs(x) > half or abs(y) > half
| Позиция головы | is_wall_collision() |
|---|---|
| (280, 0) | False — легальная граница |
| (-280, -280) | False — легальная граница, угол поля |
| (300, 0) | True — уже за пределами |
Строгое сравнение (>), не (>=) — граница включена
Если бы проверка использовала
>=, легальная позиция 280 уже считалась бы столкновением — змейка не смогла бы доехать до самого края поля. Раздел 19.30 разбирает эти пограничные случаи как отдельные тесты, а не только на словах.Практика: граница поля
Автоматическая проверка — функция is_wall_collision() на самой границе и за ней