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 = 15tří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 + 10defon_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žitdefon_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 = 10tří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 + 10self.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žitdefon_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álenostrychlost = 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 + 10self.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.