Gjør spillopplevelsen din mer oppslukende ved å implementere et dialogsystem.

Implementering av et dialogsystem i Pygame kan i stor grad forbedre den interaktive opplevelsen av et spill. Et dialogsystem lar spillet presentere samtaler, meldinger og valg for spilleren, og skaper et mer oppslukende og engasjerende spill.

Pygame-biblioteket gir de nødvendige verktøyene for å lage et grafisk brukergrensesnitt (GUI) og håndtere brukerinndata, noe som gjør det til et ideelt valg for å implementere et dialogsystem.

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

Etter det, start med å lage 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.

Kodebiten nedenfor setter opp spillvinduet, initialiserer spillerens og fiendens egenskaper og kjører spillløkken.

instagram viewer
# Importer nødvendige biblioteker
import pygame
fra pygame.locals import *

pygame.init()

# Sett opp spillvinduet
screen_width, screen_height = 800, 600
screen = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Mitt spill")

# Definer farger
SVART = (0, 0, 0)
HVIT = (255, 255, 255)
GRÅ = (128, 128, 128)

# Spilleregenskaper
player_x = 400
player_y = 500
player_speed = 5

# Fiendens egenskaper
fiende_x = 400
enemy_y = 100
enemy_speed = 3

kjører = ekte
klokke = pygame.time. Klokke()

samtidig som løping:
til begivenhet i pygame.event.get():
hvis event.type == AVSLUTT:
kjører = Falsk

keys = pygame.key.get_pressed()

# Spillerbevegelse
hvis nøkler[K_LEFT] og player_x > 0:
player_x -= player_speed
hvis nøkler[K_RIGHT] og player_x < screen_width - player_speed:
player_x += player_speed

# Oppdater fiendens posisjon
enemy_y += enemy_speed
hvis enemy_y > screen_height:
enemy_y = -50

# Sjekk kollisjon
hvis pygame. Rect (spiller_x, spiller_y, 50, 50).kolliderect (pygame. Rekt (enemy_x, enemy_y, 50, 50)):
# Implementer dialogboksen her
sende

screen.fill (SVART)
pygame.draw.rect (skjerm, HVIT, (spiller_x, spiller_y, 50, 50))
pygame.draw.rect (skjerm, HVIT, (enemy_x, enemy_y, 50, 50))
pygame.display.flip()
klokke.tick(60)

pygame.quit()

Nedenfor er utgangen:

Lag dialogboks

For å implementere en dialogboks, må du vise den hver gang spilleren berører fienden. Legg til dialogboks variabel, som styrer om dialogboksen skal vises eller ikke.

Inne i spillløkken, se etter kollisjon mellom spilleren og fienden, og hvis det er en kollisjon, still inn dialogboks til ekte. Innenfor tilstanden hvor dialogboks er ekte, tegn et grått rektangel på skjermen ved hjelp av pygame.draw.rect() for å representere dialogboksen.

Opprett en ny fil med navnet dialogue.py og legg til koden med oppdateringene nedenfor:

# Dialogboksegenskaper
dialogboksbredde = 400
dialogboks_høyde = 200
dialogue_box_x = (skjermbredde - dialogboksbredde) // 2
dialogue_box_y = (skjermhøyde - dialogboks_høyde) // 2
dialogboks = Falsk
# ...
samtidig som løping:
til begivenhet i pygame.event.get():
hvis event.type == AVSLUTT:
kjører = Falsk
keys = pygame.key.get_pressed()
# Spillerbevegelse
hvis nøkler[K_LEFT] og player_x > 0:
player_x -= player_speed
hvis nøkler[K_RIGHT] og player_x < screen_width - player_speed:
player_x += player_speed
# Oppdater fiendens posisjon
enemy_y += enemy_speed
hvis enemy_y > screen_height:
enemy_y = -50
# Sjekk kollisjon
hvis pygame. Rect (spiller_x, spiller_y, 50, 50).kolliderect (pygame. Rekt (enemy_x, enemy_y, 50, 50)):
dialogboks = ekte
screen.fill (SVART)
hvis dialogboks:
pygame.draw.rect (skjerm, GRÅ, (dialogue_box_x,
dialogboks_y,
dialogboksbredde,
dialogbokshøyde))

# Legg til dialogtekst og knapper her
ellers:
pygame.draw.rect (skjerm, HVIT, (spiller_x, spiller_y, 50, 50))
pygame.draw.rect (skjerm, HVIT, (enemy_x, enemy_y, 50, 50))
pygame.display.flip()
klokke.tick(60)
pygame.quit()

Nedenfor er utgangen:

Nå, for å gjøre dialogboksen mer funksjonell og interaktiv, kan du fortsette å legge til knapper og tekst.

Legg til knapper ved hjelp av Python GUI

For å legge til knapper i dialogboksen, kan du bruke et Python GUI-bibliotek som Pygame GUI eller PySimpleGUI.

Installer og importer pygame_gui modul, og lag deretter en Pygame GUI-manager ved å bruke pygame_gui. UIManager. Etter det oppretter du en knapp ved å bruke UIButton klasse levert av Python GUI-biblioteket.

Inne i spillløkken legger du til manager.update (pygame.time.get_ticcks() / 1000.0) for å oppdatere GUI-manageren, og manager.draw_ui (skjerm) for å tegne GUI-elementene på skjermen.

Opprett en ny fil med navnet buttons.py og legg til koden med oppdateringene nedenfor:


import pygame_gui

# Pygame GUI-manager
manager = pygame_gui. UIManager((skjermbredde, skjermhøyde))

# Lag en knapp
button_width = 100
button_height = 30
button_x = dialogue_box_x + (dialogue_box_width - button_width) // 2
button_y = dialogue_box_y + (dialogue_box_height - button_height) // 2
button = pygame_gui.elements. UIButton (relative_rect=pygame. Rekt (button_x, button_y, button_width, button_height),
tekst='Klikk på meg',
manager=manager)

kjører = ekte
klokke = pygame.time. Klokke()

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

manager.process_events (hendelse)

keys = pygame.key.get_pressed()

# Sjekk kollisjon
hvis pygame. Rect (spiller_x, spiller_y, 50, 50).kolliderect (pygame. Rekt (enemy_x, enemy_y, 50, 50)):
dialogboks = ekte

screen.fill (SVART)

hvis dialogboks:
pygame.draw.rect (skjerm, GRÅ, (dialogue_box_x,
dialogboks_y,
dialogboksbredde,
dialogbokshøyde))
manager.update (pygame.time.get_ticcks() / 1000.0)
manager.draw_ui (skjerm)
ellers:
pygame.draw.rect (skjerm, HVIT, (spiller_x, spiller_y, 50, 50))
pygame.draw.rect (skjerm, HVIT, (enemy_x, enemy_y, 50, 50))

pygame.display.flip()
klokke.tick(60)

pygame.quit()

Nedenfor er utgangen:

Med disse endringene skal knappen nå være synlig inne i dialogboksen når den vises.

Legg til tekst ved hjelp av Python GUI

For å vise tilpasset tekst i dialogboksen, kan du bruke tekstfunksjonaliteten som tilbys av Python GUI-biblioteket.

Definer fontegenskapene ved hjelp av pygame.font. Font(). Lage en tekst variabel med ønsket innhold, og deretter gjengi den ved å bruke fonten og fargen som er spesifisert.

Opprett en ny fil med navnet text.py og legg til koden med oppdateringene nedenfor:


# Initialiser Pygame GUI-manager
manager = pygame_gui. UIManager((skjermbredde, skjermhøyde))

# Definer skriftegenskaper
font = pygame.font. Font(Ingen, 24)
tekst_farge = SVART

# ...

samtidig som løping:
# ...

hvis dialogboks:
pygame.draw.rect (skjerm, GRÅ, (dialogue_box_x,
dialogboks_y,
dialogboksbredde,
dialogbokshøyde))

# Legg til tekst i dialogboksen
tekst = "Hei, velkommen til spillet!"
rendered_text = font.render (tekst, ekte, tekst_farge)
text_rect = rendered_text.get_rect (center=(dialogue_box_x + dialogue_box_width // 2,
dialogue_box_y + dialogue_box_height // 2))

screen.blit (rendered_text, text_rect)

Nedenfor er utgangen:

Inkludert tilleggsfunksjoner

I tillegg til knapper og tekst, er det flere andre funksjoner du kan vurdere å legge til dialogsystemet ditt i Pygame. Her er noen flere eksempler:

Karakters følelser

Vis følelser eller ansiktsuttrykk for karakterer under dialog for å formidle deres humør eller reaksjoner. Dette kan oppnås ved å bruke animerte sprites eller bildeoverlegg som endres basert på konteksten til samtalen.

Betingede dialoger

Bruk betingede utsagn for å utløse spesifikke dialoger basert på visse kriterier, for eksempel spillerens fremgang, tidligere valg eller hendelser i spillet. Dette legger til dybde og personlig tilpassede interaksjoner basert på spillerens handlinger.

Voiceovers

Forbedre fordypningen i dialogsystemet ved å inkludere stemmeskuespill for karakterdialoger. Spill av lydklipp i Pygame som samsvarer med teksten som vises i dialogboksen for å gi karakterene en distinkt stemme.

Ved å inkorporere disse tilleggsfunksjonene kan du lage et mer dynamisk og engasjerende dialogsystem som forbedrer spillerens innlevelse og gir en unik spillopplevelse.

Beste praksis for å legge til dialogsystem

Når du implementerer et dialogsystem i Pygame, er det viktig å følge visse beste praksiser for å sikre effektivitet, vedlikehold og en jevn spilleropplevelse. Her er noen ekstra gode fremgangsmåter du bør vurdere:

Bruk datadrevet design

Lagre dialoginnhold, inkludert tekst, høyttalerinformasjon og dialogalternativer, i eksterne datafiler (f.eks. JSON, XML). Dette muliggjør enkel modifikasjon, lokalisering og administrasjon av dialoginnholdet uten å kreve kodeendringer.

Implementere en dialogleder

Opprett en dedikert dialogbehandlingsklasse eller modul som håndterer logikken for å administrere dialoginteraksjoner. Dette bidrar til å holde koden organisert og muliggjør enklere vedlikehold og utvidbarhet.

Spilletesting og balansering

Spilltest og balanser dialogsystemet regelmessig for å sikre at dialoger flyter naturlig, valg har meningsfulle konsekvenser, og tempoet stemmer overens med den generelle spillopplevelsen. Samle tilbakemeldinger fra spillere og gjenta dialogens innhold og struktur for å forbedre spillerengasjementet.

Lokaliseringsstøtte

Design dialogsystemet med lokalisering i tankene fra begynnelsen. Skille tekststrenger fra koden og bruk språkfiler eller lokaliseringsbiblioteker for å støtte flere språk. Dette muliggjør enklere oversettelse og lokalisering av dialoginnholdet.

Ved å følge disse beste fremgangsmåtene kan du sikre at dialogsystemet ditt er godt utformet, effektivt og fleksibelt, noe som muliggjør enklere vedlikehold og oppdateringer etter hvert som spillet utvikler seg.

Gjør spill mer engasjerende med dialogsystem

Å legge til et dialogsystem til spillet ditt kan gjøre det mer engasjerende ved å la spillere samhandle med ikke-spillerfigurer (NPC), avdekke historielinjer, ta valg og få verdifull informasjon.

Husk å designe dialogstrukturen med omtanke, bruk en modulær tilnærming, og vurder å integrere samleobjekter og nivåer for å berike spilleropplevelsen ytterligere.