Nejauši kustīgi objekti padara spēles aizraujošākas un izaicinošākas. Uzziniet, kā to iekļaut savos Pygame projektos.

Pygame, populāra Python bibliotēka spēļu izstrādei, ļauj viegli izveidot aizraujošas un interaktīvas spēles. Viens veids, kā uzlabot savus Pygame darbus, ir pievienot nejauši kustīgus objektus. Šie objekti var būt šķēršļi, ienaidnieki, pastiprinātāji vai jebkas, kas piešķir jūsu spēļu pasaulei dinamismu.

Izveidojiet vienkāršu spēli

Sāciet ar Pygame pamata loga iestatīšanu un spēlētāja objekta pievienošanu kopā ar dažām platformām. Varat arī īstenot pamata spēlētāja kustību, izmantojot bulttaustiņus vai izmantojot pieskārienu ievades.

Šajā rakstā izmantotais kods ir pieejams šajā GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.

Izveidojiet jaunu failu ar nosaukumu simple-game.py un pievienojiet savas pamata spēles kodu.

Pievienojiet vairākus kustīgus objektus

Tagad, kad jums ir vienkārša spēle ar spēlētāja objektu un platformām, pievienojiet spēlei vairākus nejauši kustīgus objektus. Šie objekti pārvietosies horizontāli pa ekrānu dažādos ātrumos.

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_width

draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

Zemāk ir izvade:

Ieviesiet nejaušās kustības algoritmu

Pašlaik jūsu nejauši kustīgie objekti pārvietojas tikai taisnā horizontālā līnijā. Lai padarītu to kustību neparedzamāku, varat pievienot nejaušu kustības algoritmu.

# 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_width

update_random_movement(obj)
draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

Lieciet objektiem virzīties uz atskaņotāju

Lai padarītu spēli sarežģītāku, varat ieviest dažus objektus, kas virzās uz spēlētāju. To var panākt, aprēķinot leņķi starp objektu un atskaņotāju un attiecīgi pielāgojot objekta pozīciju.

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 // 2

angle1 = player_center_y - object_center_y
angle2 = player_center_x - object_center_x

angle = 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_width

move_towards_player(obj)
draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

Lieciet objektiem kustēties tikai tad, kad atskaņotājs ieiet apkārtnē

Tā vietā, lai visi objekti kustētos no paša sākuma, varat ļaut objektiem sākt kustēties tikai tad, kad spēlētājs nonāk to apkārtnē.

# Objects Start to Move When Player Enters Surroundings
surrounding_distance = 150

defshould_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_width

update_random_movement(obj)
move_towards_player(obj)

draw_object(obj)

pygame.display.update()
clock.tick(60)

pygame.quit()

Sadursmju noteikšana un mijiedarbība

Lai padarītu spēli vēl saistošāku, varat pievienojiet sadursmes noteikšanu starp atskaņotāju un kustīgajiem objektiem. Piemēram, jūs varat noņemt objektu no ekrāna, kad atskaņotājs ar to saduras.

# 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_width

update_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()

Ieskaitot papildu funkcijas

Nejauši kustīgu objektu pievienošana var kalpot par pamatu dažādu aizraujošu funkciju ieviešanai jūsu Pygame. Šeit ir dažas papildu idejas, lai paceltu savu spēli uz nākamo līmeni:

Vērtēšana un progresēšana

Piešķiriet objektiem dažādus punktus, pamatojoties uz to grūtības pakāpi vai retumu. Jūs varat izveidot un parādīt vērtēšanas sistēmu kas apbalvo spēlētājus par veiksmīgu navigāciju pa kustīgiem objektiem vai īpašu priekšmetu savākšanu.

Ieviesiet progresa izsekotāju, kas palielina spēles grūtības, jo spēlētāji sasniedz augstākus rezultātus, saglabājot viņu iesaistīšanos un motivāciju uzlaboties.

Papildinājumi un bonusi

Izveidojiet īpašus objektus, kas pēc savākšanas piešķir spēlētājam īslaicīgas priekšrocības. Šie pastiprinājumi varētu ietvert palielinātu ātrumu, neuzvaramību vai pat iespēju īslaicīgi iesaldēt vai iznīcināt citus objektus.

Esiet radošs, izmantojot šo pastiprinājumu efektu, lai spēlei pievienotu stratēģisku dziļumu.

Ienaidnieka AI un uzvedība

Izveidojiet sarežģītākus ienaidnieka objektu kustību modeļus, lai spēlētājiem būtu grūtāk no tiem izvairīties. Ieviesiet vienkāršus mākslīgā intelekta algoritmus, lai liktu ienaidniekiem saprātīgi vajāt spēlētāju vai pārvietoties saskaņā ar saskaņotiem modeļiem.

Atšķirīga ienaidnieka uzvedība noturēs spēlētājus uz pirkstiem un neļaus spēlei kļūt vienmuļai.

Kolekcionējamie priekšmeti un balvas

Izkaisiet kolekcionējamus priekšmetus visā spēļu pasaulē. Tās var būt monētas, dārgakmeņi vai citi tematiski priekšmeti. Kad spēlētājs savāc noteiktu skaitu šo priekšmetu, viņš var atbloķēt jaunus līmeņus, varoņus vai pat slepenas funkcijas spēlē.

Paraugprakse nejauši kustīgu objektu pievienošanai

Iekļaujot savā Pygame nejauši kustīgus objektus, šīs paraugprakses ievērošana palīdzēs jums izveidot līdzsvarotu un izsmalcinātu spēļu pieredzi.

Līdzsvarošanas grūtības

Nejauši kustīgu objektu ātrums un kustības modeļi ir rūpīgi jāsabalansē, lai nodrošinātu godīgu izaicinājumu. Izvairieties likt priekšmetiem kustēties pārāk ātri vai neregulāri, jo tas var satraukt spēlētājus un likt spēlei justies negodīgi.

No otras puses, pārāk lēni kustīgi objekti var padarīt spēli pārāk vienkāršu un mazāk saistošu.

Optimizācija veiktspējai

Ja jūsu spēlē ir iekļauts liels skaits nejauši kustīgu objektu vai sarežģīti kustību algoritmi, apsveriet iespēju optimizēt kodu, lai uzlabotu veiktspēju. Izmantojiet efektīvas datu struktūras un algoritmus, lai apstrādātu sadursmes un kustības aprēķinus.

Samaziniet nevajadzīgus aprēķinus, lai nodrošinātu vienmērīgu un atsaucīgu spēli, īpaši vecākām vai mazāk jaudīgām ierīcēm.

Testēšana un pielāgošana

Rūpīgi pārbaudiet savu spēli ar dažādiem scenārijiem, lai nodrošinātu, ka nejauši kustīgie objekti pareizi mijiedarbojas ar citiem spēles elementiem. Pārbaudiet sadursmes, mijiedarbību ar spēlētāju un jebkuru īpašu kustību uzvedību.

Pielāgojiet objektu ātrumu, uzvedību un modeļus, pamatojoties uz atgriezenisko saiti par spēles testēšanu, lai sasniegtu optimālu spēles pieredzi.

Nejaušība ar kontroli

Lai gan termins "nejaušs" tiek izmantots šiem kustīgajiem objektiem, pilnīga nejaušība ne vienmēr var būt vēlama. Apsveriet iespēju iekļaut kontrolētu nejaušību, kad noteiktas kustības vai modeļi ir definēti iespēju diapazonā vai komplektā.

Kontrolēta nejaušība nodrošina, ka spēle joprojām ir izaicinoša un patīkama, nekļūstot pārāk haotiska.

Padariet spēles saistošākas ar nejauši kustīgiem objektiem

Nejauši kustīgi objekti piešķir jūsu spēlei pārsteiguma un neparedzamības elementu, padarot to dinamiskāku un saistošāku. Viņi notur spēlētājus uz pirkstiem, prasa ātrus refleksus un stratēģisku domāšanu. Turklāt kustību un mijiedarbības ar šiem objektiem daudzveidība nodrošina, ka nav divu vienādu spēles pieredzes.