A véletlenszerűen mozgó tárgyak izgalmasabbá és nagyobb kihívást jelentenek a játékban. Tanuld meg, hogyan építheted be Pygame projektjeidbe.

A Pygame, egy népszerű Python-könyvtár játékfejlesztéshez, lehetővé teszi izgalmas és interaktív játékok könnyű létrehozását. A Pygame-alkotások fejlesztésének egyik módja véletlenszerű mozgó objektumok hozzáadása. Ezek az objektumok lehetnek akadályok, ellenségek, erők, vagy bármi, ami dinamizálja játékvilágát.

Hozzon létre egy egyszerű játékot

Kezdje egy alap Pygame ablak beállításával, és adjon hozzá egy játékos objektumot néhány platformhoz. Alapvető játékosmozgást is megvalósíthat a nyílbillentyűkkel, ill érintéses bemenetek segítségével.

A cikkben használt kód itt érhető el GitHub adattár és az MIT licence alapján ingyenesen használható.

Hozzon létre egy új nevű fájlt simple-game.py és add hozzá az alapjátékod kódját.

Több mozgó objektum hozzáadása

Most, hogy van egy egyszerű játékod egy játékos objektummal és platformokkal, adj hozzá több véletlenszerűen mozgó objektumot a játékhoz. Ezek az objektumok vízszintesen, különböző sebességgel mozognak a képernyőn.

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

Alább látható a kimenet:

Véletlenszerű mozgási algoritmus megvalósítása

Jelenleg a véletlenszerűen mozgó objektumok csak egyenes vízszintes vonalban mozognak. A mozgásuk kiszámíthatatlanabbá tétele érdekében véletlenszerű mozgási algoritmust adhat hozzá.

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

Az objektumok mozgatása a lejátszó felé

A játék bonyolultabbá tétele érdekében bevezethet néhány tárgyat, amelyek a játékos felé mozognak. Ezt úgy érheti el, hogy kiszámítja a tárgy és a lejátszó közötti szöget, és ennek megfelelően állítja be a tárgy helyzeté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()

Csak akkor mozgassa az objektumokat, ha a játékos belép a környezetbe

Ahelyett, hogy az összes tárgyat a kezdettől fogva mozgatná, engedélyezheti, hogy az objektumok csak akkor induljanak el, amikor a játékos belép a környezetébe.

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

Ütközésészlelés és interakció

Ha még vonzóbbá szeretné tenni a játékot, megteheti ütközésérzékelés hozzáadása a lejátszó és a mozgó tárgyak között. Például eltávolíthat egy tárgyat a képernyőről, amikor a lejátszó ütközik vele.

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

Kiegészítő funkciókkal együtt

Véletlenszerű mozgó objektumok hozzáadása alapjául szolgálhat a Pygame különféle izgalmas funkcióinak megvalósításához. Íme néhány további ötlet, amelyekkel a játékot a következő szintre emelheti:

Pontozás és előrehaladás

Különböző pontszámokat rendelhet az objektumokhoz nehézségi szintjük vagy ritkaságuk alapján. Létrehozhat és pontozási rendszert jelenít meg amely megjutalmazza a játékosokat a mozgó objektumok közötti sikeres navigálásért vagy a különleges tárgyak összegyűjtéséért.

Valósítson meg egy haladáskövetőt, amely megnöveli a játék nehézségeit, ahogy a játékosok magasabb pontszámot érnek el, így elköteleződnek és motiválják őket a fejlődésre.

Erősítések és bónuszok

Hozz létre speciális objektumokat, amelyek összegyűjtéskor átmeneti előnyöket biztosítanak a játékosnak. Ezek a teljesítmények magukban foglalhatják a megnövelt sebességet, a legyőzhetetlenséget, vagy akár más tárgyak ideiglenes lefagyasztását vagy megsemmisítését is.

Légy kreatív ezeknek a teljesítménynöveléseknek a hatásaival, hogy stratégiai mélységet adj a játékmenethez.

Ellenséges mesterséges intelligencia és viselkedés

Tervezz kifinomultabb mozgásmintákat az ellenséges tárgyakhoz, hogy nagyobb kihívást jelentsenek a játékosok elkerülésére. Egyszerű mesterséges intelligencia-algoritmusokat valósítson meg, hogy az ellenség intelligens módon üldözze a játékost, vagy összehangolt minták szerint mozogjon.

A különböző ellenséges viselkedések résen tartják a játékosokat, és megakadályozzák, hogy a játék monotonná váljon.

Gyűjtemények és jutalmak

Szórj szét gyűjthető tárgyakat a játékvilágban. Ezek lehetnek érmék, drágakövek vagy bármilyen más tematikus tárgy. Amikor a játékos összegyűjt bizonyos számú tárgyat, új szinteket, karaktereket vagy akár titkos funkciókat nyithat meg a játékban.

Bevált gyakorlatok véletlenszerű mozgó objektumok hozzáadásához

Amikor véletlenszerűen mozgó objektumokat épít be Pygame-be, az alábbi bevált gyakorlatok követése segít egy kiegyensúlyozott és kifinomult játékélmény megteremtésében:

Kiegyensúlyozási nehézség

A véletlenszerűen mozgó objektumok sebességét és mozgási mintáit gondosan ki kell egyensúlyozni, hogy megfelelő kihívást jelentsenek. Kerülje el, hogy a tárgyak túl gyorsan vagy szabálytalanul mozogjanak, mert ez frusztrálhatja a játékosokat, és igazságtalanná teheti a játékot.

Másrészt a túlságosan lassan mozgó tárgyak túl könnyűvé és kevésbé vonzóvá tehetik a játékot.

Optimalizálás a teljesítmény érdekében

Ha játéka nagyszámú véletlenszerűen mozgó objektumot vagy összetett mozgási algoritmust tartalmaz, fontolja meg a kód optimalizálását a teljesítmény javítása érdekében. Használjon hatékony adatstruktúrákat és algoritmusokat az ütközések és mozgásszámítások kezelésére.

Csökkentse minimálisra a szükségtelen számításokat a gördülékeny és érzékeny játékmenet biztosítása érdekében, különösen régebbi vagy kevésbé erős eszközökön.

Tesztelés és módosítás

Alaposan tesztelje a játékot különböző forgatókönyvekkel, hogy megbizonyosodjon arról, hogy a véletlenszerűen mozgó objektumok megfelelően kölcsönhatásba lépnek a játék többi elemével. Tesztelje az ütközéseket, a játékossal való interakciókat és bármilyen speciális mozgási viselkedést.

A játéktesztelés visszajelzései alapján állítsa be az objektumok sebességét, viselkedését és mintáit az optimális játékélmény elérése érdekében.

Véletlenszerűség ellenőrzéssel

Bár a "véletlenszerű" kifejezést használják ezekre a mozgó objektumokra, a teljes véletlenszerűség nem mindig kívánatos. Fontolja meg a szabályozott véletlenszerűség beépítését, ahol bizonyos mozgások vagy minták a lehetőségek tartományán vagy halmazán belül vannak meghatározva.

A szabályozott véletlenszerűség biztosítja, hogy a játék kihívást és élvezetes maradjon anélkül, hogy túl kaotikussá válna.

A játékok vonzóbbá tétele véletlenszerűen mozgó tárgyakkal

A véletlenszerűen mozgó tárgyak meglepetést és kiszámíthatatlanságot kölcsönöznek a játéknak, dinamikusabbá és vonzóbbá téve azt. Lábukon tartják a játékosokat, gyors reflexeket és stratégiai gondolkodást igényelnek. Ezenkívül a mozgások és az ezekkel a tárgyakkal való interakciók sokfélesége biztosítja, hogy ne legyen két egyforma játékélmény.