Pygame: Создаем экран проигрыша (Урок 7)

Реализуем систему проигрыша и создадим экран проигрыша.

Система проигрыша

Добавим переменную gameplay со значением True по умолчанию. Пока gameplay истинно, игра запущена. Присвоение gameplay значения False означает проигрыш и завершение игры.

В игровом цикле, после вывода фонового изображения, добавим условие:

if gameplay:
    # Весь код игры до обновления изображения
else:
    # Код экрана проигрыша

При проигрыше (gameplay == False) экран окрасим в другой цвет. Цвет можно подобрать с помощью Color Picker или указать значение RGB напрямую, например: (128, 128, 128).

При столкновении игрока с врагом (ранее выводилось сообщение в консоль), будем устанавливать gameplay = False.

Удаление врагов

Враги двигаются к игроку и не удаляются, продолжая движение за пределы экрана. Исправим это. В цикле перебора врагов проверим их координаты. Если координата X меньше -10 (враг за пределами экрана), удалим его из списка:

for i, enemy in enumerate(enemies):
    if enemy.rect.x < -10:
        del enemies[i]

Для корректного перебора используем функцию enumerate, возвращающую элемент и его индекс.

Экран проигрыша

На экран проигрыша выведем надписи: «Вы проиграли!» и «Играть заново».

Создадим переменные для надписей:

label = pygame.font.Font('path/to/your/font.ttf', 40) # Замените 'path/to/your/font.ttf' на путь к вашему шрифту

lose_label = label.render('Вы проиграли!', False, (255, 0, 0)) # (255, 0, 0) - красный цвет
start_label = label.render('Играть заново', False, (0, 255, 0)) # (0, 255, 0) - зеленый цвет

Выведем надписи на экран с помощью метода blit:

screen.blit(lose_label, (180, 100))

Для start_label создадим невидимую рамку с помощью get_rect() для отслеживания нажатий:

restart_label_rect = start_label.get_rect(topleft=(180, 200))
screen.blit(start_label, restart_label_rect)

Обработка нажатия

Добавим обработчик события для перезапуска игры при нажатии на надпись «Играть заново». Будем использовать метод collidepoint для проверки нажатия на рамку вокруг надписи:

mouse_pos = pygame.mouse.get_pos()
if pygame.mouse.get_pressed()[0] and restart_label_rect.collidepoint(mouse_pos):
    gameplay = True
    player.rect.x = 150
    enemies.clear()

pygame.mouse.get_pressed()[0] возвращает True, если нажата левая кнопка мыши.

Игра корректно обрабатывает проигрыш, отображает экран проигрыша с надписью «Играть заново», и позволяет перезапустить игру по нажатию на эту надпись. Враги удаляются при выходе за пределы экрана.

Что будем искать? Например,программа