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)
Prawdziwe okno: przezroczysta, ciemna nałożona na cały ekran, duże GAME OVER, Enter z podkładem i podpowiedzą – znowu
Ostateczna wersja dodaje na ekran Game Over wynik, zapis sesji oraz wyraźną wskazówkę, jak zacząć od nowa (sekcja 21.19).
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
Otwórz praktykę →