Rozdział 21 · Projekt: kosmiczny strzelec

Restart gry bez ponownego uruchomienia programu

Restart z pewnością zresetuje każdy fragment stanu przejściowego — nie tylko wynik.

Rozdział 21.7 nie miała już drogi powrotnej Game Over. Ostateczna wersja zaczyna się od razu Proces — ale restart musi zresetować każdy bit stanu przejściowego, nie tylko wynik.

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
ResetOcalony
Pozycja statkuNagranie sesji (high_score)
Wszystkie kule, wrogowie, eksplozje
Hrabia i Żywoty
Timer pojawiania się wrogów i interwał strzału
Timer niewrażliwości
Zapomniany pocisk z poprzedniej gry to prawdziwy błąd, a nie hipotetyczny
Jeśli self.bullets.empty() chybi, stare pociski z poprzedniej próby pozostaną wiszące na ekranie nowej gry – wizualnie nieszkodliwe, ale wyraźnie błędne i łatwe do przeoczenia podczas testów ręcznych, jeśli nie sprawdzisz dokładnie restartu z niepustymi grupami.
Rzeczywiste okno: czyste pole gry zaraz po ponownym uruchomieniu, wynik 0, trzy życia
Prawdziwe okno zaraz po restarcie – liczenie, życia, liczniki czasu i wszystkie grupy sprite'ów wracają do stanu wyjściowego.