Добавим в игру механику прыжков и ограничим перемещение игрока в пределах игрового окна.
Система координат и границы
Система координат Pygame начинается в левом верхнем углу экрана (0, 0). Для игрового объекта локальные координаты также начинаются в левом верхнем углу его прямоугольника. Это необходимо для корректной проверки положения игрока относительно границ.
Границы игрового поля
Ограничим горизонтальное движение игрока:
- Левая граница: Если координата X игрока (x) < 5, игрок не должен двигаться влево. Добавим условие and x > 5 в код движения влево.
- Правая граница: Если координата X игрока (x) ≥ 500 (ширина окна), игрок не должен двигаться вправо. Добавим условие and x < 500 — ширина_игрока — 5 в код движения вправо. Вычитаем ширину игрока и добавляем 5-пиксельный отступ.
После изменений игрок будет корректно останавливаться у границ.
Ограничим вертикальное движение:
- Верхняя граница: Если координата Y игрока (y) < 5, игрок не должен двигаться вверх. Добавим условие and y > 5 в код движения вверх.
- Нижняя граница: Если координата Y игрока (y) ≥ 500 (высота окна), игрок не должен двигаться вниз. Добавим условие and y < 500 — высота_игрока — 5 в код движения вниз. Вычитаем высоту игрока и добавляем 5-пиксельный отступ. Для начальной позиции игрока, чтобы он не появлялся за нижней границей, рекомендуется задать координату Y, например, y = 425.
Реализация прыжков
Добавим переменные:
- jump: Булево значение, указывающее на прыжок игрока.
- jump_count: Целочисленная переменная, управляющая высотой и скоростью прыжка. Начальное значение — 10.
Обработаем нажатие клавиши пробел (space). При нажатии jump станет True. Увеличим скорость игры, изменив задержку с 100 на 50 мс.
Добавим проверку: если jump — False, игрок может двигаться влево/вправо и прыгать. Иначе, происходит прыжок.
Прыжок реализуем с помощью параболы. jump_count возводится в квадрат и уменьшается на единицу с каждой итерацией, моделируя замедление подъема. Затем jump_count умножается на 0.5 (для регулировки высоты прыжка) и вычитается из координаты Y (y -= jump_count * jump_count * 0.5).
Когда jump_count становится меньше 0, игрок начинает падать (y += jump_count * jump_count * 0.5). Когда jump_count достигает -10, прыжок завершается, и jump устанавливается в False.
Реализована механика прыжков и добавлены границы игрового поля, что делает игру более завершенной. Игрок может свободно перемещаться в пределах экрана и совершать прыжки.