Pythoni arkaadide teek pakub lihtsat ja tõhusat viisi mängutasemete rakendamiseks oma projektides.

Mänguarendus on põnev ja loominguline protsess, mis võimaldab teil oma fantaasiarikkaid ideid ellu viia. Mängu kujundamisel on üheks võtmeelemendiks, mis võib mängijakogemust oluliselt parandada, mängutasemete rakendamine.

Tasemed pakuvad struktuuri, edenemist ja väljakutseid, pakkudes mängijatele saavutus- ja seotuse tunnet, kui nad mängu eri etappides navigeerivad.

Looge lihtne mäng

Enne alustamist veenduge, et teil on pip teie seadmesse installitud. Kasutage seda käsku installimiseks arkaad raamatukogu:

pip install arkaad

Loo põhimäng, kus mängija saab liikuda vasakule ja paremale.

Selles artiklis kasutatud kood on saadaval selles GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.

Kasutage kasutaja sisendi käsitlemiseks ja mängu oleku vastavalt värskendamiseks Arcade teegi võimalusi. Looge uus fail nimega lihtne-mäng.py ja lisage allolev kood:

importida arkaad

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

klassMinu Mäng(arkaad. aken):
def__selles__(ise):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Minu mäng")
arcade.set_background_color (arcade.color. VALGE)
self.player_x = SCREEN_WIDTH // 2

defon_draw(ise):
arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. SININE)

defon_key_press(ise, võti, muutjad):
kui võti == arcade.key. VASAKULE:
self.player_x -= 10
elif võti == arcade.key. PAREMALE:
self.player_x += 10

defon_key_release(ise, võti, muutjad):
kui võti == arcade.key. VASAKULE või võti == arcade.key. PAREMALE:
üle andma

defpeamine():
mäng = MinuMäng()
arcade.run()

kui __nimi__ == "__main__":
peamine ()

Allpool on väljund:

Loo mitu taset

Nüüd laiendage mängu mitme taseme lisamisega. Igal tasemel on oma ainulaadsed omadused, mis pakuvad mängijale erinevaid väljakutseid. Eelmist koodi saate muuta, et lisada täiendavaid tasemeid. Siin on näide:

klassLevelOne:
def__selles__(ise):
self.player_x = SCREEN_WIDTH // 2

defvärskendada(ise):
üle andma

defjoonistada(ise):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. SININE)

klassTase Kaks:
def__selles__(ise):
self.player_x = SCREEN_WIDTH // 2

defvärskendada(ise):
üle andma

defjoonistada(ise):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. PUNANE)

klassMinu Mäng(arkaad. aken):
def__selles__(ise):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Minu mäng")
arcade.set_background_color (arcade.color. VALGE)
self.levels = [LevelOne(), LevelTwo()]
self.current_level = 0

defon_draw(ise):
arcade.start_render()
self.levels[self.current_level].draw()

defon_key_press(ise, võti, muutjad):
kui võti == arcade.key. VASAKULE:
self.levels[self.current_level].player_x -= 10
elif võti == arcade.key. PAREMALE:
self.levels[self.current_level].player_x += 10

defon_key_release(ise, võti, muutjad):
kui võti == arcade.key. VASAKULE või võti == arcade.key. PAREMALE:
üle andma

defvärskendada(ise, delta_aeg):
self.levels[self.current_level].update()

defpeamine():
mäng = MinuMäng()
arcade.run()

kui __nimi__ == "__main__":
peamine ()

Üleminek tasandite vahel

Tasemete vahel sujuva ülemineku loomiseks tuvastage, millal mängija ületab teatud piiri. Sa saad jälgida mängija liikumistja kui mängija ületab piiri, saate lülituda järgmisele tasemele. Looge uus fail nimega üleminek-between-levels.py ja lisage kood koos allolevate värskendustega:

klassMinu Mäng(arkaad. aken):
# ...

defvärskendada(ise, delta_aeg):
self.levels[self.current_level].update()

# Kontrollige, kas mängija ületas piiri
kui self.levels[self.current_level].player_x < 0:
self.current_level += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = EKRAANI_LAAIUS
elif self.levels[self.current_level].player_x > SCREEN_WIDTH:
self.current_level += 1
self.current_level %= len (self.levels)
self.levels[self.current_level].player_x = 0

# ...

Allpool on väljund:

Kaasa arvatud lisafunktsioonid

Oma mängutasemete köitvamaks muutmiseks saate lisada lisafunktsioone, nagu võimsused ja eesmärgid.

Eesmärgid

Eesmärgid seavad mängijale konkreetsed eesmärgid või eesmärgid, mida ta peab tasemel saavutama. Need lisavad sihikindlust ja edusamme. Siin on näide objektiivse funktsiooni rakendamisest.

klassEesmärk:
def__selles__(ise, x, y):
ise.x = x
ise.y = y
ise.raadius = 20

defjoonistada(ise):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ROHELINE)

klassLevelOne:
def__selles__(ise):
self.objective = Objective(600, 400)
# ...

defvärskendada(ise):
# Kontrollige, kas mängija saavutab eesmärgi
kui arcade.check_for_collision (self.player, self.objective):
self.complete_objective()

defjoonistada(ise):
self.objective.draw()
# ...

deftäielik_eesmärk(ise):
# Kood eesmärgi täitmiseks
üle andma

Kogumisobjektid

Kollektsionäärid on esemed või boonused, mida mängija saab koguda kogu tasemel. Siin on näide kogutava funktsiooni rakendamisest.

klassKogutav:
def__selles__(ise, x, y):
ise.x = x
ise.y = y
ise.raadius = 10
ise.is_kogutud = Vale

defjoonistada(ise):
kuimitte self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ORANŽ)

defkoguda(ise):
ise.is_kogutud = Tõsi
# Kood, mis käsitleb kogumisobjekti mõju mängijale

klassLevelOne:
def__selles__(ise):
self.collectible = kogutav(300, 300)
# ...

defvärskendada(ise):
# Kontrollige, kas mängija kogub eseme kokku
kui arcade.check_for_collision (self.player, self.collectible):
self.collectible.collect()

defjoonistada(ise):
self.colectible.draw()
# ...

Takistused

Takistused võivad olla staatilised objektid või liikuvad üksused, mis takistavad mängija liikumisteed. Need nõuavad mängijalt strateegiat ja võimaluste leidmist nende ületamiseks. Siin on näide takistuste funktsiooni rakendamisest:

klassTakistus:
def__selles__(ise, x, y, laius, kõrgus):
ise.x = x
ise.y = y
ise.laius = laius
ise.kõrgus = kõrgus

defjoonistada(ise):
arcade.draw_reectangle_filled (self.x, self.y, self.width, self.height, arcade.color. HALL)

klassLevelOne:
def__selles__(ise):
self.obstacles = [Takistus(400, 200, 100, 50), takistus(600, 500, 80, 120)]
# ...

Võimsused

Võimsused võivad parandada mängija võimeid või pakkuda ajutisi eeliseid. Siin on näide sisselülitusfunktsiooni rakendamisest.

klassPowerUp:
def__selles__(ise, x, y):
ise.x = x
ise.y = y
ise.raadius = 10
self.is_active = Tõsi

defjoonistada(ise):
kui self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. KOLLANE)

defactivate_power_up(ise):
self.is_active = Tõsi

defdeaktiveeri_toite_üles(ise):
self.is_active = Vale

klassLevelOne:
def__selles__(ise):
self.power_up = Võimsus(200, 200)
# ...

defvärskendada(ise):
# Kontrollige, kas mängija põrkub toitelülitiga kokku
kui arcade.check_for_collision (self.player, self.power_up):
self.player.activate_power_up()
self.power_up.deactivate_power_up()

defjoonistada(ise):
self.power_up.draw()
# ...

Tasemekujunduse parimad tavad

Tasemekujundus mängib kaasahaarava ja nauditava mängukogemuse loomisel otsustavat rolli. Siin on mõned parimad tavad, mida oma mängu tasemete kujundamisel arvesse võtta.

Selge eesmärgid

Igal tasemel peaks mängijal olema selge eesmärk või eesmärk, mida mängija peab saavutama. Olgu selleks siis kindlasse kohta jõudmine, vaenlaste võitmine või mõistatuste lahendamine, eesmärk peaks olema täpselt määratletud ja mängijale edastatud.

Järkjärguline raskuskõver

Disainitasemed, mille raskusaste suureneb järk-järgult, et tagada mängijatele sujuv õppimiskõver. Alustage lihtsamate väljakutsetega ja tutvustage mängija edenedes järk-järgult uusi mehaanikaid või takistusi. Äkilised raskuste tõusud võivad mängijaid frustreerida, seega on oluline säilitada tasakaalustatud edenemine.

Visuaalne selgus

Veenduge, et taseme kujundus ja visuaalsed elemendid edastaksid mängijale selgelt olulist teavet. Sisaldab muusikat ja heliefekte võib edastada ka olulisi vihjeid ja anda mängijale olulist teavet.

Mängu testimine ja iteratsioon

Regulaarne mängutestimine on tasemekujunduse viimistlemiseks ja täiustamiseks hädavajalik. Koguge mängijatelt tagasisidet ja jälgige nende kogemusi, et teha kindlaks kohad, mis võivad vajada kohandusi. Korrake oma tasemekujundust selle tagasiside põhjal, et luua nauditavamat ja tasakaalustatumat mängu.

Tasakaalustage tasu ja väljakutse

Premeerige mängijaid teie taseme väljakutsete ületamise eest. Seda saab saavutada võimsuse suurendamise, kogumisobjektide, uute valdkondade avamise või narratiivi edasiarendamise kaudu. Väljakutsete raskuste tasakaalustamine sisukate auhindadega aitab mängijaid motiveerida ja annab saavutustunde.

Muutke mängud tasemetega kaasahaaravamaks

Mängutasemeid rakendades saate parandada üldist mängijakogemust ja luua kaasahaaravama mängukeskkonna. Tasemed pakuvad edenemist, väljakutseid ja vaheldust, hoides mängijaid investeerituna ja motiveerituna. Need võimaldavad teil tutvustada uusi mehaanikaid, takistusi, vaenlasi ja auhindu, tagades, et iga tase tundub erinev ja põnev.