Глава 21 · Проект: космический шутер
Перезапуск игры без перезапуска программы
Перезапуск обязан сбросить каждый кусочек переходного состояния — не только счёт.
У раздела 21.7 не было пути назад из Game Over. Финальная версия перезапускается прямо в процессе — но перезапуск обязан сбросить каждый кусочек переходного состояния, не только счёт.
fragment_start_new_game.py
def start_new_game(self):
self.bullets.empty()
self.enemies.empty()
self.explosions.empty()
self.player = self._make_player()
self.score = 0
self.lives = STARTING_LIVES
self.spawn_timer = interval_poyavleniya_vraga(0)
self._reset_stars()
self.state = GameStatus.PLAYING
| Сбрасывается | Сохраняется |
|---|---|
| Позиция корабля | Рекорд сессии (high_score) |
| Все пули, враги, взрывы | |
| Счёт и жизни | |
| Таймер появления врагов и интервал между выстрелами | |
| Таймер неуязвимости |
Забытая пуля из прошлой игры — реальная ошибка, не гипотетическая
Если
self.bullets.empty() пропустить, старые пули из предыдущей попытки останутся висеть на экране новой игры — визуально безобидно, но явно неправильно, и легко упустить при ручном тестировании, если специально не проверить перезапуск с непустыми группами.