Urobte svoje arkádové hry ešte zábavnejšie a vzrušujúcejšie pridaním náhodne sa pohybujúcich objektov.
Náhodné pohybujúce sa objekty môžu do hier priniesť vzrušenie a nepredvídateľnosť. Vďaka tomu sú pre hráčov pútavejšie a náročnejšie. Knižnica Arcade v Pythone poskytuje jednoduchý a efektívny spôsob, ako začleniť náhodne sa pohybujúce objekty do vašich hier.
Vytvorte jednoduchú hru
Pred začatím sa uistite, že máte pip nainštalovaný na vašom zariadení. Tento príkaz použite na inštaláciu pasáž knižnica:
arkáda na inštaláciu pipu
Potom vytvorte okno pomocou pasáž. okno triedy a nastavte farbu pozadia na bielu.
Kód použitý v tomto článku je dostupný v tomto úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.
Nastavte pozíciu prehrávača do stredu obrazovky horizontálne a pridajte malú vzdialenosť zhora. Pohyb hráča môžete ovládať pomocou šípok.
Tu je kód pre našu základnú hru:
importovať pasáž
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15triedaMyGame(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
arcade.set_background_color (arcade.color. BIELY)self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10defon_draw(ja):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. MODRÁ)defaktualizovať(self, delta_time):
prejsťdefon_key_press(ja, kľúč, modifikátory):
ak kľúč == arcade.key. VĽAVO:
self.player_x -= 5
elif kľúč == arcade.key. SPRÁVNY:
self.player_x += 5
ak __meno__ == "__Hlavná__":
hra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
Pridanie viacerých objektov
Ak chcete do hry pridať náhodne sa pohybujúce objekty, vytvorte zoznam na uloženie pozícií objektov a aktualizujte ich v každom snímku. Môžete tiež použiť škriatky ako predmety.
Do kódu hry pridajte zoznam s názvom predmety na uloženie pozícií náhodne sa pohybujúcich objektov. Potom vygenerujte počet objektov (NUM_OBJECTS) s náhodnými súradnicami x a y v rámci hraníc obrazovky. Objekty sú nakreslené ako červené kruhy pomocou arcade.draw_circle_filled funkciu.
importovať pasáž
importovať náhodnýSCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_RADIUS = 15
OBJECT_RADIUS = 10
NUM_OBJECTS = 10triedaMyGame(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
arcade.set_background_color (arcade.color. BIELY)self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10self.objects = []
pre _ v rozsah (NUM_OBJECTS):
x = random.randint(0, SCREEN_WIDTH)
y = random.randint(0, SCREEN_HEIGHT)
self.objects.append((x, y))defon_draw(ja):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. MODRÁ)pre obj v vlastné.objekty:
x, y = obj
arcade.draw_circle_filled (x, y, OBJECT_RADIUS, arcade.color. ČERVENÁ)defaktualizovať(self, delta_time):
prejsťdefon_key_press(ja, kľúč, modifikátory):
ak kľúč == arcade.key. VĽAVO:
self.player_x -= 5
elif kľúč == arcade.key. SPRÁVNY:
self.player_x += 5
ak __meno__ == "__Hlavná__":
hra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
Nižšie je výstup:
Implementácia algoritmu náhodného pohybu
Ak chcete, aby sa objekty pohybovali náhodne, aktualizujte ich polohu v aktualizovať metóda využívajúca algoritmus náhodného pohybu.
Iterujte každý objekt a generujte preň náhodné hodnoty dx a D Y, ktorá predstavuje zmenu súradníc x a y. Potom aktualizujte polohu objektu pridaním týchto hodnôt. Tu je upravený kód:
defaktualizovať(self, delta_time):
pre 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)
Nižšie je výstup:
Objekty pohybujúce sa smerom k hráčovi
Ak chcete pridať viac interakcie, posuňte objekty smerom k prehrávaču. Môžete to dosiahnuť tak, že vypočítate smerový vektor medzi objektom a prehrávačom a podľa toho upravíte polohu objektu.
Na tento účel vypočítajte rozdiely v súradniciach x a y medzi objektom a prehrávačom. Normalizáciou týchto hodnôt získate smerový vektor. Potom vynásobte tento vektor faktorom rýchlosti (v tomto prípade 3) a pridajte ho k polohe objektu. Tu je aktualizácia aktualizovať metóda:
defaktualizovať(self, delta_time):
pre i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdialenosť = math.sqrt (dx ** 2 + dy ** 2)
dx /= vzdialenosť
dy /= vzdialenosť
x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)
Nižšie je výstup:
Objekty sa začnú pohybovať, keď hráč vstúpi do okolia
Ak chcete pridať ďalšiu dynamiku, upravte kód tak, aby sa objekty začali pohybovať až vtedy, keď hráč vstúpi do ich okolia. Pridajte kód pre pohyb hráča a definujte polomer, v rámci ktorého sa objekty stanú aktívnymi.
defaktualizovať(self, delta_time):
pre i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdialenosť = math.sqrt (dx ** 2 + dy ** 2)
ak vzdialenosť < 100: # Podľa potreby upravte polomer
dx /= vzdialenosť
dy /= vzdialenosť
x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)
Detekcia a interakcia kolízie
Teraz pridajte detekciu kolízie medzi prehrávačom a objektmi a definujte správanie, keď dôjde ku kolízii. Upravte aktualizovať spôsob riešenia kolízií:
defaktualizovať(self, delta_time):
pre i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdialenosť = math.sqrt (dx ** 2 + dy ** 2)
ak vzdialenosť < PLAYER_RADIUS + OBJECT_RADIUS:
# ak došlo ku kolízii, vyriešte ju tu
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif vzdialenosť < 100:
dx /= vzdialenosť
dy /= vzdialenosť
x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)
Vyvažovanie náhodnosti
Na vytvorenie vyváženého herného zážitku je dôležité doladiť náhodný pohyb a spawnovanie predmetov. Tu je niekoľko príkladov, ako môžete upraviť kód, aby ste dosiahli lepšiu rovnováhu vo svojej hre:
Obmedzenie maximálnej rýchlosti
Ak chcete zabrániť tomu, aby sa predmety pohybovali príliš rýchlo, môžete zaviesť obmedzenie maximálnej rýchlosti. Upravte aktualizovať metóda na zahrnutie rýchlostných obmedzení:
defaktualizovať(self, delta_time):
pre i v rozsah (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdialenosť = math.sqrt (dx ** 2 + dy ** 2)ak vzdialenosť < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif vzdialenosť < 100:
dx /= vzdialenosť
dy /= vzdialenosťrýchlosť = 3# Podľa potreby upravte hodnotu rýchlosti
dx = min (max (dx * rýchlosť, -MAX_SPEED), MAX_SPEED)
dy = min (max (dy * rýchlosť, -MAX_SPEED), MAX_SPEED)
x + = dx
y + = dy
self.objects[i] = (x, y)
Riadenie miery výskytu
Môžete tiež ovládať rýchlosť, akou sa v hre vytvárajú nové objekty. Upravte kód tak, aby zahŕňal oneskorenie medzi vytváraním nových objektov:
importovať čas
triedaMyGame(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
arcade.set_background_color (arcade.color. BIELY)self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10self.objects = []
self.last_spawn_time = time.time()defaktualizovať(self, delta_time):
# tu môžete ovládať rýchlosť neresenia
ak time.time() - self.last_spawn_time > SPAWN_DELAY:
ak len (self.objects) < MAX_OBJECTS:
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
self.last_spawn_time = time.time()pre i v rozsah (len (self.objects)):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
vzdialenosť = math.sqrt (dx ** 2 + dy ** 2)ak vzdialenosť < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif vzdialenosť < 100:
dx /= vzdialenosť
dy /= vzdialenosť
x += dx * 3
y + = dy * 3
self.objects[i] = (x, y)
Upravte SPAWN_DELAY a MAX_OBJECTS hodnoty, aby ste našli správnu rovnováhu pre vašu hru. Väčšie oneskorenie alebo menší maximálny počet predmetov spôsobí, že hra bude menej preplnená. Zatiaľ čo kratšie oneskorenie alebo väčšie maximum zvýšia náročnosť.
Urobte hry zábavnejšie pomocou pohyblivých predmetov
Pridávanie náhodných pohybujúcich sa objektov do hier môže výrazne zlepšiť celkový zážitok. Predstavujú nepredvídateľnosť a výzvu, vďaka čomu je hra pútavejšia a dynamickejšia. Hráči sa budú musieť prispôsobiť a rýchlo reagovať, aby sa vyhli kolíziám alebo zachytili predmety, čo im poskytne pocit vzrušenia a úspechu.