Python's Arcade biblioteka siūlo paprastą ir efektyvų būdą įdiegti žaidimo lygius savo projektuose.

Žaidimo kūrimas yra įdomus ir kūrybiškas procesas, leidžiantis įgyvendinti savo vaizduotės idėjas. Kuriant žaidimą vienas iš pagrindinių elementų, galinčių labai pagerinti žaidėjo patirtį, yra žaidimo lygių įgyvendinimas.

Lygiai suteikia struktūrą, progresą ir iššūkius, suteikdami žaidėjams pasiekimų ir įsitraukimo pojūtį, kai jie naršo įvairiuose žaidimo etapuose.

Sukurkite paprastą žaidimą

Prieš pradėdami įsitikinkite, kad turite pip įdiegtas jūsų įrenginyje. Naudokite šią komandą norėdami įdiegti arkada biblioteka:

pip diegimo pasažas

Sukurkite pagrindinį žaidimą, kuriame žaidėjas gali judėti į kairę ir į dešinę.

Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.

Pasinaudokite Arcade bibliotekos galimybėmis, kad galėtumėte apdoroti vartotojo įvestį ir atitinkamai atnaujinti žaidimo būseną. Sukurkite naują failą pavadinimu paprastas žaidimas.py ir pridėkite žemiau esantį kodą:

instagram viewer
importuoti arkada

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600

klasėMano žaidimas(arkada. Langas):
def__init__(savarankiškai):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Mano žaidimas")
arcade.set_background_color (arcade.color. BALTAS)
self.player_x = SCREEN_WIDTH // 2

defon_draw(savarankiškai):
arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. MĖLYNA)

defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= 10
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += 10

defon_key_release(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ arba raktas == arcade.key. DEŠINĖJE:
praeiti

defpagrindinis():
žaidimas = MyGame()
arcade.run()

jeigu __vardas__ == "__pagrindinis__":
pagrindinis ()

Žemiau yra išvestis:

Sukurkite kelis lygius

Dabar išplėskite žaidimą pridėdami kelis lygius. Kiekvienas lygis turės savo unikalias ypatybes, suteikdamas žaidėjui skirtingus iššūkius. Galite pakeisti ankstesnį kodą, kad įtrauktumėte papildomų lygių. Štai pavyzdys:

klasėLevelOne:
def__init__(savarankiškai):
self.player_x = SCREEN_WIDTH // 2

defatnaujinti(savarankiškai):
praeiti

defpiešti(savarankiškai):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. MĖLYNA)

klasėAntras lygis:
def__init__(savarankiškai):
self.player_x = SCREEN_WIDTH // 2

defatnaujinti(savarankiškai):
praeiti

defpiešti(savarankiškai):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arcade.color. RAUDONA)

klasėMano žaidimas(arkada. Langas):
def__init__(savarankiškai):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Mano žaidimas")
arcade.set_background_color (arcade.color. BALTAS)
self.levels = [LevelOne(), LevelTwo()]
self.current_level = 0

defon_draw(savarankiškai):
arcade.start_render()
self.levels[self.current_level].draw()

defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.levels[self.current_level].player_x -= 10
elifas raktas == arcade.key. DEŠINĖJE:
self.levels[self.current_level].player_x += 10

defon_key_release(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ arba raktas == arcade.key. DEŠINĖJE:
praeiti

defatnaujinti(savaime, delta_laikas):
self.levels[self.current_level].update()

defpagrindinis():
žaidimas = MyGame()
arcade.run()

jeigu __vardas__ == "__pagrindinis__":
pagrindinis ()

Perėjimas tarp lygių

Norėdami sukurti sklandų perėjimą tarp lygių, nustatykite, kada žaidėjas peržengia konkrečią ribą. Tu gali stebėti žaidėjo judėjimą, o kai žaidėjas peržengs ribą, galėsite pereiti į kitą lygį. Sukurkite naują failą pavadinimu pereinamumas tarp lygių.py ir pridėkite kodą su toliau pateiktais atnaujinimais:

klasėMano žaidimas(arkada. Langas):
# ...

defatnaujinti(savaime, delta_laikas):
self.levels[self.current_level].update()

# Patikrinkite, ar žaidėjas neperžengė ribos
jeigu 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 = EKRANO_PLOTIS
elifas 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

# ...

Žemiau yra išvestis:

Įskaitant papildomas funkcijas

Kad žaidimo lygiai taptų patrauklesni, galite įtraukti papildomų funkcijų, pvz., jėgų ir tikslų.

Tikslai

Tikslai pateikia konkrečius tikslus arba uždavinius, kuriuos žaidėjas turi pasiekti tam tikrame lygyje. Jie prideda tikslo ir progreso jausmą. Štai objektyvios funkcijos įgyvendinimo pavyzdys:

klasėTikslas:
def__init__(savaime, x, y):
savarankiškai.x = x
pats.y = y
savaime.spindulys = 20

defpiešti(savarankiškai):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ŽALIAS)

klasėLevelOne:
def__init__(savarankiškai):
self.objective = Tikslas(600, 400)
# ...

defatnaujinti(savarankiškai):
# Patikrinkite, ar žaidėjas pasiekia tikslą
jeigu arcade.check_for_collision (self.player, self.objective):
self.complete_objective()

defpiešti(savarankiškai):
self.objective.draw()
# ...

defužbaigtas_tikslas(savarankiškai):
# Kodas, skirtas objektyviam užbaigimui
praeiti

Kolekcionuojami daiktai

Kolekcionuojami daiktai arba premijos, kurias žaidėjas gali surinkti per visus lygius. Štai kolekcionuojamos funkcijos diegimo pavyzdys:

klasėKolekcinis:
def__init__(savaime, x, y):
savarankiškai.x = x
pats.y = y
savaime.spindulys = 10
self.is_colected = Netiesa

defpiešti(savarankiškai):
jeigune self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ORANŽINĖ)

defrinkti(savarankiškai):
self.is_colected = Tiesa
# Kodas, skirtas valdyti kolekcionuojamo daikto poveikį žaidėjui

klasėLevelOne:
def__init__(savarankiškai):
self.colectible = Kolekcionuojamas(300, 300)
# ...

defatnaujinti(savarankiškai):
# Patikrinkite, ar žaidėjas paima daiktą
jeigu arcade.check_for_collision (self.player, self.collectible):
self.colectible.collect()

defpiešti(savarankiškai):
self.colectible.draw()
# ...

Kliūtys

Kliūtys gali būti statiniai objektai arba judantys subjektai, kurie trukdo žaidėjui keliauti. Jie reikalauja, kad žaidėjas parengtų strategiją ir rastų būdų, kaip juos įveikti. Štai kliūčių funkcijos įgyvendinimo pavyzdys:

klasėKliūtis:
def__init__(savaime, x, y, plotis, aukštis):
savarankiškai.x = x
pats.y = y
savaime.plotis = plotis
savęs.aukštis = aukštis

defpiešti(savarankiškai):
arcade.draw_rectangle_filled (self.x, self.y, self.width, self.height, arcade.color. PILKA)

klasėLevelOne:
def__init__(savarankiškai):
self.obstacles = [Kliūtis(400, 200, 100, 50), kliūtis (600, 500, 80, 120)]
# ...

Sustiprinimai

Papildymai gali pagerinti žaidėjo sugebėjimus arba suteikti laikinų pranašumų. Štai įjungimo funkcijos diegimo pavyzdys:

klasėĮjungti:
def__init__(savaime, x, y):
savarankiškai.x = x
pats.y = y
savaime.spindulys = 10
self.is_active = Tiesa

defpiešti(savarankiškai):
jeigu self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. GELTONA)

defactivate_power_up(savarankiškai):
self.is_active = Tiesa

defišjungti_maitinimą(savarankiškai):
self.is_active = Netiesa

klasėLevelOne:
def__init__(savarankiškai):
self.power_up = Galia(200, 200)
# ...

defatnaujinti(savarankiškai):
# Patikrinkite, ar grotuvas nesusiduria su maitinimo įtaisu
jeigu arcade.check_for_collision (self.player, self.power_up):
self.player.activate_power_up()
self.power_up.deactivate_power_up()

defpiešti(savarankiškai):
self.power_up.draw()
# ...

Geriausia lygių projektavimo praktika

Lygio dizainas vaidina lemiamą vaidmenį kuriant patrauklią ir malonią žaidimo patirtį. Štai keletas geriausių praktikų, į kuriuos reikia atsižvelgti kuriant žaidimo lygius:

Aiškūs tikslai

Kiekvienas lygis turi turėti aiškų tikslą arba tikslą, kurį žaidėjas turi pasiekti. Nesvarbu, ar tai būtų konkrečios vietos pasiekimas, priešų nugalėjimas ar galvosūkių sprendimas, tikslas turi būti aiškiai apibrėžtas ir perduotas žaidėjui.

Laipsniško sunkumo kreivė

Dizaino lygiai su laipsniškai didėjančiu sunkumu, kad žaidėjams būtų užtikrintas sklandus mokymosi kreivė. Pradėkite nuo paprastesnių iššūkių ir žaidėjui progresuojant palaipsniui įveskite naujų mechanikų ar kliūčių. Staigūs sunkumų šuoliai gali nuvilti žaidėjus, todėl svarbu išlaikyti subalansuotą progresą.

Vizualinis aiškumas

Užtikrinkite, kad lygio dizainas ir vaizdiniai elementai aiškiai perteiktų žaidėjui svarbią informaciją. Muzika ir garso efektai taip pat gali perteikti svarbias užuominas ir suteikti žaidėjui esminės informacijos.

Žaidimų testavimas ir iteracija

Reguliarus žaidimo testavimas yra būtinas norint tobulinti ir tobulinti lygio dizainą. Surinkite žaidėjų atsiliepimus ir stebėkite jų patirtį, kad nustatytumėte sritis, kurias gali reikėti koreguoti. Pakartokite savo lygio dizainą remdamiesi šiais atsiliepimais, kad sukurtumėte malonesnį ir subalansuotą žaidimą.

Subalansuokite apdovanojimą ir iššūkį

Apdovanokite žaidėjus už iššūkių įveikimą jūsų lygiuose. Tai galima pasiekti patobulinus, kolekciniais daiktais, atrakinant naujas sritis arba plėtojant pasakojimą. Iššūkių sunkumo ir prasmingo atlygio suderinimas padeda motyvuoti žaidėjus ir suteikia pasiekimo jausmą.

Padarykite žaidimus patrauklesnius naudodami lygius

Įdiegę žaidimo lygius galite pagerinti bendrą žaidėjo patirtį ir sukurti patrauklesnę žaidimo aplinką. Lygiai suteikia progreso, iššūkių ir įvairovės, leisdami žaidėjams investuoti ir motyvuoti. Jie leidžia jums pristatyti naują mechaniką, kliūtis, priešus ir apdovanojimus, užtikrinant, kad kiekvienas lygis atrodytų išskirtinis ir įdomus.