Глава 21 · Проект: космический шутер
Что мы построили и как развивать игру дальше
От первого окна в главе 20 до тестируемой, озвученной игры с собственной графикой.
Космический шутер завершён — а вместе с ним закрывается и вторая большая тема курса: полноценная разработка игр на Pygame, от первого окна в главе 20 до тестируемой, озвученной игры с собственной графикой здесь.
Что мы построили в этой главе
- Полноценную игру из пяти классов:
Game,Player,Bullet,Enemy,Explosion— вместо глобальных переменных и списков. - Точное движение через
Vector2и delta time — тот же принцип из главы 20, применённый к настоящему проекту с несколькими типами объектов сразу. - Таймеры, которые различают автономную симуляцию (появление врагов, анимация — сохраняют остаток времени сверх интервала через while) и реакцию на ввод игрока (интервал между выстрелами — не более одного события за кадр).
- Столкновения через
pygame.sprite.groupcollide()иspritecollide(), с защитой от двойного подсчёта очков и от потери нескольких жизней за одно одновременное столкновение. - Явные состояния игры (
GameStatus) и контракт перезапуска, сбрасывающий действительно всё переходное состояние — не только счёт. - Собственную графику и звук, загруженные один раз, и игру, которую можно проверить автоматически — через внедрение генератора случайных чисел и запуск без окна под «пустым» SDL-драйвером (headless).
Куда развивать проект дальше
Идеи для самостоятельного развития
Больше типов врагов
Собственные паттерны движения (зигзаг, наведение на корабль)
Собственные спрайты и очки
Бонусы и усиления
Временные эффекты через тот же приём таймера, что и неуязвимость
Щит, двойной выстрел, дополнительная жизнь
Боссы
Крупный враг с собственным здоровьем (не одно попадание)
Собственный набор атак
Сохранение рекорда
Запись high_score в файл между запусками (глава 15)
Не только в рамках одной сессии
Следующая глава меняет направление: от локальных игр на Pygame — к веб-разработке на Python. Принципы, освоенные здесь — чёткое разделение обязанностей между классами, явные состояния, тестируемый код — пригодятся и там, просто в других декорациях.