Реализуем систему проигрыша и создадим экран проигрыша.
Система проигрыша
Добавим переменную 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, если нажата левая кнопка мыши.
Игра корректно обрабатывает проигрыш, отображает экран проигрыша с надписью «Играть заново», и позволяет перезапустить игру по нажатию на эту надпись. Враги удаляются при выходе за пределы экрана.