Gjør Pygame-prosjektene dine mer interessante ved å integrere power-ups og samleobjekter.

Power-ups og samleobjekter spiller en avgjørende rolle for å forbedre spillingen og gjøre spillene mer engasjerende. Ved å legge til disse elementene i Pygame-prosjektene dine kan du skape unike utfordringer, øke spillermotivasjonen og gi muligheter for strategiske beslutninger.

Heldigvis gir Pygame fleksible måter å implementere power-ups og samleobjekter på relativt enkelt.

Lag et enkelt spill

Før du starter, sørg for at du har pip installert på systemet ditt. Bruk denne kommandoen til å installere pygame bibliotek:

pip installer pygame

Start med å sette opp et enkelt spill der spilleren kan bevege seg til venstre og høyre mens han unngår en fiende.

Koden som brukes i denne artikkelen er tilgjengelig i denne GitHub-depot og er gratis for deg å bruke under MIT-lisensen.

Dette vil tjene som grunnlaget for å legge til power-ups og samleobjekter. Her er et eksempel på en kodebit:

import pygame
import tilfeldig
instagram viewer

# Initialiser Pygame
pygame.init()

# Sett opp spillvinduet
window_width = 800
vindu_høyde = 600
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("Mitt spill")

# Sett opp spilleren
player_width = 50
spillerhøyde = 50
player_x = (window_width - player_width) // 2
player_y = window_height - player_height - 10
player_speed = 5

# Sett opp fiende
enemy_width = 50
enemy_height = 50
enemy_x = random.randint(0, window_width - enemy_width)
enemy_y = 50
enemy_speed = 3

# Spillløkke
kjører = ekte
samtidig som løping:
til begivenhet i pygame.event.get():
hvis event.type == pygame. SLUTTE:
kjører = Falsk

# Spillerbevegelse
keys = pygame.key.get_pressed()
hvis keys[pygame. K_LEFT] og player_x > 0:
player_x -= player_speed
hvis keys[pygame. K_RIGHT] og player_x < window_width - player_width:
player_x += player_speed

# Fiendebevegelse
enemy_y += enemy_speed
hvis enemy_y > window_height:
enemy_x = random.randint(0, window_width - enemy_width)
enemy_y = 0

# Kollisjonsdeteksjon
hvis (player_x < enemy_x + enemy_width) og \
(player_x + player_width > enemy_x) og \
(player_y < enemy_y + enemy_height) og \
(player_y + player_height > enemy_y):
kjører = Falsk

# Tøm skjermen
window.fill((0, 0, 0))

player_pos = (player_x, player_y,
player_width, player_height)
fiende_pos = (fiende_x, fiende_y,
enemy_width, enemy_height)

# Tegn spiller
pygame.draw.rect (vindu, (255, 255, 255), player_pos)

# Tegn fiende
pygame.draw.rect (vindu, (255, 0, 0), enemy_pos)

# Oppdater skjermen
pygame.display.update()

# Avslutt spillet
pygame.quit()

Nedenfor er utgangen:

Lag samleobjekter

For å lage samleobjekter, legg til et objekt som, ved kollisjon med spilleren, forsvinner og legger til 10 poeng til poengsummen. For dette må du sjekk kollisjonene mellom spilleren og samleobjektene. Her er en oppdatert versjon av koden som inkluderer samleobjekter. Opprett en ny fil med navnet collectibles.py og legg til koden med oppdateringene nedenfor:

# Sett opp samleobjekt
collectible_width = 30
samleobjekthøyde = 30
collectible_x = random.randint(0, window_width - collectible_width)
collectible_y = 50

# Sett opp poengsum
score = 0
font = pygame.font. Font(Ingen, 36)

# ...

# Kollisjonsdeteksjon med samleobjekt
hvis (player_x < collectible_x + collectible_width) og \
(player_x + player_width > collectible_x) og \
(player_y < collectible_y + collectible_height) og \
(player_y + player_height > collectible_y):
collectible_x = random.randint(0, window_width - collectible_width)
collectible_y = 50
score += 10
# ...

collectible_pos = (collectible_x, collectible_y)
# Tegn samleobjekt
pygame.draw.circle (vindu, (0, 255, 0), collectible_pos, collectible_width)

# Uavgjort poengsum
score_text = font.render("Score: " + str (poengsum), ekte, (255, 255, 255))
window.blit (score_text, (10, 10))

Nedenfor er utgangen:

Lag power-ups

Nå kan du introdusere power-ups til spillet ditt med følgende logikk. Når spilleren kolliderer med et oppstartsobjekt, vil oppstarten forsvinne. Hvis spilleren kolliderer med fienden mens oppstarten er aktiv, vil fienden bli eliminert. Opprett en ny fil med navnet powerups.py og legg til koden med oppdateringene nedenfor:

# Sett opp oppstart
powerup_width = 40
powerup_height = 40
powerup_x = random.randint(0, window_width - powerup_width)
powerup_y = 50
shield_active = Falsk
shield_timer = 0

# ...

# Kollisjonsdeteksjon med oppstart
collision_powerup = (player_x < powerup_x + powerup_width) og \
(player_x + player_width > powerup_x) og \
(player_y < powerup_y + powerup_height) og \
(player_y + player_height > powerup_y)

hvis collision_powerup:
powerup_x = random.randint(0, window_width - powerup_width)
powerup_y = 50
shield_active = ekte
shield_timer = pygame.time.get_ticcks()

# ...

# Sjekk skjoldtimeren
hvis shield_active:
current_time = pygame.time.get_ticcks()
hvis current_time - shield_timer > 5000:
shield_active = Falsk

# ...

# Definer toppunktene til trekanten
x1 = powerup_x + powerup_width / 2
y1 = powerup_y
x2 = powerup_x
y2 = powerup_y + powerup_height
x3 = powerup_x + powerup_width
y3 = powerup_y + powerup_height

# Tegn trekanten
pygame.draw.polygon (vindu, (255, 255, 0), [(x1, y1), (x2, y2), (x3, y3)])

# ...

# Kollisjonsdeteksjon med aktiv skjold
kollisjonsskjold = skjold_aktiv og \
(player_x < enemy_x + enemy_width) og \
(player_x + player_width > enemy_x) og \
(player_y < enemy_y + enemy_height) og \
(player_y + player_height > enemy_y)

hvis kollisjonsskjold:
enemy_x = random.randint(0, window_width - enemy_width)
enemy_y = 0

Nedenfor er utgangen:

Stille inn timer for power-ups

For å få oppstarten til å forsvinne etter en viss tid og starte på nytt på et tilfeldig sted, kan du introdusere tidtakere. Opprett en ny fil med navnet timer.py og legg til koden med oppdateringene nedenfor:

# Sett opp timer for oppstart på nytt
powerup_respawn_timer = 0

# Sjekk oppstartstimeren
hvisikke shield_active:
current_time = pygame.time.get_ticcks()
hvis gjeldende_tid - powerup_respawn_timer > 3000:
powerup_x = random.randint(0, window_width - powerup_width)
powerup_y = 50
powerup_respawn_timer = pygame.time.get_ticcks()

Visualisere oppstartstimeren

For å gi en visuell representasjon av oppstartstidsbryteren kan du tegne et rektangulært objekt som gradvis tømmes over tid. Opprett en ny fil med navnet bar.py og legg til koden med oppdateringene nedenfor:

# Sett opp power-up bar
bar_width = 100
bar_høyde = 10
bar_x = window_width - bar_width - 10
bar_y = 10

# ...

# Beregn fremdriften for oppstartstimeren
hvis shield_active:
current_time = pygame.time.get_ticcks()
elapsed_time = gjeldende_tid - skjold_timer
timer_progress = (5000 - medgått_tid) / 5000
# Tegn oppstartsstang
bar_rect = pygame. Rekt (bar_x, bar_y, bar_width * timer_progress, bar_height)
pygame.draw.rect (vindu, (0, 255, 255), bar_rect)

Nedenfor er utgangen:

Beste praksis for å legge til power-ups og samleobjekter

Når det gjelder å inkludere power-ups og samleobjekter i Pygame-prosjektene dine, kan det å følge beste praksis forbedre den generelle spillopplevelsen betraktelig. Vurder følgende retningslinjer for å sikre en balansert og engasjerende implementering:

Visuell distinksjon

Det er viktig å lage klare visuelle forskjeller mellom power-ups, samleobjekter og andre spillelementer. Bruk forskjellige farger, former eller symboler for å gjøre dem lett gjenkjennelige for spillere. Denne visuelle klarheten hjelper spillere med å identifisere og prioritere målene sine, noe som gjør spillingen mer intuitiv og morsom.

Balanse og utfordring

Prøv å opprettholde en balansert og utfordrende spillopplevelse. Juster frekvensen av power-ups og samleobjekter for å unngå å overvelde spillere eller gjøre spillet for enkelt. Å finne den rette balansen krever nøye testing og iterasjon.

Ta hensyn til tilbakemeldinger fra spillere og finjuster spawn-ratene for å skape en engasjerende og tilfredsstillende opplevelse.

Tilbakemelding og belønning

Å gi umiddelbar tilbakemelding og belønning når spillere samler power-ups eller samleobjekter øker følelsen av prestasjon og motivasjon. Vurder å legge til visuelle effekter, lydsignaler eller animasjoner for å indikere vellykkede oppkjøp.

Å belønne spillere med poeng, ekstra liv eller låse opp spesielle evner gir ytterligere spenning og oppmuntrer spillere til å aktivt oppsøke disse elementene.

Tidtakere og varigheter

Implementer tidtakere og varigheter for power-ups for å opprettholde rettferdighet og strategiske beslutninger. Power-ups bør ha en begrenset varighet for å forhindre at spillere blir overmannet i lengre perioder.

Å balansere varigheten er avgjørende, siden for kort varighet kan føles underveldende, mens for lang tid kan ubalanse spillet. Test forskjellige varigheter for å finne det beste stedet for hver oppstart.

Test og iterer

Playtesting er et viktig skritt i utviklingsprosessen. Test spillet ditt grundig med forskjellige konfigurasjoner og vanskelighetsgrader for å sikre at power-ups og samleobjekter er riktig balansert og integrert i spillingen.

Vær oppmerksom på tilbakemeldinger fra spillere og gjenta basert på deres erfaringer. Denne iterative tilnærmingen lar deg finjustere systemet, og skape en hyggelig og fengslende spillopplevelse.

Gjør spill mer engasjerende med samleobjekter

Å legge til power-ups og samleobjekter til Pygame-prosjektene dine kan forbedre den generelle spillopplevelsen betraktelig. Disse elementene introduserer strategiske valg, belønner spillere og øker motivasjonen. Samleobjekter kan brukes til å låse opp nye funksjoner, nivåer eller evner, mens power-ups gir midlertidige fordeler og unik spillmekanikk.

Ved å nøye utforme og implementere disse funksjonene, kan du lage spill som er mer oppslukende, utfordrende og morsomme for spillere.