Atsitiktinai judantys objektai daro žaidimus įdomesnius ir sudėtingesnius. Sužinokite, kaip tai įtraukti į savo Pygame projektus.

Pygame, populiari žaidimų kūrimo Python biblioteka, leidžia lengvai kurti įdomius ir interaktyvius žaidimus. Vienas iš būdų patobulinti savo Pygame kūrinius yra pridėti atsitiktinai judančių objektų. Šie objektai gali būti kliūtys, priešai, galios ar bet kas, kas suteikia žaidimo pasauliui dinamiškumo.

Sukurkite paprastą žaidimą

Pradėkite nustatydami pagrindinį Pygame langą ir pridėdami žaidėjo objektą kartu su kai kuriomis platformomis. Taip pat galite atlikti pagrindinius žaidėjo judesius naudodami rodyklių klavišus arba naudojant jutiklinius įvestis.

Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

Sukurkite naują failą pavadinimu paprastas žaidimas.py ir pridėkite pagrindinio žaidimo kodą.

Pridėkite kelis judančius objektus

Dabar, kai turite paprastą žaidimą su žaidėjo objektu ir platformomis, pridėkite prie žaidimo kelis atsitiktinai judančius objektus. Šie objektai judės horizontaliai ekrane skirtingu greičiu.

instagram viewer

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

Žemiau yra išvestis:

Įdiekite atsitiktinių judesių algoritmą

Šiuo metu jūsų atsitiktiniai judantys objektai juda tik tiesia horizontalia linija. Kad jų judėjimas būtų labiau nenuspėjamas, galite pridėti atsitiktinio judėjimo algoritmą.

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

Priverskite objektus judėti link grotuvo

Norėdami suteikti žaidimui daugiau sudėtingumo, galite pristatyti keletą objektų, kurie juda link žaidėjo. Tai galite pasiekti apskaičiuodami kampą tarp objekto ir grotuvo ir atitinkamai pakoreguodami objekto padėtį.

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

Priverskite objektus judėti tik tada, kai žaidėjas patenka į aplinką

Vietoj to, kad visi objektai judėtų nuo pat pradžių, galite leisti objektams pradėti judėti tik tada, kai žaidėjas patenka į aplinką.

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

Susidūrimų aptikimas ir sąveika

Kad žaidimas būtų dar patrauklesnis, galite pridėkite žaidėjo ir judančių objektų susidūrimo aptikimą. Pavyzdžiui, galite pašalinti objektą iš ekrano, kai grotuvas su juo susiduria.

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

Įskaitant papildomas funkcijas

Atsitiktinai judančių objektų pridėjimas gali būti įvairių įdomių „Pygame“ funkcijų diegimo pagrindas. Štai keletas papildomų idėjų, padėsiančių pakelti žaidimą į kitą lygį:

Taškai ir progresas

Priskirkite objektams skirtingus balus pagal jų sudėtingumo lygį arba retumą. Galite sukurti ir rodyti balų sistemą kuri apdovanoja žaidėjus už sėkmingą naršymą per judančius objektus ar specialių daiktų rinkimą.

Įdiekite pažangos stebėjimo priemonę, kuri padidina žaidimo sunkumus, kai žaidėjai pasiekia aukštesnius balus, išlaikant jų įsitraukimą ir motyvaciją tobulėti.

Papildymai ir premijos

Sukurkite specialius objektus, kurie surenka žaidėjui laikinus pranašumus. Šie papildymai gali apimti padidintą greitį, neįveikiamumą ar net galimybę laikinai užšaldyti ar sunaikinti kitus objektus.

Būkite kūrybingi naudodamiesi šių galių efektais, kad žaidimo eiga būtų strateginė.

Priešo AI ir elgesys

Sukurkite sudėtingesnius priešo objektų judėjimo modelius, kad žaidėjams būtų sunkiau jų vengti. Įdiekite paprastus AI algoritmus, kad priešai protingai persekiotų žaidėją arba judėtų pagal suderintus modelius.

Skirtingas priešo elgesys sulaikys žaidėjus ant kojų ir neleis žaidimui tapti monotoniškam.

Kolekcionuojami daiktai ir apdovanojimai

Išsklaidykite kolekcionuojamus daiktus visame žaidimų pasaulyje. Tai gali būti monetos, brangakmeniai ar bet kokie kiti teminiai daiktai. Kai žaidėjas surenka tam tikrą skaičių šių daiktų, jis gali atrakinti naujus žaidimo lygius, simbolius ar net slaptas funkcijas.

Geriausia atsitiktinai judančių objektų pridėjimo praktika

Įtraukdami atsitiktinai judančius objektus į savo Pygame, vadovaudamiesi šia geriausia praktika padėsite sukurti gerai subalansuotą ir patobulintą žaidimo patirtį:

Subalansavimo sunkumai

Atsitiktinai judančių objektų greitis ir judėjimo modeliai turėtų būti kruopščiai subalansuoti, kad būtų galima išspręsti teisingą iššūkį. Stenkitės, kad objektai nejudėtų per greitai arba netvarkingai, nes tai gali nuvilti žaidėjus ir priversti žaidimą jaustis nesąžiningai.

Kita vertus, pernelyg lėtai judantys objektai gali padaryti žaidimą per lengvą ir mažiau patrauklų.

Našumo optimizavimas

Jei jūsų žaidime yra daug atsitiktinai judančių objektų arba sudėtingų judėjimo algoritmų, apsvarstykite galimybę optimizuoti kodą, kad pagerintumėte našumą. Naudokite efektyvias duomenų struktūras ir algoritmus susidūrimams ir judėjimo skaičiavimams valdyti.

Sumažinkite nereikalingus skaičiavimus, kad užtikrintumėte sklandų ir reaguojantį žaidimą, ypač senesniuose ar mažiau galinguose įrenginiuose.

Testavimas ir koregavimas

Kruopščiai išbandykite savo žaidimą įvairiais scenarijais, kad įsitikintumėte, jog atsitiktiniai judantys objektai tinkamai sąveikauja su kitais žaidimo elementais. Patikrinkite susidūrimus, sąveiką su žaidėju ir bet kokį specialų judėjimą.

Pakoreguokite objektų greitį, elgesį ir modelius, atsižvelgdami į žaidimo testavimo atsiliepimus, kad pasiektumėte optimalią žaidimo patirtį.

Atsitiktinumas su kontrole

Nors terminas „atsitiktinis“ vartojamas šiems judantiems objektams, visiškas atsitiktinumas ne visada gali būti pageidautinas. Apsvarstykite galimybę įtraukti kontroliuojamą atsitiktinumą, kai tam tikri judesiai ar modeliai yra apibrėžti tam tikroje galimybių diapazone arba rinkinyje.

Kontroliuojamas atsitiktinumas užtikrina, kad žaidimas išliktų sudėtingas ir malonus, netapdamas pernelyg chaotišku.

Kad žaidimai būtų patrauklesni atsitiktinai judančiais objektais

Atsitiktinai judantys objektai suteikia žaidimui netikėtumo ir nenuspėjamumo, todėl jis tampa dinamiškesnis ir patrauklesnis. Jie palaiko žaidėjus ant kojų, todėl jiems reikia greitų refleksų ir strateginio mąstymo. Be to, judesių ir sąveikos su šiais objektais įvairovė užtikrina, kad nėra dviejų vienodų žaidimo patirčių.