Глава 21 · Проект: космический шутер
Завершение игры и экран «Игра окончена»
Каждый кадр рисуется заново целиком — а при окончании игры на экране появляется финальная надпись.
Рисуем кадр заново
После всех проверок и обновлений кадр рисуется заново целиком — фон, корабль, пули, враги и счёт, в таком порядке (чтобы более поздние элементы оказывались поверх более ранних):
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"Счёт: {schet}", True, (255, 255, 255))
screen.blit(tablo, (10, 10))
pygame.display.flip()
Экран «Игра окончена»
Когда igra_okonchena становится истинной, вместо обычной
игровой логики выводится финальный экран:
game_over.py
if igra_okonchena:
nadpis = shrift_bolshoj.render("ИГРА ОКОНЧЕНА", True, (255, 255, 255))
rect = nadpis.get_rect(center=(SHIRINA // 2, VYSOTA // 2))
screen.blit(nadpis, rect)
get_rect(center=...) — удобное центрирование текста
Вместо ручного вычисления координат текста по его ширине и высоте,
get_rect(center=(x, y)) сам находит нужный левый верхний угол так, чтобы текст оказался центрирован ровно в точке (x, y).Из этого экрана нет выхода без перезапуска Python
У переменной
igra_okonchena нет обратного пути — единственный способ сыграть ещё раз — запустить программу заново. Раздел 21.18 заменит одну булеву переменную на явный enum.Enum с четырьмя состояниями (MENU/PLAYING/PAUSED/GAME_OVER) и понятными переходами между ними, включая переход обратно в игру.Практика: включает финальный экран
Pygame открывает нативное окно Python — выполните локально в VS Code, PyCharm или Jupyter
Практика выполняется локально