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.
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()
Ž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_widthupdate_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 // 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()
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 = 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()
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_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()
Į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ų.