Pygame: Создаем врагов в игре (Урок 6)

В этом уроке мы научимся создавать врагов, их автоматической генерации и отслеживанию столкновений.

Подготовка ресурсов

Необходимо скачать изображение врага. Можно воспользоваться сайтом 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.

В этом уроке мы реализовали создание, движение и столкновение с врагами. Автоматическая генерация врагов с помощью таймера добавляет динамики в игру. Экспериментируйте с настройками для достижения оптимального игрового баланса.

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