Сделайте свои аркадные игры еще более увлекательными и захватывающими, добавляя случайные движущиеся объекты.

Случайно движущиеся объекты могут привнести в игры азарт и непредсказуемость. Это делает их более привлекательными и сложными для игроков. Библиотека Python Arcade предоставляет простой и эффективный способ включения случайных движущихся объектов в ваши игры.

Создайте простую игру

Прежде чем начать, убедитесь, что у вас есть pip установлен на вашем устройстве. Используйте эту команду для установки аркада библиотека:

пип установить аркада

После этого создайте окно с помощью аркада. Окно класс и установите белый цвет фона.

Код, используемый в этой статье, доступен в этом Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.

Установите положение игрока на середину экрана по горизонтали и добавьте небольшое расстояние от верха. Вы можете управлять движением игрока с помощью клавиш со стрелками.

Вот код нашей основной игры:

Импортировать аркада

ЭКРАН_ШИРИНА = 800
ЭКРАН_ВЫСОТА = 600
РАДИУС_ИГРОКА = 15

instagram viewer

сортМоя игра(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
arcade.set_background_color (arcade.color. БЕЛЫЙ)

self.player_x = ШИРИНА_ЭКРАНА // 2
self.player_y = PLAYER_RADIUS + 10

дефon_draw(себя):
аркада.start_render()
arcade.draw_circle_filled(self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. СИНИЙ)

дефобновлять(я, дельта_время):
проходить

дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.player_x -= 5
Элиф ключ == аркада.ключ. ВЕРНО:
self.player_x += 5

если __имя__ == "__основной__":
игра = Моя игра (SCREEN_WIDTH, SCREEN_HEIGHT)
аркада.run()

Добавление нескольких объектов

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

В коде игры добавьте список с именем объекты для хранения позиций случайных движущихся объектов. После этого сгенерируйте количество объектов (NUM_OBJECTS) со случайными координатами x и y в пределах границ экрана. Объекты рисуются в виде красных кругов с помощью arcade.draw_circle_filled функция.

Импортировать аркада
Импортировать случайный

ЭКРАН_ШИРИНА = 800
ЭКРАН_ВЫСОТА = 600
РАДИУС_ИГРОКА = 15
ОБЪЕКТ_РАДИУС = 10
NUM_OBJECTS = 10

сортМоя игра(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
arcade.set_background_color (arcade.color. БЕЛЫЙ)

self.player_x = ШИРИНА_ЭКРАНА // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
для _ в диапазон (NUM_OBJECTS):
х = случайный.randint(0, SCREEN_WIDTH)
у = случайный.randint(0, SCREEN_HEIGHT)
self.objects.append((x, y))

дефon_draw(себя):
аркада.start_render()
arcade.draw_circle_filled(self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. СИНИЙ)

для объект в селф.объекты:
х, у = объект
arcade.draw_circle_filled(x, y, OBJECT_RADIUS, arcade.color. КРАСНЫЙ)

дефобновлять(я, дельта_время):
проходить

дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.player_x -= 5
Элиф ключ == аркада.ключ. ВЕРНО:
self.player_x += 5

если __имя__ == "__основной__":
игра = Моя игра (SCREEN_WIDTH, SCREEN_HEIGHT)
аркада.run()

Ниже приведен вывод:

Реализация алгоритма случайного движения

Чтобы объекты двигались случайным образом, обновите их положение в обновлять метод с использованием алгоритма случайного движения.

Перебрать каждый объект и сгенерировать случайные значения для дх и ды, представляющий изменение координат x и y. Затем обновите позицию объекта, добавив эти значения. Вот измененный код:

дефобновлять(я, дельта_время):
для я в диапазон (NUM_OBJECTS):
х, у = self.objects[i]
dx = случайный.randint(-5, 5)
dy = случайный.randint(-5, 5)
х += дх
у += dy
self.objects[i] = (x, y)

Ниже приведен вывод:

Объекты движутся к игроку

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

Для этого рассчитайте разницу координат x и y между объектом и игроком. Нормируя эти значения, вы получаете вектор направления. Затем умножьте этот вектор на коэффициент скорости (в данном случае 3) и добавьте его к положению объекта. Вот обновленный обновлять метод:

дефобновлять(я, дельта_время):
для я в диапазон (NUM_OBJECTS):
х, у = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
расстояние = math.sqrt (dx ** 2 + ды ** 2)
дх / = расстояние
dy / = расстояние
х += дх * 3
у += ду * 3
self.objects[i] = (x, y)

Ниже приведен вывод:

Объекты начинают двигаться, когда игрок входит в окружение

Чтобы добавить дополнительную динамику, измените код так, чтобы объекты начинали двигаться только тогда, когда игрок входит в их окрестности. Добавить код движения игрока и определить радиус, в пределах которого объекты становятся активными.

дефобновлять(я, дельта_время):
для я в диапазон (NUM_OBJECTS):
х, у = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
расстояние = math.sqrt (dx ** 2 + ды ** 2)

если расстояние < 100: # Отрегулируйте радиус по мере необходимости
дх / = расстояние
dy / = расстояние
х += дх * 3
у += ду * 3
self.objects[i] = (x, y)

Обнаружение столкновений и взаимодействие

Теперь добавьте обнаружение столкновений между игроком и объектами и определите поведение при столкновении. Изменить обновлять метод обработки коллизий:

дефобновлять(я, дельта_время):
для я в диапазон (NUM_OBJECTS):
х, у = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
расстояние = math.sqrt (dx ** 2 + ды ** 2)

если расстояние < PLAYER_RADIUS + OBJECT_RADIUS:
# если произошло столкновение, обработайте его здесь
self.objects.pop (я)
self.objects.append((random.randint(0, ЭКРАН_ШИРИНА), random.randint(0, SCREEN_HEIGHT)))

Элиф расстояние < 100:
дх / = расстояние
dy / = расстояние
х += дх * 3
у += ду * 3
self.objects[i] = (x, y)

Баланс случайности

Чтобы создать сбалансированный игровой процесс, важно точно настроить случайное движение и появление объектов. Вот несколько примеров того, как вы можете изменить код, чтобы добиться лучшего баланса в игре:

Ограничение максимальной скорости

Чтобы объекты не двигались слишком быстро, можно ввести ограничение максимальной скорости. Изменить обновлять метод для включения ограничений скорости:

дефобновлять(я, дельта_время):
для я в диапазон (NUM_OBJECTS):
х, у = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
расстояние = math.sqrt (dx ** 2 + ды ** 2)

если расстояние < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (я)
self.objects.append((random.randint(0, ЭКРАН_ШИРИНА), random.randint(0, SCREEN_HEIGHT)))
Элиф расстояние < 100:
дх / = расстояние
dy / = расстояние

скорость = 3# Отрегулируйте значение скорости по мере необходимости
dx = мин (макс. (dx * скорость, -MAX_SPEED), MAX_SPEED)
dy = мин (макс. (dy * скорость, -MAX_SPEED), MAX_SPEED)

х += дх
у += dy
self.objects[i] = (x, y)

Контроль скорости появления

Вы также можете контролировать скорость появления новых объектов в игре. Измените код, чтобы включить задержку между созданием новых объектов:

Импортировать время

сортМоя игра(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
arcade.set_background_color (arcade.color. БЕЛЫЙ)

self.player_x = ШИРИНА_ЭКРАНА // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
self.last_spawn_time = время.время()

дефобновлять(я, дельта_время):
# контролируйте скорость появления здесь
если time.time() - self.last_spawn_time > SPAWN_DELAY:
если len (self.objects) < MAX_OBJECTS:
self.objects.append((random.randint(0, ЭКРАН_ШИРИНА), random.randint(0, SCREEN_HEIGHT)))
self.last_spawn_time = время.время()

для я в диапазон (len (self.objects)):
х, у = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
расстояние = math.sqrt (dx ** 2 + ды ** 2)

если расстояние < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (я)
self.objects.append((random.randint(0, ЭКРАН_ШИРИНА), random.randint(0, SCREEN_HEIGHT)))
Элиф расстояние < 100:
дх / = расстояние
dy / = расстояние

х += дх * 3
у += ду * 3
self.objects[i] = (x, y)

Настроить SPAWN_DELAY и MAX_OBJECTS ценности, чтобы найти правильный баланс для вашей игры. Более длительная задержка или меньшее максимальное количество объектов сделают игру менее переполненной. Принимая во внимание, что более короткая задержка или больший максимум увеличат сложность.

Сделайте игры более увлекательными, используя движущиеся объекты

Добавление случайных движущихся объектов в игры может значительно улучшить общее впечатление. Они привносят непредсказуемость и сложность, делая игровой процесс более увлекательным и динамичным. Игрокам придется адаптироваться и быстро реагировать, чтобы избежать столкновений или поймать объекты, и это обеспечит чувство волнения и выполненного долга.