Как сделать экран «Game Over» и перезапуск игры по нажатию в pygame?
Игра работает, персонаж умирает при столкновении. Но что делать дальше? Сейчас при проигрыше окно просто закрывается. Хочу показывать надпись «Вы проиграли» и предложение нажать клавишу, чтобы начать заново. Как это устроить?
2 ответа
Удобнее всего держать состояние игры в переменной и в зависимости от него показывать либо игру, либо экран проигрыша. А весь сброс (счёт, позиция героя) вынести в функцию 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() ставит всё в начальное состояние — это и есть «начать заново» без перезапуска программы.
Чтобы случайное нажатие сразу после смерти не перезапускало игру мгновенно, можно перезапускать только по конкретной клавише, например пробелу: if game_over and event.key == pygame.K_SPACE:. Так понятнее игроку и меньше случайных рестартов.