Pythons Arcade-bibliotek tilbyr en enkel og effektiv måte å implementere spillnivåer i prosjektene dine på.
Spillutvikling er en spennende og kreativ prosess som lar deg bringe dine fantasifulle ideer til live. Når du designer et spill, er et av nøkkelelementene som i stor grad kan forbedre spilleropplevelsen implementeringen av spillnivåer.
Nivåer gir struktur, progresjon og utfordringer, og gir spillerne en følelse av prestasjon og engasjement når de navigerer gjennom ulike stadier av spillet.
Lag et enkelt spill
Før du starter, sørg for at du har pip installert på enheten din. Bruk denne kommandoen til å installere arkade bibliotek:
pip installer arkade
Lag et grunnleggende spill hvor spilleren kan bevege seg til venstre og høyre.
Koden som brukes i denne artikkelen er tilgjengelig i denne GitHub-depot og er gratis for deg å bruke under MIT-lisensen.
Bruk egenskapene til Arcade-biblioteket til å håndtere brukerinndata og oppdater spilltilstanden deretter. Opprett en ny fil med navnet simple-game.py og legg til koden nedenfor:
import arkade
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600klasseMitt Spill(arkade. Vindu):
def__i det__(selv):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Mitt spill")
arcade.set_background_color (arcade.color. HVIT)
self.player_x = SCREEN_WIDTH // 2defon_draw(selv):
arcade.start_render()
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arkade.farge. BLÅ)defon_key_press(selv, nøkkel, modifikatorer):
hvis nøkkel == arkade.nøkkel. VENSTRE:
self.player_x -= 10
elif nøkkel == arkade.nøkkel. IKKE SANT:
self.player_x += 10defon_key_release(selv, nøkkel, modifikatorer):
hvis nøkkel == arkade.nøkkel. VENSTRE eller nøkkel == arkade.nøkkel. IKKE SANT:
sendedefhoved-():
spill = MyGame()
arcade.run()
hvis __navn__ == "__hoved__":
hoved()
Nedenfor er utgangen:
Lag flere nivåer
Nå kan du utvide spillet ved å legge til flere nivåer. Hvert nivå vil ha sine egne unike egenskaper, som gir forskjellige utfordringer for spilleren. Du kan endre den forrige koden for å inkludere flere nivåer. Her er et eksempel:
klasseLevelOne:
def__i det__(selv):
self.player_x = SCREEN_WIDTH // 2defOppdater(selv):
sendedeftegne(selv):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arkade.farge. BLÅ)klasseNivå to:
def__i det__(selv):
self.player_x = SCREEN_WIDTH // 2defOppdater(selv):
sendedeftegne(selv):
arcade.draw_rectangle_filled (self.player_x, 50, 50, 50, arkade.farge. RØD)klasseMitt Spill(arkade. Vindu):
def__i det__(selv):
super().__init__(SCREEN_WIDTH, SCREEN_HEIGHT, "Mitt spill")
arcade.set_background_color (arcade.color. HVIT)
self.levels = [LevelOne(), LevelTo()]
self.current_level = 0defon_draw(selv):
arcade.start_render()
self.levels[self.current_level].draw()defon_key_press(selv, nøkkel, modifikatorer):
hvis nøkkel == arkade.nøkkel. VENSTRE:
self.levels[self.current_level].player_x -= 10
elif nøkkel == arkade.nøkkel. IKKE SANT:
self.levels[self.current_level].player_x += 10defon_key_release(selv, nøkkel, modifikatorer):
hvis nøkkel == arkade.nøkkel. VENSTRE eller nøkkel == arkade.nøkkel. IKKE SANT:
sendedefOppdater(selv, delta_tid):
self.levels[self.current_level].update()defhoved-():
spill = MyGame()
arcade.run()
hvis __navn__ == "__hoved__":
hoved()
Overgang mellom nivåer
For å skape en jevn overgang mellom nivåer, registrer når spilleren krysser en spesifikk grense. Du kan spore spillerens bevegelser, og når spilleren krysser grensen, kan du bytte til neste nivå. Opprett en ny fil med navnet transition-between-levels.py og legg til koden med oppdateringene nedenfor:
klasseMitt Spill(arkade. Vindu):
# ...defOppdater(selv, delta_tid):
self.levels[self.current_level].update()# Sjekk om spilleren krysset grensen
hvis 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 = SCREEN_WIDTH
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
# ...
Nedenfor er utgangen:
Inkludert tilleggsfunksjoner
For å gjøre spillnivåene dine mer engasjerende, kan du inkludere tilleggsfunksjoner som power-ups og mål.
Mål
Mål gir spesifikke mål eller mål for spilleren å oppnå innenfor et nivå. De gir en følelse av hensikt og fremgang. Her er et eksempel på implementering av en objektiv funksjon:
klasseObjektiv:
def__i det__(selv, x, y):
selv.x = x
self.y = y
self.radius = 20deftegne(selv):
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. GRØNN)klasseLevelOne:
def__i det__(selv):
self.objective = Objective(600, 400)
# ...defOppdater(selv):
# Sjekk om spilleren når målet
hvis arcade.check_for_collision (selv.spiller, self.objective):
self.complete_objective()deftegne(selv):
self.objective.draw()
# ...
defkomplett_mål(selv):
# Kode for å håndtere objektiv fullføring
sende
Samleobjekter
Samleobjekter er gjenstander eller bonuser som spilleren kan samle gjennom nivåene. Her er et eksempel på implementering av en samleobjekt:
klasseSamleobjekt:
def__i det__(selv, x, y):
selv.x = x
self.y = y
self.radius = 10
self.is_collected = Falskdeftegne(selv):
hvisikke self.is_collected:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. ORANSJE)defsamle inn(selv):
self.is_collected = ekte
# Kode for å håndtere samleobjektets effekt på spillerenklasseLevelOne:
def__i det__(selv):
self.collectible = Collectible(300, 300)
# ...defOppdater(selv):
# Sjekk om spilleren samler varen
hvis arcade.check_for_collision (selv.spiller, self.collectible):
self.collectible.collect()
deftegne(selv):
self.collectible.draw()
# ...
Hindringer
Hindringer kan være statiske objekter eller bevegelige enheter som hindrer spillerens vei. De krever at spilleren legger strategier og finner måter å overvinne dem på. Her er et eksempel på implementering av hindringer-funksjonen:
klasseHindring:
def__i det__(selv, x, y, bredde, høyde):
selv.x = x
self.y = y
self.width = bredde
selv.høyde = høydedeftegne(selv):
arcade.draw_rectangle_filled (self.x, self.y, self.width, self.height, arcade.color. GRÅ)
klasseLevelOne:
def__i det__(selv):
self.obstacles = [Obstacle(400, 200, 100, 50), Hindring(600, 500, 80, 120)]
# ...
Power-ups
Power-ups kan forbedre spillerens evner eller gi midlertidige fordeler. Her er et eksempel på implementering av en oppstartsfunksjon:
klasseStart opp:
def__i det__(selv, x, y):
selv.x = x
self.y = y
self.radius = 10
self.is_active = ektedeftegne(selv):
hvis self.is_active:
arcade.draw_circle_filled (self.x, self.y, self.radius, arcade.color. GUL)defactivate_power_up(selv):
self.is_active = ektedefdeactivate_power_up(selv):
self.is_active = FalskklasseLevelOne:
def__i det__(selv):
self.power_up = PowerUp(200, 200)
# ...defOppdater(selv):
# Sjekk om spilleren kolliderer med oppstart
hvis arcade.check_for_collision (self.player, self.power_up):
self.player.activate_power_up()
self.power_up.deactivate_power_up()
deftegne(selv):
self.power_up.draw()
# ...
Beste praksis for nivådesign
Nivådesign spiller en avgjørende rolle for å skape engasjerende og morsomme spillopplevelser. Her er noen beste fremgangsmåter du bør vurdere når du designer nivåer for spillet ditt:
Klare mål
Hvert nivå bør ha et klart mål eller mål for spilleren å oppnå. Enten det er å nå et bestemt sted, beseire fiender eller løse gåter, bør målet være godt definert og kommunisert til spilleren.
Gradvis vanskelighetsgrad
Designnivåer med gradvis økning i vanskelighetsgrad for å gi en jevn læringskurve for spillere. Start med enklere utfordringer og introduser gradvis ny mekanikk eller hindringer etter hvert som spilleren skrider frem. Plutselige stigninger i vanskelighetsgraden kan frustrere spillere, så det er viktig å opprettholde en balansert progresjon.
Visuell klarhet
Sørg for at nivådesignet og visuelle elementer tydelig kommuniserer viktig informasjon til spilleren. Inkluderer musikk og lydeffekter kan også formidle viktige ledetråder og gi viktig informasjon til spilleren.
Spilletesting og iterasjon
Regelmessige leketesting er avgjørende for å foredle og forbedre nivådesignet. Samle tilbakemeldinger fra spillere og observer deres erfaringer for å identifisere områder som kan kreve justeringer. Gjenta nivådesignet ditt basert på denne tilbakemeldingen for å skape morsommere og mer balansert spilling.
Balanser belønning og utfordring
Belønn spillere for å overvinne utfordringer på nivåene dine. Dette kan oppnås gjennom power-ups, samleobjekter, låse opp nye områder eller narrativ progresjon. Å balansere vanskelighetsgraden til utfordringene med meningsfulle belønninger hjelper med å motivere spillere og gir en følelse av prestasjon.
Gjør spill mer engasjerende med nivåer
Ved å implementere spillnivåer kan du forbedre den generelle spilleropplevelsen og skape et mer engasjerende spillmiljø. Nivåer gir progresjon, utfordring og variasjon, og holder spillerne investert og motivert. De lar deg introdusere ny mekanikk, hindringer, fiender og belønninger, og sikrer at hvert nivå føles distinkt og spennende.