Как в Арканоиде, заводим lives и state. Только тут
состояния два: "play" (играем) и "over" (конец).
Когда жизни кончились — переключаем state и показываем надпись.
def new_game(): ship_x = WIDTH // 2 bullets = [] enemies = [] return ship_x, bullets, enemies, 0, 3, 0 ship_x, bullets, enemies, score, lives, spawn_timer = new_game() state = "play" # "play" | "over" # --- враги: теперь отнимают жизнь --- for e in enemies[:]: e.y += ENEMY_SPEED if e.top > HEIGHT: # прорвался вниз enemies.remove(e) lives -= 1 elif e.colliderect(ship_rect): # врезался в корабль enemies.remove(e) lives -= 1 if lives <= 0: state = "over" # --- пробел ТОЛЬКО стреляет; перезапуск — Enter или кнопка --- elif event.key == pygame.K_SPACE and state == "play": bullets.append(pygame.Rect(ship_x - BULLET_W // 2, ship_y, BULLET_W, BULLET_H)) elif event.key == pygame.K_RETURN and state == "over": ship_x, bullets, enemies, score, lives, spawn_timer = new_game() state = "play" # клик мышкой по кнопке «Играть заново» if event.type == pygame.MOUSEBUTTONDOWN and state == "over": if RESTART_BTN.collidepoint(event.pos): ship_x, bullets, enemies, score, lives, spawn_timer = new_game() state = "play"
Заманчиво повесить и стрельбу, и рестарт на пробел. Но в конце игры ты ещё жмёшь пробел (стрелял же!) — и игра мгновенно начнётся заново, а ты даже не успеешь увидеть свой счёт. Поэтому пробел только стреляет, а перезапуск отдельно: клавишей Enter или кликом по кнопке на экране.
Кнопка «Играть заново» — обычный pygame.Rect. Когда кликнули мышкой
(MOUSEBUTTONDOWN), проверяем
RESTART_BTN.collidepoint(event.pos) — попал ли курсор внутрь.
Попал — начинаем новую игру. А финальный счёт показываем так:
font.render(f"Твой счёт: {score}").
new_game() — чистый стартФункция возвращает всё «как в начале»: корабль по центру, пустые списки, очки и таймер в ноль, три жизни. Один вызов — и игра свежая.
if state == "play"Когда игра окончена, корабль, пули и враги замирают: мы просто не выполняем обновление. Рисуем последний кадр и поверх — надпись.
pygame.SCALED всё растягивает сам.
SPAWN_EVERY —
враги пойдут чаще.5 в new_game().pygame.mixer и звуки.