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ą:
importuoti arkada
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600klasė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 // 2defon_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 += 10defon_key_release(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ arba raktas == arcade.key. DEŠINĖJE:
praeitidefpagrindinis():
ž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 // 2defatnaujinti(savarankiškai):
praeitidefpieš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 // 2defatnaujinti(savarankiškai):
praeitidefpieš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 = 0defon_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 += 10defon_key_release(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ arba raktas == arcade.key. DEŠINĖJE:
praeitidefatnaujinti(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 = 20defpieš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 = Netiesadefpieš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ėjuiklasė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štisdefpieš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 = Tiesadefpieš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 = Tiesadefišjungti_maitinimą(savarankiškai):
self.is_active = Netiesaklasė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.