Rozdział 21 · Projekt: kosmiczny strzelec
Koniec gry i ekran zakończenia gry
Każda klatka jest rysowana od nowa w całości — a po zakończeniu gry na ekranie pojawia się końcowy napis.
Przerysuj ramkę
Po wszystkich kontrolach i aktualizacjach ramka zostaje całkowicie przerysowana — tło, statek, pociski, wrogowie i liczba kolejnych, w takiej kolejności (tak by późniejsze elementy były na wierzchu więcej wczesny):
pererisovka.py
screen.fill((10, 10, 20))
pygame.draw.rect(screen, (80, 220, 120), korabl)
for pulya in puli:
pygame.draw.rect(screen, (240, 220, 80), pulya)
for vrag in vragi:
pygame.draw.rect(screen, (230, 60, 60), vrag)
tablo = shrift.render(f"Ocena: {schet}", True, (255, 255, 255))
screen.blit(tablo, (10, 10))
pygame.display.flip()
Ekran Koniec gry
Kiedy igra_okonchena staje się prawdziwym zamiast zwyczajnym
Logika gry, wyświetlany jest ostatni ekran:
game_over.py
if igra_okonchena:
nadpis = shrift_bolshoj.render(„GRA SIĘ SKOŃCZYŁA”, True, (255, 255, 255))
rect = nadpis.get_rect(center=(SHIRINA // 2, VYSOTA // 2))
screen.blit(nadpis, rect)
get_rect(center=...) — wygodne wyśrodkowanie tekstu
Zamiast ręcznie obliczać współrzędne tekstu na podstawie jego szerokości i wysokości,
get_rect(center=(x, y)) sam znajduje potrzebny lewy górny róg tak, aby tekst był dokładnie wyśrodkowany w punkcie (x, y).Nie ma wyjścia z tego ekranu bez ponownego uruchomienia Python
Zmienna
igra_okonchena nie ma już drogi powrotu, jedynym sposobem na ponowne uruchomienie programu jest ponowne uruchomienie programu. Rozdział 21.18 zastąpi jedną zmienną boolowską jawną enum.Enum z czterema stanami (MENU/PLAYING/PAUSED/GAME_OVER) i wyraźnymi przejściami między nimi, w tym powrotem do gry.Praktyka: Zawiera ostatni ekran
Pygame otwiera natywne okno Python – uruchomione lokalnie w VS Code, PyCharm lub Jupyter
Praktyka kursuje lokalnie