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 = 15

razredaMoja Igra(arkada. Prozor):

instagram viewer

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 + 10

defizvlač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ći

defna_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čajan

SCREEN_WIDTH = 800
VISINA_EKRANA = 600
PLAYER_RADIUS = 15
RADIJUS_OBJEKTA = 10
NUM_OBJEKATA = 10

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 + 10

self.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ći

defna_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 /= udaljenost

brzina = 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 + 10

self.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.