Leer hoe u de functie voor het opslaan en laden van spelvoortgang kunt gebruiken voor een naadloze game-ervaring.

In moderne game-ontwikkeling is de mogelijkheid om gamevoortgang op te slaan en te laden een cruciale functie die de gebruikerservaring en betrokkenheid verbetert. PyGame, een populaire bibliotheek voor het maken van 2D-games in Python, biedt de nodige tools om de functie voor opslaan en laden moeiteloos te implementeren.

Een eenvoudig spel maken

Controleer voordat u begint of u dat hebt gedaan pip op uw apparaat geïnstalleerd. Voer na het installeren van pip de onderstaande opdracht uit om het pyspel moduul:

pip installeer pygame

Om de implementatie van een opslag- en laadsysteem in PyGame te illustreren, begint u met het maken van een eenvoudig spel.

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.

In dit spel heeft de speler de mogelijkheid om naar links en rechts te bewegen. Hier is een voorbeeld van een codefragment dat de basisstructuur van het spel demonstreert:

instagram viewer
importeren pyspel

# Initialiseer Pygame
pygame.init()

# Stel het spelvenster in
vensterbreedte = 800
vensterhoogte = 600
venster = pygame.display.set_mode((vensterbreedte, vensterhoogte))
pygame.display.set_caption("Systeemhandleiding opslaan en laden")

# Spelvariabelen
speler_x = 400
speler_y = 500
speler_snelheid = 5

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

toetsen = pygame.key.get_pressed()
als toetsen[pygame. K_LEFT]:
speler_x -= speler_snelheid
als toetsen[pygame. K_RIGHT]:
player_x += player_speed

# Wis het scherm
venster.vullen((0, 0, 0))

# Teken de speler
pygame.draw.rect (venster, (255, 255, 255), (speler_x, speler_y, 50, 50))

# Werk de weergave bij
pygame.display.flip()

# Sluit het spel af
pygame.quit()

Gamestatus en gegevenspersistentie beheren

Voordat u de functionaliteit voor opslaan en laden implementeert, moet u een manier vinden om de spelstatus te beheren en de gegevens vast te houden. Een veel voorkomende benadering is om gebruik een Python-woordenboek om de relevante spelgegevens op te slaan. Hier is een voorbeeld van hoe u de vorige code kunt wijzigen om gamestatusbeheer op te nemen:

# Spelvariabelen
game_state = {
'speler_x': 400,
'speler_y': 500
}

# Spellus
hardlopen = WAAR
terwijl rennen:
# ...

toetsen = pygame.key.get_pressed()
als toetsen[pygame. K_LEFT]:
game_state['speler_x'] -= player_speed
als toetsen[pygame. K_RIGHT]:
game_state['speler_x'] += player_speed

# ...

pygame.display.flip()

Opslaan en laden functionaliteit implementeren

Om het opslaan en laden van spelvoortgang mogelijk te maken, kunt u gebruikmaken van de ingebouwde functie van Python augurk module, waarmee we Python-objecten kunnen serialiseren en deserialiseren. Maak een nieuw bestand met de naam save-game.py en voeg de code toe met de onderstaande updates:

game_state = {
'speler_x': speler_x,
'speler_y': speler_y
}

# Sla spelstatus op
defsave_game_state(game_state, bestandsnaam):
poging:
met open (bestandsnaam, 'wb') als bestand:
pickle.dump (game_state, bestand)
afdrukken("Spelstatus is succesvol opgeslagen!")
behalve IOEfout:
afdrukken("Fout: Kan spelstatus niet opslaan.")

# Laad spelstatus
defload_game_state(bestandsnaam):
poging:
met open (bestandsnaam, 'rb') als bestand:
game_state = pickle.load (bestand)
afdrukken("Spelstatus is succesvol geladen!")
opbrengst game_state
behalve (IOFout, augurk. UnpicklingFout):
afdrukken("Fout: kan de spelstatus niet laden.")

# Spellus
hardlopen = WAAR
terwijl rennen:

# ...

toetsen = pygame.key.get_pressed()
als toetsen[pygame. K_LEFT]:
speler_x -= speler_snelheid
game_state['speler_x'] = speler_x
als toetsen[pygame. K_RIGHT]:
player_x += player_speed
game_state['speler_x'] = speler_x

als toetsen[pygame. K_s]:
save_game_state (spel_status, 'save_game.pickle')
als toetsen[pygame. K_l]:
game_state = load_game_state('save_game.pickle')
player_x = game_state['speler_x']

# ...

# ...

Hieronder is de uitvoer:

Ontwerpen van een gebruikersinterface voor Save Slots

Om een ​​interface voor opslaan en laden te bieden, kunt u opslagvakken weergeven waarmee de speler kan kiezen welk vak hij wil opslaan of laden. Voor dit voorbeeld worden de opties weergegeven in de console, maar u kunt gebruiken Python's GUI-frameworks om een ​​gebruiksvriendelijkere interface te creëren.

Maak een save_slots lijst die de beschikbare opslagslots vertegenwoordigt. Voeg ook een toe geselecteerd_slot variabele om het door de speler gekozen slot bij te houden.

Toon de beschikbare opslagplaatsen wanneer de speler op de opslagknop drukt (K_s). De speler kan een slot kiezen door op de overeenkomstige cijfertoets te drukken (K_1, K_2, of K_3). Als een slot is geselecteerd, wordt de spelstatus opgeslagen in een bestand met de naam van het geselecteerde slot.

Evenzo, wanneer de speler op de laadknop drukt (K_l), geef de opslagslots weer. De speler kan een slot kiezen door op de toetsen te drukken K_a, K_b, of K_c om de spelstatus te laden. Als alternatief kan dat gebruik aanraakinvoer in plaats van toetsenbordinvoer voor slotselectie. Als een slot is geselecteerd, wordt de spelstatus geladen vanuit het bijbehorende bestand.

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

# Spelvariabelen
save_slots = ['Gleuf 1', 'Gleuf 2', 'Gleuf 3']
geselecteerde_slot = Geen

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

als event.type == pygame. TOETS NEER:
als event.key == pygame. K_s:
# Toon opslagslots
geselecteerde_slot = Geen
voor ik, slot in opsommen (save_slots):
afdrukken(f"Sleuf opslaan {ik+1}: {sleuf}")
afdrukken("Kies een slot om het spel op te slaan.")

als event.key == pygame. K_l:
afdrukken("Selecteer Slot:- a - Slot 1, b - Slot 3, c - Slot 3")
# Toon opslagslots
geselecteerde_slot = Geen
voor ik, slot in opsommen (save_slots):
afdrukken(f"Sleuf opslaan {ik+1}: {sleuf}")
afdrukken("Kies een slot om het spel te laden.")

als evenement.sleutel in [pygame. K_1, pygame. K_2, pygame. K_3]:
# Bewaar of laad het spel op basis van het geselecteerde slot
slot_index = event.key - pygame. K_1
selected_slot = save_slots[slot_index]

save_game_state (spel_status, F"{selected_slot}.augurk")
afdrukken(f"Spel opgeslagen in {selected_slot}!")

als evenement.sleutel in [pygame. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key - pygame. K_a
selected_slot = save_slots[slot_index]
game_state = load_game_state(F"{selected_slot}.augurk")
player_x = game_state['speler_x']
afdrukken(f"Spel geladen vanaf {selected_slot}!")
# ...

pygame.display.flip()

# ...

Hieronder is de uitvoer:

Geen toeschrijving vereist: Screenshot door Imran

Omgaan met overschrijfopties

Om opties te bieden voor het overschrijven van bestaande opgeslagen bestanden, kunt u een waarschuwingsbericht implementeren dat de speler om bevestiging vraagt ​​voordat een opgeslagen bestand wordt overschreven. Maak een nieuw bestand met de naam overschrijven-opslaan.py en wijzig de code met de onderstaande updates:

# Sla spelstatus op
defsave_game_state(game_state, bestandsnaam):
als os.path.exists (bestandsnaam):
# Vraag om bevestiging om het bestaande opslagbestand te overschrijven
overschrijven = invoer("Bestand opslaan bestaat al. Wil je overschrijven? (j/n): ")
als overwrite.lower() != 'j':
afdrukken("Opslaan geannuleerd.")
opbrengst

poging:
met open (bestandsnaam, 'wb') als bestand:
pickle.dump (game_state, bestand)
afdrukken("Spelstatus is succesvol opgeslagen!")
behalve IOEfout:
afdrukken("Fout: Kan spelstatus niet opslaan.")

# ...

# Laad spelstatus
defload_game_state(bestandsnaam):
alsniet os.path.exists (bestandsnaam):
afdrukken("Fout: opslagbestand bestaat niet.")
opbrengstGeen

poging:
met open (bestandsnaam, 'rb') als bestand:
game_state = pickle.load (bestand)
afdrukken("Spelstatus is succesvol geladen!")
opbrengst game_state
behalve (IOFout, augurk. UnpicklingFout):
afdrukken("Fout: kan de spelstatus niet laden.")
opbrengstGeen

# ...

In de bovenstaande code controleer je, voordat je een spelstatus opslaat, of het opslagbestand al bestaat met behulp van os.pad.bestaat(). Als dit het geval is, vraagt ​​u de speler om bevestiging om het bestaande opslagbestand te overschrijven. Als de speler ervoor kiest om niet te overschrijven, wordt de opslagbewerking geannuleerd.

Op dezelfde manier controleer je, voordat je een spelstatus laadt, of het opslagbestand bestaat met behulp van os.pad.bestaat(). Als dit niet het geval is, informeert u de speler met een foutmelding.

Best Practices voor Opslaan en Laden Systeem

Houd bij het implementeren van een opslag- en laadsysteem in PyGame of een ander game-ontwikkelingsproject rekening met de volgende best practices:

  • Gebruik een goed gedefinieerde gegevensstructuur om de spelstatus weer te geven en serialiseer deze met behulp van een serialisatiebibliotheek zoals augurk. Hierdoor kun je de volledige spelstatus eenvoudig opslaan en laden.
  • Maak een speciale map of map om opgeslagen bestanden op te slaan. Dit helpt bij het organiseren van de opgeslagen bestanden en voorkomt dat de hoofdmap van het spel vol raakt.
  • Implementeer foutafhandeling en geef informatieve foutmeldingen om te helpen bij foutopsporing en probleemoplossing. Dit helpt spelers eventuele problemen te begrijpen die zich kunnen voordoen tijdens het opslaan en laden.
  • Overweeg om meerdere save-slots te implementeren, zodat spelers meerdere game-saves kunnen hebben. Dit geeft spelers de flexibiliteit om verschillende paden te verkennen of specifieke delen van het spel opnieuw te spelen zonder hun voortgang te overschrijven.

Maak games boeiender met het opslag- en laadsysteem

De toevoeging van de functie voor opslaan en laden kan de betrokkenheid en het plezier van een game aanzienlijk vergroten. Hiermee kunnen spelers hun voortgang opslaan en op hun gemak terugkeren naar het spel. Bovendien opent het mogelijkheden voor het creëren van complexe spelwerelden, waar keuzes en acties van spelers blijvende gevolgen hebben.

Door een opslag- en laadsysteem te implementeren, kunt u uw spelers in staat stellen een meer meeslepende en bevredigende spelervaring te hebben.