Глава 19 · Модель игры

Мир игры как сетка

Голова, тело и яблоко всегда стоят в узле решётки — движение это переход к соседнему узлу, не скольжение.

Змейка живёт не в произвольных координатах

Первый прототип уже двигает голову шагами по 20 пикселей, но легко не заметить, почему именно так: змейка не может оказаться в точке (137, 52) — только в точках, кратных RAZMER_SHAGA. Игровое поле — это не холст, где можно нарисовать линию под любым углом (как Canvas в главе 18), а дискретная сетка: конечный набор клеток, и каждый объект игры — голова, сегмент тела, яблоко — всегда стоит ровно в одной из них. Рядом со словом «сетка» дальше в главе встретится и «решётка» — это одно и то же: узлы решётки и есть клетки сетки.

Легальные позиции — узлы решётки с шагом RAZMER_SHAGA, а не любая точка поля.

При RAZMER_SHAGA = 20 легальные координаты по каждой оси — ..., -40, -20, 0, 20, 40, .... Движение на шаг — это переход к соседнему узлу решётки, а не плавное скольжение на произвольное расстояние.

Та же идея, что и в главе 18 — но без пикселей между клетками
Canvas тоже работал в целых пикселях, но фигуру можно было сдвинуть на 1 пиксель. У змейки шаг фиксирован: RAZMER_SHAGA — это не «минимальная единица экрана», а сама единица игрового мира. Это и определяет всё остальное в главе: как размещается еда, как обнаруживается столкновение, как выглядит движение тела.
Практика: легальные позиции сетки
Автоматическая проверка — функция is_on_grid(): кратна ли точка шагу сетки
Открыть практику →