Глава 21 · Проект: космический шутер

Игровой цикл

План того, что должно происходить на каждом кадре — и первый персонаж игры.

Игровой цикл

Как и в главе 20, цикл — сердце игры. На этот раз он будет обновлять сразу несколько вещей на каждом кадре: положение корабля, врагов, пуль — и проверять столкновения:

igrovoj_cikl_plan.py
while rabotaet:
    # 1. обработать события (выход, выстрел)
    # 2. обработать зажатые клавиши (движение корабля)
    # 3. обновить положение врагов и пуль, проверить столкновения
    # 4. нарисовать всё заново
    # 5. clock.tick(FPS)

Создаём космический корабль

Вместо отдельных переменных x, y корабля удобно использовать pygame.Rect — он сразу хранит позицию и размер вместе и понадобится для проверки столкновений:

korabl.py
KORABL_SHIRINA, KORABL_VYSOTA = 50, 40

korabl = pygame.Rect(
    SHIRINA // 2 - KORABL_SHIRINA // 2,
    VYSOTA - KORABL_VYSOTA - 20,
    KORABL_SHIRINA,
    KORABL_VYSOTA,
)

# в игровом цикле:
pygame.draw.rect(screen, (80, 220, 120), korabl)
Rect хранит четыре числа — и много полезных свойств
Rect(x, y, ширина, высота) дополнительно вычисляет .centerx, .bottom, .top и другие удобные координаты — они пригодятся уже в следующем разделе.
Практика в Jupyter Notebook
21-02-korabl.ipynb · Rect и первый корабль
Открыть ноутбук →