Učinite svoje arkadne igre još ugodnijim i uzbudljivijim dodavanjem nasumičnih pokretnih objekata.
Nasumični pokretni objekti mogu unijeti uzbuđenje i nepredvidljivost u igre. To ih čini privlačnijim i izazovnijim za igrače. Pythonova biblioteka Arcade pruža jednostavan i učinkovit način za uključivanje nasumičnih pokretnih objekata u vaše igre.
Stvorite jednostavnu igru
Prije početka provjerite imate li pip instaliran na vašem uređaju. Koristite ovu naredbu za instalaciju arkada knjižnica:
pip instaliraj arkadu
Nakon toga izradite prozor pomoću arkada. Prozor razreda i postavite boju pozadine na bijelu.
Kôd korišten u ovom članku dostupan je u ovom GitHub spremište i besplatan je za korištenje pod MIT licencom.
Postavite igračevu poziciju na sredinu zaslona vodoravno i dodajte malu udaljenost od vrha. Možete kontrolirati kretanje igrača pomoću tipki sa strelicama.
Evo koda za našu osnovnu igru:
uvoz arkada
SCREEN_WIDTH = 800
VISINA_EKRANA = 600
PLAYER_RADIUS = 15razredaMoja Igra(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
arcade.set_background_color (arcade.color. BIJELA)self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10defizvlačenje(sebe):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. PLAVA)defAžuriraj(sam, delta_vrijeme):
proćidefna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= 5
elif ključ == arkada.ključ. PRAVO:
self.player_x += 5
ako __ime__ == "__glavni__":
igra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arkada.run()
Dodavanje više objekata
Da biste svojoj igri dodali nasumične pokretne objekte, izradite popis za pohranjivanje položaja objekata i ažurirajte ih svaki okvir. Također možete koristiti duhovi kao objekti.
U svoj kod igre dodajte popis tzv objekti za pohranjivanje položaja nasumičnih pokretnih objekata. Nakon toga generirajte broj objekata (NUM_OBJECTS) s nasumičnim x i y koordinatama unutar granica zaslona. Objekti su nacrtani kao crveni krugovi pomoću arkada.nacrtaj_krug_ispunjen funkcija.
uvoz arkada
uvoz slučajanSCREEN_WIDTH = 800
VISINA_EKRANA = 600
PLAYER_RADIUS = 15
RADIJUS_OBJEKTA = 10
NUM_OBJEKATA = 10razredaMoja Igra(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
arcade.set_background_color (arcade.color. BIJELA)self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10self.objekti = []
za _ u raspon (NUM_OBJECTS):
x = random.randint(0, SCREEN_WIDTH)
y = random.randint(0, SCREEN_HEIGHT)
self.objects.append((x, y))defizvlačenje(sebe):
arcade.start_render()
arcade.draw_circle_filled (self.player_x, self.player_y, PLAYER_RADIUS, arcade.color. PLAVA)za obj u self.objekti:
x, y = obj
arcade.draw_circle_filled (x, y, OBJECT_RADIUS, arcade.color. CRVENA)defAžuriraj(sam, delta_vrijeme):
proćidefna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= 5
elif ključ == arkada.ključ. PRAVO:
self.player_x += 5
ako __ime__ == "__glavni__":
igra = MyGame (SCREEN_WIDTH, SCREEN_HEIGHT)
arkada.run()
Ispod je izlaz:
Implementacija algoritma slučajnog kretanja
Da bi se objekti kretali nasumično, ažurirajte njihove položaje u Ažuriraj metoda koja koristi algoritam nasumičnog kretanja.
Iterirajte kroz svaki objekt i generirajte nasumične vrijednosti za dx i dy, koji predstavlja promjenu x i y koordinata. Zatim ažurirajte položaj objekta dodavanjem ovih vrijednosti. Evo modificiranog koda:
defAžuriraj(sam, delta_vrijeme):
za ja u raspon (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)
Ispod je izlaz:
Objekti koji se kreću prema igraču
Da biste dodali više interakcije, pomaknite objekte prema igraču. To možete postići izračunavanjem vektora smjera između objekta i igrača i prilagođavanjem položaja objekta u skladu s tim.
U tu svrhu izračunajte razlike u x i y koordinatama između objekta i igrača. Normalizacijom ovih vrijednosti dobivate vektor smjera. Zatim pomnožite ovaj vektor s faktorom brzine (3 u ovom slučaju) i dodajte ga položaju objekta. Evo ažuriranog Ažuriraj metoda:
defAžuriraj(sam, delta_vrijeme):
za ja u raspon (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
udaljenost = math.sqrt (dx ** 2 + dy ** 2)
dx /= udaljenost
dy /= udaljenost
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
Ispod je izlaz:
Objekti se počnu kretati kada igrač uđe u okolinu
Da biste dodali dodatnu dinamiku, modificirajte kod tako da se objekti počnu kretati tek kada igrač uđe u njihovo okruženje. Dodajte šifra za kretanje igrača i definirati radijus unutar kojeg objekti postaju aktivni.
defAžuriraj(sam, delta_vrijeme):
za ja u raspon (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
udaljenost = math.sqrt (dx ** 2 + dy ** 2)
ako udaljenost < 100: # Po potrebi prilagodite radijus
dx /= udaljenost
dy /= udaljenost
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
Otkrivanje sudara i interakcija
Sada dodajte otkrivanje sudara između igrača i objekata i definirajte ponašanje kada dođe do sudara. Izmijenite Ažuriraj metoda rješavanja sudara:
defAžuriraj(sam, delta_vrijeme):
za ja u raspon (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
udaljenost = math.sqrt (dx ** 2 + dy ** 2)
ako udaljenost < PLAYER_RADIUS + OBJECT_RADIUS:
# ako je došlo do sudara, riješite to ovdje
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif udaljenost < 100:
dx /= udaljenost
dy /= udaljenost
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
Balansiranje slučajnosti
Kako biste stvorili uravnoteženo iskustvo igranja, važno je fino podesiti nasumično kretanje i stvaranje objekata. Evo nekoliko primjera kako možete prilagoditi kod da biste postigli bolju ravnotežu u svojoj igri:
Ograničenje maksimalne brzine
Kako biste spriječili prebrzo kretanje objekata, možete uvesti ograničenje maksimalne brzine. Izmijenite Ažuriraj metoda za uključivanje ograničenja brzine:
defAžuriraj(sam, delta_vrijeme):
za ja u raspon (NUM_OBJECTS):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
udaljenost = math.sqrt (dx ** 2 + dy ** 2)ako udaljenost < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif udaljenost < 100:
dx /= udaljenost
dy /= udaljenostbrzina = 3# Po potrebi prilagodite vrijednost brzine
dx = min (max (dx * brzina, -MAX_SPEED), MAX_SPEED)
dy = min (maks. (dy * brzina, -MAX_SPEED), MAX_SPEED)
x += dx
y += dy
self.objects[i] = (x, y)
Kontroliranje stope mriještenja
Također možete kontrolirati brzinu kojom se pojavljuju novi objekti u igri. Prilagodite kôd tako da uključi odgodu između stvaranja novih objekata:
uvoz vrijeme
razredaMoja Igra(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
arcade.set_background_color (arcade.color. BIJELA)self.player_x = SCREEN_WIDTH // 2
self.player_y = PLAYER_RADIUS + 10self.objekti = []
self.last_spawn_time = time.time()defAžuriraj(sam, delta_vrijeme):
# ovdje kontrolirajte brzinu mriještenja
ako time.time() - self.last_spawn_time > SPAWN_DELAY:
ako len (self.objects) < MAX_OBJECTS:
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
self.last_spawn_time = time.time()za ja u raspon (len (self.objekti)):
x, y = self.objects[i]
dx = self.player_x - x
dy = self.player_y - y
udaljenost = math.sqrt (dx ** 2 + dy ** 2)ako udaljenost < PLAYER_RADIUS + OBJECT_RADIUS:
self.objects.pop (i)
self.objects.append((random.randint(0, SCREEN_WIDTH), random.randint(0, SCREEN_HEIGHT)))
elif udaljenost < 100:
dx /= udaljenost
dy /= udaljenost
x += dx * 3
y += dy * 3
self.objects[i] = (x, y)
Podesite SPAWN_DELAY i MAX_OBJECTS vrijednosti kako biste pronašli pravu ravnotežu za svoju igru. Dulja odgoda ili manji maksimalni broj objekata učinit će igru manje gužvom. Dok će kraća odgoda ili veći maksimum povećati poteškoće.
Učinite igre zabavnijima koristeći pokretne objekte
Dodavanje nasumičnih pokretnih objekata u igrice može značajno poboljšati cjelokupno iskustvo. Oni uvode nepredvidivost i izazov, čineći igru privlačnijom i dinamičnijom. Igrači će se morati prilagoditi i brzo reagirati kako bi izbjegli sudare ili uhvatili predmete, a to će pružiti osjećaj uzbuđenja i postignuća.