Случайно движещите се обекти правят игрите по-вълнуващи и предизвикателни. Научете как да го включите във вашите проекти в Pygame.
Pygame, популярна библиотека на Python за разработка на игри, ви позволява да създавате вълнуващи и интерактивни игри с лекота. Един от начините да подобрите вашите Pygame творения е чрез добавяне на произволни движещи се обекти. Тези обекти могат да бъдат препятствия, врагове, бонуси или нещо, което добавя динамика към вашия свят на игри.
Създайте проста игра
Започнете, като настроите основен прозорец на Pygame и добавите обект на играч заедно с някои платформи. Можете също така да приложите основно движение на играча, като използвате клавишите със стрелки или използване на сензорни входове.
Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.
Създайте нов файл с име проста-игра.py и добавете кода за вашата основна игра.
Добавяне на множество движещи се обекти
Сега, когато имате проста игра с обект на играч и платформи, добавете множество произволни движещи се обекти към играта. Тези обекти ще се движат хоризонтално по екрана с различни скорости.
object_width, object_height = 30, 30
object_speed_range = (2, 7)
objects = []defcreate_random_object():
return {
'x': random.randint(0, screen_width - object_width),
'y': random.randint(0, screen_height - object_height),
'speed': random.randint(*object_speed_range)
}for _ in range(5):
objects.append(create_random_object())defdraw_object(obj):
obj_dim = (obj['x'], obj['y'], object_width, object_height)
pygame.draw.rect(screen, WHITE, obj_dim)# Game loop
while running:
screen.fill((0, 0, 0))#... (previous code)
for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthdraw_object(obj)
pygame.display.update()
clock.tick(60)
pygame.quit()
По-долу е резултатът:
Прилагане на алгоритъм за произволно движение
В момента вашите произволно движещи се обекти се движат само по права хоризонтална линия. За да направите движението им по-непредвидимо, можете да добавите алгоритъм за произволно движение.
# Random Movement Algorithm
defupdate_random_movement(obj):
# Change the direction randomly
if random.random() < 0.01:
obj['speed'] = -obj['speed']# Game loop
while running:
#... (previous code)for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthupdate_random_movement(obj)
draw_object(obj)pygame.display.update()
clock.tick(60)
pygame.quit()
Накарайте обектите да се движат към играча
За да добавите повече сложност към играта, можете да въведете някои обекти, които се движат към играча. Можете да постигнете това, като изчислите ъгъла между обекта и играча и съответно регулирате позицията на обекта.
import math
# Objects Moving Towards Player
defmove_towards_player(obj):
player_center_x = player_x + player_width // 2
player_center_y = player_y + player_height // 2
object_center_x = obj['x'] + object_width // 2
object_center_y = obj['y'] + object_height // 2angle1 = player_center_y - object_center_y
angle2 = player_center_x - object_center_xangle = math.atan2(angle1, angle2)
obj['x'] += obj['speed'] * math.cos(angle)
obj['y'] += obj['speed'] * math.sin(angle)# Game loop
while running:
#... (previous code)for obj in objects:
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthmove_towards_player(obj)
draw_object(obj)pygame.display.update()
clock.tick(60)
pygame.quit()
Накарайте обектите да се движат само когато играчът влезе в околностите
Вместо всички обекти да се движат от самото начало, можете да позволите на обектите да започнат да се движат само когато играчът влезе в заобикалящата ги среда.
# Objects Start to Move When Player Enters Surroundings
surrounding_distance = 150defshould_start_moving(obj):
surrounded1 = abs(obj['x'] - player_x) < surrounding_distance
surrounded2 = abs(obj['y'] - player_y) < surrounding_distance
return surrounded1 or surrounded2# Game loop
while running:
#... (previous code)for obj in objects:
if should_start_moving(obj):
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthupdate_random_movement(obj)
move_towards_player(obj)draw_object(obj)
pygame.display.update()
clock.tick(60)
pygame.quit()
Откриване на сблъсък и взаимодействие
За да направите играта още по-ангажираща, можете добавете откриване на сблъсък между играча и движещите се обекти. Например, можете да премахнете обект от екрана, когато играчът се сблъска с него.
# Collision Detection and Interaction
defis_collision(obj):condition1 = player_x + player_width > obj['x']
condition2 = player_x < obj['x'] + object_width
condition3 = player_y + player_height > obj['y']
condition4 = player_y < obj['y'] + object_height
return ( condition1 and condition2 and condition3 and condition4)# Game loop
while running:
#... (previous code)for obj in objects:
if should_start_moving(obj):
obj['x'] += obj['speed']
if obj['x'] > screen_width:
obj['x'] = -object_widthupdate_random_movement(obj)
move_towards_player(obj)if is_collision(obj):
objects.remove(obj)draw_object(obj)
pygame.display.update()
clock.tick(60)
pygame.quit()
Включително допълнителни функции
Добавянето на произволни движещи се обекти може да послужи като основа за внедряване на различни вълнуващи функции във вашата Pygame. Ето някои допълнителни идеи, за да изведете играта си на следващото ниво:
Точкуване и прогресия
Присвоявайте различни резултати на обекти въз основа на тяхното ниво на трудност или рядкост. Можете да създавате и показват система за точкуване който награждава играчите за успешно навигиране през движещи се обекти или събиране на специални предмети.
Внедрете инструмент за проследяване на напредъка, който увеличава трудността на играта, докато играчите постигат по-високи резултати, поддържайки ги ангажирани и мотивирани да се подобряват.
Усилвания и бонуси
Създавайте специални обекти, които дават на играча временни предимства, когато бъдат събрани. Тези усилвания могат да включват повишена скорост, непобедимост или дори възможност за временно замразяване или унищожаване на други обекти.
Бъдете креативни с ефектите на тези бонуси, за да добавите стратегическа дълбочина към играта.
ИИ и поведение на врага
Проектирайте по-сложни модели на движение за вражески обекти, за да ги направите по-предизвикателни за избягване от играчите. Приложете прости AI алгоритми, за да накарате враговете да преследват играча интелигентно или да се движат в координирани модели.
Различното поведение на врага ще държи играчите нащрек и ще попречи на играта да стане монотонна.
Колекционерски предмети и награди
Разпръснете колекционерски предмети из света на играта. Това могат да бъдат монети, скъпоценни камъни или всякакви други тематични предмети. Когато играчът събере определен брой от тези предмети, той може да отключи нови нива, герои или дори тайни функции в играта.
Най-добри практики за добавяне на произволни движещи се обекти
Когато включвате произволно движещи се обекти във вашия Pygame, следването на тези най-добри практики ще ви помогне да създадете добре балансирано и изпипано игрово изживяване:
Трудност при балансиране
Скоростта и моделите на движение на случайно движещи се обекти трябва да бъдат внимателно балансирани, за да осигурят справедливо предизвикателство. Избягвайте да карате обектите да се движат твърде бързо или хаотично, тъй като това може да разочарова играчите и да накара играта да се почувства нечестна.
От друга страна, твърде бавно движещите се обекти могат да направят играта твърде лесна и по-малко ангажираща.
Оптимизация за производителност
Ако вашата игра включва голям брой произволни движещи се обекти или сложни алгоритми за движение, помислете за оптимизиране на кода, за да подобрите производителността. Използвайте ефективни структури от данни и алгоритми за обработка на сблъсъци и изчисления на движение.
Минимизирайте ненужните изчисления, за да осигурите плавен и отзивчив геймплей, особено на по-стари или по-малко мощни устройства.
Тестване и настройване
Тествайте старателно играта си с различни сценарии, за да сте сигурни, че произволно движещите се обекти взаимодействат правилно с други елементи на играта. Тествайте за сблъсъци, взаимодействия с играча и всяко специално поведение при движение.
Регулирайте скоростта, поведението и моделите на обектите въз основа на обратната връзка от тестването на играта, за да постигнете оптимално игрово изживяване.
Случайност с контрол
Въпреки че терминът "случаен" се използва за тези движещи се обекти, пълната случайност може да не винаги е желателна. Помислете за включване на контролирана произволност, където определени движения или модели са дефинирани в диапазон или набор от възможности.
Контролираната произволност гарантира, че играта остава предизвикателна и приятна, без да става твърде хаотична.
Направете игрите по-ангажиращи с произволни движещи се обекти
Случайно движещи се обекти добавят елемент на изненада и непредсказуемост към вашата игра, което я прави по-динамична и ангажираща. Те държат играчите на нокти, изисквайки бързи рефлекси и стратегическо мислене. Освен това, разнообразието от движения и взаимодействия с тези обекти гарантира, че няма две еднакви геймплей изживявания.