Глава 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).
Практика в Jupyter Notebook
21-06-unichtozhenie.ipynb · включает финальный экран
Открыть ноутбук →