Pythonova knjižnica Arcade ponuja preprost in učinkovit način za implementacijo nivojev iger v vaše projekte.
Razvoj iger je vznemirljiv in ustvarjalen proces, ki vam omogoča, da svoje domiselne zamisli oživite. Pri načrtovanju igre je eden od ključnih elementov, ki lahko močno izboljša izkušnjo igralca, implementacija nivojev igre.
Ravni zagotavljajo strukturo, napredovanje in izzive, kar daje igralcem občutek dosežka in angažiranosti, ko krmarijo skozi različne faze igre.
Ustvari preprosto igro
Preden začnete, se prepričajte, da imate pip nameščen v vaši napravi. S tem ukazom namestite arkada knjižnica:
pip install arkada
Ustvarite osnovno igro, kjer se lahko igralec premika levo in desno.
Koda, uporabljena v tem članku, je na voljo tukaj Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.
Uporabite zmožnosti knjižnice Arcade za obdelavo uporabniškega vnosa in ustrezno posodobite stanje igre. Ustvari novo datoteko z imenom simple-game.py in dodajte spodnjo kodo:
uvoz arkada
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600razredMyGame(arkadne. okno):
def__v__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Moja igra")
arcade.set_background_color (arcade.color. BELA)
self.player_x = SCREEN_WIDTH // 2defon_draw(sebe):
arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. MODRA)defna_pritisk_tipke(jaz, ključ, modifikatorji):
če ključ == arcade.key. LEVO:
self.player_x -= 10
elif ključ == arcade.key. PRAV:
self.player_x += 10defon_key_release(jaz, ključ, modifikatorji):
če ključ == arcade.key. LEVO oz ključ == arcade.key. PRAV:
prehoddefglavni():
igra = MojaIgra()
arcade.run()
če __ime__ == "__glavni__":
glavni ()
Spodaj je rezultat:
Ustvarite več ravni
Zdaj razširite igro z dodajanjem več ravni. Vsaka raven bo imela svoje edinstvene značilnosti, ki igralcu ponujajo različne izzive. Prejšnjo kodo lahko spremenite tako, da vključuje dodatne ravni. Tukaj je primer:
razredLevelOne:
def__v__(sebe):
self.player_x = SCREEN_WIDTH // 2defnadgradnja(sebe):
prehoddefpripraviti(sebe):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. MODRA)razredLevelTwo:
def__v__(sebe):
self.player_x = SCREEN_WIDTH // 2defnadgradnja(sebe):
prehoddefpripraviti(sebe):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. RDEČA)razredMyGame(arkadne. okno):
def__v__(sebe):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Moja igra")
arcade.set_background_color (arcade.color. BELA)
self.levels = [LevelOne(), LevelTwo()]
self.current_level = 0defon_draw(sebe):
arcade.start_render()
self.levels[self.current_level].draw()defna_pritisk_tipke(jaz, ključ, modifikatorji):
če ključ == arcade.key. LEVO:
self.levels[self.current_level].player_x -= 10
elif ključ == arcade.key. PRAV:
self.levels[self.current_level].player_x += 10defon_key_release(jaz, ključ, modifikatorji):
če ključ == arcade.key. LEVO oz ključ == arcade.key. PRAV:
prehoddefnadgradnja(sam, delta_time):
self.levels[self.current_level].update()defglavni():
igra = MojaIgra()
arcade.run()
če __ime__ == "__glavni__":
glavni ()
Prehod med nivoji
Če želite ustvariti gladek prehod med nivoji, zaznajte, kdaj igralec prestopi določeno mejo. Ti lahko spremljanje gibanja igralca, in ko igralec prestopi mejo, lahko preklopite na naslednjo stopnjo. Ustvari novo datoteko z imenom prehod-med-ravnimi.py in dodajte kodo s spodnjimi posodobitvami:
razredMyGame(arkadne. okno):
# ...defnadgradnja(sam, delta_time):
self.levels[self.current_level].update()# Preverite, ali je igralec prestopil mejo
če self.levels[self.current_level].player_x < 0:
samo.trenutna_raven += 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:
samo.trenutna_raven += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = 0
# ...
Spodaj je rezultat:
Vključno z dodatnimi funkcijami
Če želite, da bodo ravni vaše igre bolj privlačne, lahko vključite dodatne funkcije, kot so okrepitve in cilji.
Cilji
Cilji ponujajo določene cilje ali cilje, ki jih mora igralec doseči na ravni. Dodajajo občutek namena in napredka. Tukaj je primer izvajanja objektivne funkcije:
razredCilj:
def__v__(jaz, x, y):
sam.x = x
self.y = y
self.radius = 20defpripraviti(sebe):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ZELENA)razredLevelOne:
def__v__(sebe):
self.objective = Cilj(600, 400)
# ...defnadgradnja(sebe):
# Preverite, ali igralec doseže cilj
če arcade.check_for_collision (self.player, self.objective):
self.complete_objective()defpripraviti(sebe):
self.objective.draw()
# ...
defpopoln_cilj(sebe):
# Koda za obdelavo izpolnitve cilja
prehod
Zbirateljski predmeti
Zbirateljski predmeti so predmeti ali bonusi, ki jih lahko igralec zbira na stopnjah. Tu je primer izvajanja zbirateljske funkcije:
razredZbirateljsko:
def__v__(jaz, x, y):
sam.x = x
self.y = y
self.radius = 10
self.is_collected = Falsedefpripraviti(sebe):
čene self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ORANŽNA)defzbirati(sebe):
self.is_collected = Prav
# Koda za upravljanje učinka zbirateljskega predmeta na igralcarazredLevelOne:
def__v__(sebe):
self.collectible = Zbirateljsko(300, 300)
# ...defnadgradnja(sebe):
# Preverite, ali igralec prevzame predmet
če arcade.check_for_collision (self.player, self.collectible):
self.collectible.collect()
defpripraviti(sebe):
self.collectible.draw()
# ...
Ovire
Ovire so lahko statični predmeti ali premikajoče se entitete, ki ovirajo igralčevo pot. Od igralca zahtevajo strategijo in iskanje načinov, kako jih premagati. Tu je primer implementacije funkcije ovir:
razredOvira:
def__v__(jaz, x, y, širina, višina):
sam.x = x
self.y = y
self.width = širina
self.height = višinadefpripraviti(sebe):
arcade.draw_rectangle_filled (self.x, self.y, self.width, self.height, arcade.color. SIVA)
razredLevelOne:
def__v__(sebe):
self.obstacles = [Ovira(400, 200, 100, 50), ovira (600, 500, 80, 120)]
# ...
Okrepitve
Ojačanja lahko izboljšajo igralčeve sposobnosti ali zagotovijo začasne prednosti. Tukaj je primer implementacije funkcije vklopa:
razredPrižgi:
def__v__(jaz, x, y):
sam.x = x
self.y = y
self.radius = 10
self.is_active = Pravdefpripraviti(sebe):
če self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. RUMENA)defactivate_power_up(sebe):
self.is_active = Pravdefdeaktiviraj_power_up(sebe):
self.is_active = FalserazredLevelOne:
def__v__(sebe):
self.power_up = PowerUp(200, 200)
# ...defnadgradnja(sebe):
# Preverite, ali igralec trči z vklopom
če arcade.check_for_collision (self.player, self.power_up):
self.player.activate_power_up()
self.power_up.deactivate_power_up()
defpripraviti(sebe):
self.power_up.draw()
# ...
Najboljše prakse za načrtovanje ravni
Oblikovanje nivojev igra ključno vlogo pri ustvarjanju privlačnih in prijetnih izkušenj igranja. Tukaj je nekaj najboljših praks, ki jih morate upoštevati pri načrtovanju ravni za svojo igro:
Jasni cilji
Vsaka raven mora imeti jasen cilj ali cilj, ki ga mora igralec doseči. Ne glede na to, ali gre za dosego določene lokacije, premagovanje sovražnikov ali reševanje ugank, mora biti cilj dobro definiran in sporočen igralcu.
Postopna krivulja težavnosti
Oblikujte ravni s postopnim povečevanjem težavnosti, da zagotovite gladko krivuljo učenja za igralce. Začnite s preprostejšimi izzivi in postopoma uvajajte nove mehanike ali ovire, ko igralec napreduje. Nenadni skoki v težavah lahko frustrirajo igralce, zato je pomembno ohraniti uravnoteženo napredovanje.
Vizualna jasnost
Zagotovite, da zasnova ravni in vizualni elementi jasno sporočajo pomembne informacije igralcu. Vključuje glasbo in zvočne učinke lahko posreduje tudi ključne namige in igralcu zagotovi bistvene informacije.
Testiranje predvajanja in ponovitev
Redno testiranje igranja je bistvenega pomena za izboljšanje in izboljšanje zasnove ravni. Zberite povratne informacije igralcev in opazujte njihove izkušnje, da prepoznate področja, ki bodo morda zahtevala prilagoditve. Ponovite svojo zasnovo ravni na podlagi teh povratnih informacij, da ustvarite bolj prijetno in uravnoteženo igranje.
Ravnotežje med nagrado in izzivom
Nagradite igralce za premagovanje izzivov na vaših ravneh. To je mogoče doseči z okrepitvami, zbirateljskimi predmeti, odklepanjem novih področij ali napredovanjem pripovedi. Uravnoteženje težavnosti izzivov s pomembnimi nagradami pomaga motivirati igralce in daje občutek dosežka.
Naredite igre bolj privlačne z ravnmi
Z uvedbo nivojev igre lahko izboljšate splošno izkušnjo igralca in ustvarite bolj privlačno igralno okolje. Ravni zagotavljajo napredovanje, izziv in raznolikost, zaradi česar so igralci vloženi in motivirani. Omogočajo vam, da uvedete nove mehanike, ovire, sovražnike in nagrade, s čimer zagotovite, da je vsaka stopnja razločna in vznemirljiva.