Pythonova biblioteka Arcade nudi jednostavan i učinkovit način za implementaciju razina igre u vaše projekte.
Razvoj igrica je uzbudljiv i kreativan proces koji vam omogućuje da oživite svoje maštovite ideje. Prilikom dizajniranja igre, jedan od ključnih elemenata koji može uvelike poboljšati iskustvo igrača je implementacija razina igre.
Razine pružaju strukturu, napredak i izazove, dajući igračima osjećaj postignuća i angažmana dok prolaze kroz različite faze 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
Napravite osnovnu igru u kojoj se igrač može kretati lijevo i desno.
Kôd korišten u ovom članku dostupan je u ovom GitHub spremište i besplatan je za korištenje pod MIT licencom.
Iskoristite mogućnosti biblioteke Arcade za rukovanje korisničkim unosom i ažurirajte stanje igre u skladu s tim. Stvorite novu datoteku pod nazivom jednostavna igra.py i dodajte donji kod:
uvoz arkada
SCREEN_WIDTH = 800
VISINA_EKRANA = 600razredaMoja Igra(arkada. Prozor):
def__u tome__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "moja igra")
arcade.set_background_color (arcade.color. BIJELA)
self.player_x = SCREEN_WIDTH // 2defizvlačenje(sebe):
arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arkada.boja. PLAVA)defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= 10
elif ključ == arkada.ključ. PRAVO:
self.player_x += 10defna_puštanje_ključa(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO ili ključ == arkada.ključ. PRAVO:
proćidefglavni():
igra = Moja igra()
arkada.run()
ako __ime__ == "__glavni__":
glavni()
Ispod je izlaz:
Stvorite više razina
Sada proširite igru dodavanjem više razina. Svaka razina će imati svoje jedinstvene karakteristike, pružajući različite izazove za igrača. Možete izmijeniti prethodni kod da biste uključili dodatne razine. Evo primjera:
razredaLevelOne:
def__u tome__(sebe):
self.player_x = SCREEN_WIDTH // 2defAžuriraj(sebe):
proćidefcrtati(sebe):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arkada.boja. PLAVA)razredaDruga razina:
def__u tome__(sebe):
self.player_x = SCREEN_WIDTH // 2defAžuriraj(sebe):
proćidefcrtati(sebe):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arkada.boja. CRVENA)razredaMoja Igra(arkada. Prozor):
def__u tome__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "moja igra")
arcade.set_background_color (arcade.color. BIJELA)
self.levels = [LevelOne(), LevelTwo()]
sebe.trenutni_nivo = 0defizvlačenje(sebe):
arcade.start_render()
self.levels[self.current_level].draw()defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
samo.razine[sebe.trenutna_razina].igrač_x -= 10
elif ključ == arkada.ključ. PRAVO:
samo.razine[sebe.trenutna_razina].igrač_x += 10defna_puštanje_ključa(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO ili ključ == arkada.ključ. PRAVO:
proćidefAžuriraj(sam, delta_vrijeme):
self.levels[self.current_level].update()defglavni():
igra = Moja igra()
arkada.run()
ako __ime__ == "__glavni__":
glavni()
Prijelaz između razina
Da biste stvorili gladak prijelaz između razina, otkrijte kada igrač prijeđe određenu granicu. Možeš pratiti kretanje igrača, a kada igrač prijeđe granicu, možete prijeći na sljedeću razinu. Stvorite novu datoteku pod nazivom prijelaz-između-razina.py i dodajte kod sa sljedećim ažuriranjima:
razredaMoja Igra(arkada. Prozor):
# ...defAžuriraj(sam, delta_vrijeme):
self.levels[self.current_level].update()# Provjerite je li igrač prešao granicu
ako samo.razine[sebe.trenutna_razina].igrač_x < 0:
sam.trenutni_nivo += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = SCREEN_WIDTH
elif self.levels[self.current_level].player_x > SCREEN_WIDTH:
sam.trenutni_nivo += 1
self.current_level %= len (self.levels)
samo.razine[sebe.trenutna_razina].igrač_x = 0
# ...
Ispod je izlaz:
Uključujući dodatne značajke
Kako bi vaše razine igre bile privlačnije, možete uključiti dodatne značajke kao što su pojačanja i ciljevi.
Ciljevi
Ciljevi daju određene ciljeve koje igrač mora postići unutar razine. Dodaju osjećaj svrhe i napretka. Evo primjera implementacije objektivne značajke:
razredaCilj:
def__u tome__(ja, x, y):
sebe.x = x
self.y = y
sam.radijus = 20defcrtati(sebe):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ZELENO)razredaLevelOne:
def__u tome__(sebe):
self.objective = Cilj(600, 400)
# ...defAžuriraj(sebe):
# Provjerite je li igrač postigao cilj
ako arcade.check_for_collision (self.player, self.objective):
self.complete_objective()defcrtati(sebe):
self.objective.draw()
# ...
defdovršiti_cilj(sebe):
# Kod za rješavanje dovršetka cilja
proći
Kolekcionarstvo
Kolekcionarski predmeti su predmeti ili bonusi koje igrač može skupljati kroz razine. Evo primjera implementacije kolekcionarske značajke:
razredaSakupljivo:
def__u tome__(ja, x, y):
sebe.x = x
self.y = y
sam.radijus = 10
self.is_collected = lažnodefcrtati(sebe):
akone self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. NARANČA)defprikupiti(sebe):
self.is_collected = Pravi
# Kod za upravljanje učinkom kolekcionarskog predmeta na igračarazredaLevelOne:
def__u tome__(sebe):
self.collectible = Kolekcionar(300, 300)
# ...defAžuriraj(sebe):
# Provjerite preuzima li igrač predmet
ako arcade.check_for_collision (self.player, self.collectible):
self.collectible.collect()
defcrtati(sebe):
self.collectible.draw()
# ...
Prepreke
Prepreke mogu biti statični objekti ili pokretni entiteti koji ometaju put igrača. Oni zahtijevaju od igrača da osmisli strategiju i pronađe načine da ih prevlada. Evo primjera implementacije značajke prepreka:
razredaZapreka:
def__u tome__(ja, x, y, širina, visina):
sebe.x = x
self.y = y
self.width = širina
sam.visina = visinadefcrtati(sebe):
arcade.draw_rectangle_filled (self.x, self.y, self.width, self.height, arcade.color. SIVA)
razredaLevelOne:
def__u tome__(sebe):
self.obstacles = [Prepreka(400, 200, 100, 50), Zapreka(600, 500, 80, 120)]
# ...
pojačanja
Pojačanja mogu poboljšati igračeve sposobnosti ili pružiti privremene prednosti. Evo primjera implementacije značajke uključivanja:
razredaUključiti:
def__u tome__(ja, x, y):
sebe.x = x
self.y = y
sam.radijus = 10
self.je_aktivan = Pravidefcrtati(sebe):
ako self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ŽUTA BOJA)defaktivirati_pojačavanje(sebe):
self.je_aktivan = Pravidefdeaktiviraj_power_up(sebe):
self.je_aktivan = lažnorazredaLevelOne:
def__u tome__(sebe):
self.power_up = PowerUp(200, 200)
# ...defAžuriraj(sebe):
# Provjerite sudara li se igrač s pojačanjem
ako arcade.check_for_collision (self.player, self.power_up):
self.player.activate_power_up()
self.power_up.deactivate_power_up()
defcrtati(sebe):
self.power_up.draw()
# ...
Najbolji primjeri iz prakse za dizajn razina
Dizajn razine igra ključnu ulogu u stvaranju privlačnih i ugodnih iskustava igranja. Evo nekoliko najboljih praksi koje treba uzeti u obzir prilikom dizajniranja razina za vašu igru:
Jasni ciljevi
Svaka razina treba imati jasan cilj koji igrač treba postići. Bilo da se radi o dosezanju određene lokacije, porazu neprijatelja ili rješavanju zagonetki, cilj treba biti dobro definiran i priopćen igraču.
Postupna krivulja težine
Dizajnirajte razine s postupnim povećanjem težine kako biste omogućili glatku krivulju učenja za igrače. Počnite s jednostavnijim izazovima i postupno uvodite nove mehanike ili prepreke kako igrač napreduje. Iznenadni porast težine može frustrirati igrače, stoga je važno održavati uravnoteženo napredovanje.
Vizualna jasnoća
Osigurajte da dizajn razine i vizualni elementi jasno prenose važne informacije igraču. Uključivanje glazbe i zvučnih efekata također može prenijeti ključne tragove i pružiti bitne informacije igraču.
Testiranje i ponavljanje
Redovito testiranje igranja ključno je za usavršavanje i poboljšanje dizajna razina. Prikupite povratne informacije od igrača i promatrajte njihova iskustva kako biste identificirali područja koja mogu zahtijevati prilagodbe. Ponovite svoj dizajn razine na temelju ovih povratnih informacija kako biste stvorili ugodniju i uravnoteženiju igru.
Uravnotežite nagradu i izazov
Nagradite igrače za svladavanje izazova na vašim razinama. To se može postići pojačanjima, kolekcionarskim predmetima, otključavanjem novih područja ili napredovanjem pripovijesti. Balansiranje težine izazova sa značajnim nagradama pomaže motivirati igrače i pruža osjećaj postignuća.
Učinite igre privlačnijim uz razine
Implementacijom razina igre možete poboljšati cjelokupno iskustvo igrača i stvoriti privlačnije okruženje igranja. Razine pružaju napredak, izazov i raznolikost, držeći igrače uloženima i motiviranima. Omogućuju vam da uvedete nove mehanike, prepreke, neprijatelje i nagrade, osiguravajući da svaka razina bude različita i uzbudljiva.