Udělejte své arkádové hry ještě zábavnější a vzrušující přidáním náhodně se pohybujících objektů.

Náhodně se pohybující objekty mohou do her přinést vzrušení a nepředvídatelnost. Díky tomu jsou pro hráče poutavější a náročnější. Knihovna Arcade v Pythonu poskytuje jednoduchý a efektivní způsob, jak do vašich her začlenit náhodně se pohybující objekty.

Vytvořte jednoduchou hru

Než začnete, ujistěte se, že máte pip nainstalovaný na vašem zařízení. Tento příkaz použijte k instalaci pasáž knihovna:

pip instalační arkáda

Poté vytvořte okno pomocí pasáž. Okno třídy a nastavte barvu pozadí na bílou.

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.

Nastavte pozici hráče na střed obrazovky vodorovně a přidejte malou vzdálenost od horní části. Pohyb hráče můžete ovládat pomocí kláves se šipkami.

Zde je kód pro naši základní hru:

import pasáž

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15

třídaMyGame(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
arcade.set_background_color (arcade.color. BÍLÝ)

instagram viewer

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

defon_draw(já):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. MODRÝ)

defAktualizace(self, delta_time):
složit

defon_key_press(vlastní, klíč, modifikátory):
-li klíč == arcade.key. VLEVO, ODJET:
self.player_x -= 5
elif klíč == arcade.key. ŽE JO:
self.player_x += 5

-li __jméno__ == "__hlavní__":
hra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

Přidání více objektů

Chcete-li do hry přidat náhodně se pohybující objekty, vytvořte seznam, do kterého budou uloženy pozice objektů, a aktualizujte je v každém snímku. Můžete také použít skřítci jako předměty.

Do kódu hry přidejte seznam s názvem objektů pro uložení pozic náhodně se pohybujících objektů. Poté vygenerujte počet objektů (NUM_OBJECTS) s náhodnými souřadnicemi x a y uvnitř hranic obrazovky. Objekty jsou nakresleny jako červené kruhy pomocí arcade.draw_circle_filled funkce.

import pasáž
import náhodný

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15
OBJECT_RADIUS = 10
NUM_OBJECTS = 10

třídaMyGame(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
arcade.set_background_color (arcade.color. BÍLÝ)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
pro _ v rozsah (NUM_OBJECTS):
x = random.randint(0, SCREEN_WIDTH)
y = random.randint(0, SCREEN_HEIGHT)
self.objects.append((x, y))

defon_draw(já):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. MODRÝ)

pro obj v sebe.objekty:
x, y = obj
arcade.draw_circle_filled (x, y, OBJECT_RADIUS, arcade.color. ČERVENÉ)

defAktualizace(self, delta_time):
složit

defon_key_press(vlastní, klíč, modifikátory):
-li klíč == arcade.key. VLEVO, ODJET:
self.player_x -= 5
elif klíč == arcade.key. ŽE JO:
self.player_x += 5

-li __jméno__ == "__hlavní__":
hra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

Níže je výstup:

Implementace algoritmu náhodného pohybu

Chcete-li, aby se objekty pohybovaly náhodně, aktualizujte jejich polohu v Aktualizace metoda využívající algoritmus náhodného pohybu.

Iterujte každý objekt a generujte pro něj náhodné hodnoty dx a dy, představující změnu souřadnic x a y. Poté aktualizujte polohu objektu přidáním těchto hodnot. Zde je upravený kód:

defAktualizace(self, delta_time):
pro i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = random.randint(-5, 5)
dy = random.randint(-5, 5)
x += dx
y + = dy
self.objects[i] = (x, y)

Níže je výstup:

Objekty pohybující se směrem k hráči

Chcete-li přidat další interakci, posuňte objekty směrem k hráči. Toho dosáhnete výpočtem směrového vektoru mezi objektem a přehrávačem a podle toho upravíte polohu objektu.

Za tímto účelem vypočítejte rozdíly v souřadnicích x a y mezi objektem a hráčem. Normalizací těchto hodnot získáte směrový vektor. Poté vynásobte tento vektor faktorem rychlosti (v tomto případě 3) a přidejte jej k pozici objektu. Zde je aktualizované Aktualizace metoda:

defAktualizace(self, delta_time):
pro i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdálenost = math.sqrt (dx ** 2 + dy ** 2)
dx /= vzdálenost
dy /= vzdálenost
x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)

Níže je výstup:

Objekty se začnou pohybovat, když hráč vstoupí do okolí

Chcete-li přidat další dynamiku, upravte kód tak, aby se objekty začaly pohybovat, až když hráč vstoupí do jejich okolí. Přidat kód pro pohyb hráče a definovat poloměr, ve kterém se objekty stanou aktivními.

defAktualizace(self, delta_time):
pro i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdálenost = math.sqrt (dx ** 2 + dy ** 2)

-li vzdálenost < 100: # Podle potřeby upravte poloměr
dx /= vzdálenost
dy /= vzdálenost
x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)

Detekce kolize a interakce

Nyní přidejte detekci kolizí mezi hráčem a objekty a definujte chování, když ke kolizi dojde. Upravte Aktualizace způsob řešení kolizí:

defAktualizace(self, delta_time):
pro i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdálenost = math.sqrt (dx ** 2 + dy ** 2)

-li vzdálenost < PLAYER_RADIUS + OBJECT_RADIUS:
# pokud došlo ke kolizi, vyřešte ji zde
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))

elif vzdálenost < 100:
dx /= vzdálenost
dy /= vzdálenost
x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)

Vyvažování náhodnosti

Chcete-li vytvořit vyvážený herní zážitek, je důležité doladit náhodný pohyb a spawnování objektů. Zde je několik příkladů, jak můžete upravit kód, abyste dosáhli lepší rovnováhy ve hře:

Omezení maximální rychlosti

Chcete-li zabránit příliš rychlému pohybu objektů, můžete zavést maximální rychlostní limit. Upravte Aktualizace způsob, jak zahrnout omezení rychlosti:

defAktualizace(self, delta_time):
pro i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdálenost = math.sqrt (dx ** 2 + dy ** 2)

-li vzdálenost < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif vzdálenost < 100:
dx /= vzdálenost
dy /= vzdálenost

rychlost = 3# Podle potřeby upravte hodnotu rychlosti
dx = min (max (dx * rychlost, -MAX_SPEED), MAX_SPEED)
dy = min (max (dy * rychlost, -MAX_SPEED), MAX_SPEED)

x += dx
y + = dy
self.objects[i] = (x, y)

Ovládání rychlosti spawnování

Můžete také ovládat rychlost, jakou se ve hře objevují nové objekty. Upravte kód tak, aby zahrnoval prodlevu mezi vytvářením nových objektů:

import čas

třídaMyGame(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
arcade.set_background_color (arcade.color. BÍLÝ)

self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10

self.objects = []
self.last_spawn_time = time.time()

defAktualizace(self, delta_time):
# zde můžete ovládat rychlost tření
-li time.time() - self.last_spawn_time > SPAWN_DELAY:
-li len (self.objects) < MAX_OBJECTS:
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
self.last_spawn_time = time.time()

pro i v rozsah (len (self.objects)):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdálenost = math.sqrt (dx ** 2 + dy ** 2)

-li vzdálenost < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif vzdálenost < 100:
dx /= vzdálenost
dy /= vzdálenost

x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)

Upravte SPAWN_DELAY a MAX_OBJECTS hodnoty, abyste našli správnou rovnováhu pro vaši hru. Delší prodleva nebo menší maximální počet objektů způsobí, že hra bude méně přeplněná. Zatímco kratší zpoždění nebo větší maximum zvýší obtížnost.

Udělejte hry zábavnější pomocí pohyblivých objektů

Přidání náhodně se pohybujících objektů do her může výrazně zlepšit celkový zážitek. Představují nepředvídatelnost a výzvu, díky čemuž je hra poutavější a dynamičtější. Hráči se budou muset přizpůsobit a rychle reagovat, aby se vyhnuli kolizím nebo zachytili předměty, což jim poskytne pocit vzrušení a úspěchu.