Maak je gameplay-ervaring meeslepender door een dialoogsysteem te implementeren.

Het implementeren van een dialoogsysteem in Pygame kan de interactieve ervaring van een game aanzienlijk verbeteren. Dankzij een dialoogsysteem kan de game gesprekken, berichten en keuzes aan de speler presenteren, waardoor een meer meeslepende en boeiende gameplay ontstaat.

De Pygame-bibliotheek biedt de benodigde tools om een ​​grafische gebruikersinterface (GUI) te maken en gebruikersinvoer te verwerken, waardoor het een ideale keuze is voor het implementeren van een dialoogsysteem.

Maak een eenvoudig spel

Controleer voordat u begint of u dat hebt gedaan pip op uw systeem geïnstalleerd. Gebruik deze opdracht om het pyspel bibliotheek:

pip installeer pygame

Begin daarna met het maken van een eenvoudig spel waarbij de speler naar links en rechts kan bewegen terwijl hij een vijand ontwijkt.

De code die in dit artikel wordt gebruikt, is hierin beschikbaar GitHub-opslagplaats en is gratis voor u om te gebruiken onder de MIT-licentie.

Het onderstaande codefragment stelt het spelvenster in, initialiseert de eigenschappen van de speler en de vijand en voert de spellus uit.

# Importeer noodzakelijke bibliotheken
importeren pyspel
van pygame.locals importeren *

pygame.init()

# Stel het spelvenster in
schermbreedte, schermhoogte = 800, 600
scherm = pygame.display.set_mode((screen_width, screen_height))
pygame.display.set_caption("Mijn spel")

# Definieer kleuren
ZWART = (0, 0, 0)
WIT = (255, 255, 255)
GRIJS = (128, 128, 128)

# Spelereigenschappen
speler_x = 400
speler_y = 500
speler_snelheid = 5

# Vijandelijke eigenschappen
vijand_x = 400
vijand_y = 100
vijandelijke_snelheid = 3

hardlopen = WAAR
klok = pygame.tijd. Klok()

terwijl rennen:
voor evenement in pygame.event.get():
als gebeurtenis.type == STOP:
hardlopen = Vals

toetsen = pygame.key.get_pressed()

# Beweging van de speler
als sleutels[K_LEFT] En speler_x > 0:
speler_x -= speler_snelheid
als sleutels[K_RIGHT] En player_x player_x += player_speed

# Update vijandelijke positie
vijand_y += vijand_snelheid
als vijand_y > schermhoogte:
vijand_y = -50

# Controleer botsing
als pyspel. Rect (speler_x, speler_y, 50, 50).colliderect (pygame. Rect (vijand_x, vijand_y, 50, 50)):
# Implementeer hier het dialoogvenster
doorgang

schermvullend (ZWART)
pygame.draw.rect (scherm, WIT, (speler_x, speler_y, 50, 50))
pygame.draw.rect (scherm, WIT, (vijand_x, vijand_y, 50, 50))
pygame.display.flip()
klok.vinkje(60)

pygame.quit()

Hieronder is de uitvoer:

Dialoogvenster maken

Om een ​​dialoogvenster te implementeren, moet je het weergeven wanneer de speler de vijand aanraakt. Voeg de dialog_box variabele, die bepaalt of het dialoogvenster moet worden weergegeven of niet.

Binnen de spellus, controleer op een botsing tussen de speler en de vijand, en stel in als er een botsing is dialog_box naar WAAR. Binnen de staat waarin dialog_box is WAAR, teken met behulp van een grijze rechthoek op het scherm pygame.draw.rect() om het dialoogvenster weer te geven.

Maak een nieuw bestand met de naam dialoog.py en voeg de code toe met de onderstaande updates:

# Dialoogvenster eigenschappen
dialog_box_width = 400
dialog_box_height = 200
dialog_box_x = (screen_width - dialog_box_width) // 2
dialog_box_y = (screen_height - dialog_box_height) // 2
dialog_box = Vals
# ...
terwijl rennen:
voor evenement in pygame.event.get():
als gebeurtenis.type == STOP:
hardlopen = Vals
toetsen = pygame.key.get_pressed()
# Beweging van de speler
als sleutels[K_LEFT] En speler_x > 0:
speler_x -= speler_snelheid
als sleutels[K_RIGHT] En player_x player_x += player_speed
# Update vijandelijke positie
vijand_y += vijand_snelheid
als vijand_y > schermhoogte:
vijand_y = -50
# Controleer botsing
als pyspel. Rect (speler_x, speler_y, 50, 50).colliderect (pygame. Rect (vijand_x, vijand_y, 50, 50)):
dialog_box = WAAR
schermvullend (ZWART)
als dialog_box:
pygame.draw.rect (scherm, GRIJS, (dialogue_box_x,
dialog_box_y,
dialog_box_width,
dialog_box_height))

# Voeg hier dialoogtekst en knoppen toe
anders:
pygame.draw.rect (scherm, WIT, (speler_x, speler_y, 50, 50))
pygame.draw.rect (scherm, WIT, (vijand_x, vijand_y, 50, 50))
pygame.display.flip()
klok.vinkje(60)
pygame.quit()

Hieronder is de uitvoer:

Om het dialoogvenster functioneler en interactiever te maken, kunt u doorgaan met het toevoegen van knoppen en tekst.

Knoppen toevoegen met Python GUI

Om knoppen aan het dialoogvenster toe te voegen, kunt u een Python GUI-bibliotheek zoals Pygame GUI of PySimpleGUI gebruiken.

Installeer en importeer de pygame_gui module en maak vervolgens een Pygame GUI-manager met behulp van pygame_gui. UIManager. Maak daarna een knop met behulp van de UI-knop class geleverd door de Python GUI-bibliotheek.

Voeg binnen de spellus toe manager.update (pygame.time.get_ticks() / 1000.0) om de GUI-manager bij te werken, en manager.draw_ui (scherm) om de GUI-elementen op het scherm te tekenen.

Maak een nieuw bestand met de naam knoppen.py en voeg de code toe met de onderstaande updates:


importeren pygame_gui

# Pygame GUI-manager
manager = pygame_gui. UIManager((schermbreedte, schermhoogte))

# Maak een knop
knopbreedte = 100
knophoogte = 30
button_x = dialog_box_x + (dialogue_box_width - button_width) // 2
button_y = dialog_box_y + (dialogue_box_height - button_height) // 2
knop = pygame_gui.elements. UIButton (relative_rect=pygame. Rect (button_x, button_y, button_width, button_height),
tekst='Klik hier',
manager=manager)

hardlopen = WAAR
klok = pygame.tijd. Klok()

terwijl rennen:
voor evenement in pygame.event.get():
als event.type == pygame. ONTSLAG NEMEN:
hardlopen = Vals

manager.process_events (gebeurtenis)

toetsen = pygame.key.get_pressed()

# Controleer botsing
als pyspel. Rect (speler_x, speler_y, 50, 50).colliderect (pygame. Rect (vijand_x, vijand_y, 50, 50)):
dialog_box = WAAR

schermvullend (ZWART)

als dialog_box:
pygame.draw.rect (scherm, GRIJS, (dialogue_box_x,
dialog_box_y,
dialog_box_width,
dialog_box_height))
manager.update (pygame.time.get_ticks() / 1000.0)
manager.draw_ui (scherm)
anders:
pygame.draw.rect (scherm, WIT, (speler_x, speler_y, 50, 50))
pygame.draw.rect (scherm, WIT, (vijand_x, vijand_y, 50, 50))

pygame.display.flip()
klok.vinkje(60)

pygame.quit()

Hieronder is de uitvoer:

Met deze wijzigingen zou de knop nu zichtbaar moeten zijn in het dialoogvenster wanneer deze verschijnt.

Voeg tekst toe met behulp van Python GUI

Om aangepaste tekst in het dialoogvenster weer te geven, kunt u de tekstfunctionaliteit van de Python GUI-bibliotheek gebruiken.

Definieer de lettertype-eigenschappen met behulp van pygame.font. Lettertype(). Maak een tekst variabele met de gewenste inhoud en geef deze vervolgens weer met het opgegeven lettertype en de kleur.

Maak een nieuw bestand met de naam tekst.py en voeg de code toe met de onderstaande updates:


# Initialiseer Pygame GUI-manager
manager = pygame_gui. UIManager((schermbreedte, schermhoogte))

# Definieer lettertype-eigenschappen
lettertype = pygame.lettertype. Lettertype(Geen, 24)
tekst_kleur = ZWART

# ...

terwijl rennen:
# ...

als dialog_box:
pygame.draw.rect (scherm, GRIJS, (dialogue_box_x,
dialog_box_y,
dialog_box_width,
dialog_box_height))

# Voeg tekst toe aan het dialoogvenster
tekst = "Hallo, welkom bij het spel!"
gerenderde_tekst = font.render (tekst, WAAR, tekst kleur)
text_rect = gerenderde_text.get_rect (center=(dialogue_box_x + dialog_box_width // 2,
dialog_box_y + dialog_box_height // 2))

screen.blit (gerenderde_tekst, tekst_rect)

Hieronder is de uitvoer:

Inclusief extra functies

Naast knoppen en tekst zijn er verschillende andere functies die u kunt overwegen toe te voegen aan uw dialoogsysteem in Pygame. Hier zijn nog een paar voorbeelden:

Karakter Emoties

Toon emoties of gezichtsuitdrukkingen voor personages tijdens dialogen om hun stemming of reacties over te brengen. Dit kan worden bereikt door geanimeerde sprites of afbeeldingsoverlays te gebruiken die veranderen op basis van de context van het gesprek.

Voorwaardelijke dialogen

Gebruik voorwaardelijke uitspraken om specifieke dialogen te activeren op basis van bepaalde criteria, zoals de voortgang van de speler, eerdere keuzes of gebeurtenissen in het spel. Dit voegt diepte en gepersonaliseerde interacties toe op basis van de acties van de speler.

Voice overs

Verbeter de onderdompeling van het dialoogsysteem door stemacteurs op te nemen voor karakterdialogen. Speel audioclips af in Pygame die overeenkomen met de tekst die wordt weergegeven in het dialoogvenster om karakters een aparte stem te geven.

Door deze extra functies toe te voegen, kun je een dynamischer en boeiender dialoogsysteem creëren dat de onderdompeling van de speler verbetert en een unieke gameplay-ervaring biedt.

Best practices voor het toevoegen van een dialoogsysteem

Bij het implementeren van een dialoogsysteem in Pygame is het belangrijk om bepaalde best practices te volgen om efficiëntie, onderhoudbaarheid en een soepele spelerservaring te garanderen. Hier zijn enkele aanvullende praktische tips om te overwegen:

Gebruik gegevensgestuurd ontwerp

Bewaar dialooginhoud, inclusief tekst, sprekerinformatie en dialoogopties, in externe gegevensbestanden (bijv. JSON, XML). Dit maakt een eenvoudige wijziging, lokalisatie en beheer van de dialooginhoud mogelijk zonder dat er codewijzigingen nodig zijn.

Implementeer een dialoogmanager

Maak een speciale dialoogmanagerklasse of -module die de logica afhandelt voor het beheren van dialooginteracties. Dit helpt de code georganiseerd te houden en zorgt voor eenvoudiger onderhoud en uitbreidbaarheid.

Testen en balanceren

Test en balanceer regelmatig het dialoogsysteem om ervoor te zorgen dat dialogen op een natuurlijke manier vloeien, keuzes zinvolle gevolgen hebben en het tempo overeenkomt met de algehele gameplay-ervaring. Verzamel feedback van spelers en herhaal de inhoud en structuur van de dialoog om de betrokkenheid van spelers te verbeteren.

Ondersteuning voor lokalisatie

Ontwerp het dialoogsysteem vanaf het begin met lokalisatie in gedachten. Scheid tekstreeksen van de code en gebruik taalbestanden of lokalisatiebibliotheken om meerdere talen te ondersteunen. Dit zorgt voor een eenvoudigere vertaling en lokalisatie van de dialooginhoud.

Door deze best practices te volgen, kunt u ervoor zorgen dat uw dialoogsysteem goed ontworpen, efficiënt en flexibel is, waardoor onderhoud en updates eenvoudiger zijn naarmate uw spel zich ontwikkelt.

Maak games boeiender met dialoogsysteem

Door een dialoogsysteem aan je spel toe te voegen, kan het aantrekkelijker worden gemaakt door spelers in staat te stellen te communiceren met niet-spelerpersonages (NPC's), verhaallijnen te ontdekken, keuzes te maken en waardevolle informatie te verkrijgen.

Denk eraan om de dialoogstructuur doordacht te ontwerpen, een modulaire aanpak te gebruiken en te overwegen verzamelobjecten en niveaus te integreren om de spelerservaring verder te verrijken.