В этом уроке мы научимся создавать врагов, их автоматической генерации и отслеживанию столкновений.
Подготовка ресурсов
Необходимо скачать изображение врага. Можно воспользоваться сайтом Flaticon.com, например, искать по запросу «приведение». Скачайте картинку небольшого размера, например, 64×64 пикселей или меньше. Переместите её в папку images проекта.
Изображение и переменные
Подключаем изображение приведения аналогично предыдущим урокам. Создадим переменные:
- ghost – для загрузки изображения:
ghost = pygame.image.load('images/nothost.png')
- ghost_x – для начального положения врага по оси X:
ghost_x = 620
Враги будут появляться за пределами экрана и двигаться к игроку.
Отображение и движение врага
Добавим вывод изображения приведения на экран:
screen.blit(ghost, (ghost_x, 250))
Перемещение врага осуществляется изменением значения ghost_x:
ghost_x -= 10
Конвертация изображений
Для оптимизации Pygame рекомендуется конвертировать изображения в подходящий формат. Для непрозрачных изображений используйте метод convert(), а для изображений с прозрачностью – convert_alpha(). Для PNG-файлов лучше использовать convert_alpha(). Это упростит обработку изображений и повысит производительность.
# Пример конвертации
ghost = ghost.convert_alpha()
Отслеживание столкновений
Для отслеживания столкновений создадим прямоугольники (rect) вокруг изображений игрока и врага. Это позволит легко определять пересечение. Прямоугольники создаются с помощью метода get_rect().
player_rect = player_walk_left[0].get_rect(topleft=(player_x, player_y))
ghost_rect = ghost.get_rect(topleft=(ghost_x, 250))
Проверка столкновения осуществляется с помощью метода colliderect():
if player_rect.colliderect(ghost_rect):
print("Вы проиграли!")
Автоматическая генерация врагов
Для автоматической генерации врагов создадим таймер с помощью pygame.USEREVENT + 1. Таймер будет срабатывать через заданный интервал времени (например, 1 секунда).
ghost_timer = pygame.USEREVENT + 1
pygame.time.set_timer(ghost_timer, 1000)
Создадим список ghost_list_in_game для хранения врагов. При срабатывании таймера, новый враг (его прямоугольник) добавляется в список:
if event.type == ghost_timer:
ghost_list_in_game.append(ghost.get_rect(topleft=(620, 250)))
В основном цикле перебираем список врагов, отрисовываем их, перемещаем и проверяем на столкновение с игроком:
for element in ghost_list_in_game:
screen.blit(ghost, element)
element.x -= 10
if player_rect.colliderect(element):
print("Вы проиграли!")
Баланс игры
Для баланса игры можно настроить частоту появления врагов и высоту прыжка игрока, изменив интервал таймера и значение jump_power.
В этом уроке мы реализовали создание, движение и столкновение с врагами. Автоматическая генерация врагов с помощью таймера добавляет динамики в игру. Экспериментируйте с настройками для достижения оптимального игрового баланса.