← Все вопросы

Как сделать экран «Game Over» и перезапуск игры по нажатию в pygame?

Задан 4 месяца назад532 просмотров2 ответа
6

Игра работает, персонаж умирает при столкновении. Но что делать дальше? Сейчас при проигрыше окно просто закрывается. Хочу показывать надпись «Вы проиграли» и предложение нажать клавишу, чтобы начать заново. Как это устроить?

2 ответа

11
✓ Принятый ответ — помог автору

Удобнее всего держать состояние игры в переменной и в зависимости от него показывать либо игру, либо экран проигрыша. А весь сброс (счёт, позиция героя) вынести в функцию reset().

def reset():
    global x, y, score, game_over
    x, y, score = 100, 100, 0
    game_over = False

reset()

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if game_over and event.type == pygame.KEYDOWN:
            reset()                       # любая клавиша = заново

    if not game_over:
        # ... обычная логика игры, при смерти: game_over = True ...
        pass

    screen.fill((0, 0, 0))
    if game_over:
        text = font.render("Вы проиграли! Нажмите любую клавишу", True, (255, 0, 0))
        screen.blit(text, (60, 220))
    else:
        # ... рисуем игру ...
        pass
    pygame.display.flip()
    clock.tick(60)

Смысл: один и тот же цикл, но if game_over переключает, что показывать и что слушать. reset() ставит всё в начальное состояние — это и есть «начать заново» без перезапуска программы.

4

Чтобы случайное нажатие сразу после смерти не перезапускало игру мгновенно, можно перезапускать только по конкретной клавише, например пробелу: if game_over and event.key == pygame.K_SPACE:. Так понятнее игроку и меньше случайных рестартов.

Ваш ответ

Войдите, чтобы ответить на вопрос.