Náhodně se pohybující objekty dělají hry vzrušující a náročnější. Naučte se, jak jej začlenit do svých projektů Pygame.

Pygame, oblíbená knihovna Pythonu pro vývoj her, vám umožňuje snadno vytvářet vzrušující a interaktivní hry. Jedním ze způsobů, jak vylepšit své výtvory Pygame, je přidání náhodně se pohybujících objektů. Těmito předměty mohou být překážky, nepřátelé, vylepšení nebo cokoli, co dodá vašemu hernímu světu dynamiku.

Vytvořte jednoduchou hru

Začněte nastavením základního okna Pygame a přidáním objektu hráče spolu s některými platformami. Základní pohyb hráče můžete realizovat také pomocí kláves se šipkami popř pomocí dotykových vstupů.

Kód použitý v tomto článku je k dispozici v tomto úložiště GitHub a můžete jej používat zdarma pod licencí MIT.

Vytvořte nový soubor s názvem jednoduchá hra.py a přidejte kód pro svou základní hru.

Přidat více pohyblivých objektů

Nyní, když máte jednoduchou hru s objektem hráče a platformami, přidejte do hry několik náhodně se pohybujících objektů. Tyto objekty se budou vodorovně pohybovat po obrazovce různými rychlostmi.

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

Níže je výstup:

Implementujte algoritmus náhodného pohybu

V současné době se vaše náhodně se pohybující objekty pohybují pouze v přímé vodorovné linii. Aby byl jejich pohyb nepředvídatelnější, můžete přidat algoritmus náhodného pohybu.

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

Pohybujte objekty směrem k přehrávači

Chcete-li přidat další složitost do hry, můžete představit některé objekty, které se pohybují směrem k hráči. Toho dosáhnete tak, že spočítáte úhel mezi objektem a hráčem a podle toho upravíte polohu objektu.

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

Pohybujte objekty pouze tehdy, když hráč vstoupí do okolí

Namísto toho, aby se všechny předměty pohybovaly od začátku, můžete povolit, aby se předměty začaly pohybovat pouze tehdy, když hráč vstoupí do jejich okolí.

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

Detekce kolize a interakce

Aby byla hra ještě poutavější, můžete přidat detekci kolize mezi přehrávačem a pohybujícími se objekty. Můžete například odstranit předmět z obrazovky, když s ním hráč narazí.

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

Včetně dalších funkcí

Přidávání náhodně se pohybujících objektů může sloužit jako základ pro implementaci různých zajímavých funkcí ve vaší hře Pygame. Zde je několik dalších nápadů, jak posunout vaši hru na další úroveň:

Bodování a postup

Přiřaďte různým předmětům různá skóre na základě jejich úrovně obtížnosti nebo vzácnosti. Můžete vytvořit a zobrazit bodovací systém která odměňuje hráče za úspěšnou navigaci pohybujícími se objekty nebo sbírání speciálních předmětů.

Implementujte sledovač pokroku, který zvyšuje obtížnost hry, když hráči dosahují vyšších skóre, udrží je v zapojení a motivaci se zlepšovat.

Power-ups a bonusy

Vytvářejte speciální předměty, které při sebrání poskytují hráči dočasné výhody. Tato vylepšení mohou zahrnovat zvýšenou rychlost, neporazitelnost nebo dokonce schopnost dočasně zmrazit nebo zničit jiné objekty.

Buďte kreativní s efekty těchto vylepšení a přidejte do hry strategickou hloubku.

Umělá inteligence a chování nepřátel

Navrhněte propracovanější pohybové vzorce pro nepřátelské objekty, aby byly pro hráče náročnější, než aby se jim vyhýbaly. Implementujte jednoduché algoritmy umělé inteligence, aby nepřátelé hráče inteligentně pronásledovali nebo se pohybovali v koordinovaných vzorcích.

Proměnlivé chování nepřátel udrží hráče ve střehu a zabrání tomu, aby se hra stala monotónní.

Sběratelské předměty a odměny

Rozhazujte sběratelské předměty po celém herním světě. Mohou to být mince, drahokamy nebo jiné tematické předměty. Když hráč nasbírá určitý počet těchto předmětů, může odemknout nové úrovně, postavy nebo dokonce tajné funkce ve hře.

Nejlepší postupy pro přidávání náhodně se pohybujících objektů

Při začleňování náhodně se pohybujících objektů do vaší hry Pygame vám dodržování těchto osvědčených postupů pomůže vytvořit dobře vyvážený a uhlazený herní zážitek:

Obtížnost vyvažování

Rychlost a pohybové vzorce náhodně se pohybujících objektů by měly být pečlivě vyváženy, aby poskytovaly spravedlivou výzvu. Vyhněte se tomu, aby se předměty pohybovaly příliš rychle nebo nevyzpytatelně, protože by to mohlo hráče frustrovat a hra bude působit nespravedlivě.

Na druhou stranu příliš pomalu se pohybující objekty mohou hru příliš zjednodušit a méně zaujmout.

Optimalizace pro výkon

Pokud vaše hra obsahuje velké množství náhodně se pohybujících objektů nebo složitých pohybových algoritmů, zvažte optimalizaci kódu pro zlepšení výkonu. Používejte efektivní datové struktury a algoritmy pro řešení kolizí a výpočtů pohybu.

Minimalizujte zbytečné výpočty, abyste zajistili plynulé a citlivé hraní, zejména na starších nebo méně výkonných zařízeních.

Testování a ladění

Důkladně otestujte svou hru pomocí různých scénářů, abyste se ujistili, že náhodně se pohybující objekty správně spolupracují s ostatními herními prvky. Testujte kolize, interakce s hráčem a jakékoli zvláštní pohybové chování.

Upravte rychlost, chování a vzorce objektů na základě zpětné vazby z testování, abyste dosáhli optimálního herního zážitku.

Náhodnost s ovládáním

Ačkoli se pro tyto pohybující se objekty používá termín „náhodný“, úplná náhodnost nemusí být vždy žádoucí. Zvažte začlenění řízené náhodnosti, kde jsou určité pohyby nebo vzorce definovány v rámci rozsahu nebo sady možností.

Řízená náhodnost zajišťuje, že hra zůstane náročná a zábavná, aniž by byla příliš chaotická.

Díky náhodně se pohybujícím objektům budou hry poutavější

Náhodně se pohybující objekty dodávají vaší hře prvek překvapení a nepředvídatelnosti, díky čemuž je dynamičtější a poutavější. Udržují hráče ve střehu, vyžadují rychlé reflexy a strategické myšlení. Různorodost pohybů a interakcí s těmito objekty navíc zajišťuje, že žádné dva herní zážitky nejsou stejné.