Pokud vaše hra není příliš krátká, pomáhá vám ukládat postup. Dokonce i krátké hry mohou těžit z ukládání vysokých skóre.

Přidání systému ukládání a načítání do vaší hry může výrazně zlepšit zážitek z hráče. Umožňuje hráčům pokračovat ve svém pokroku, pokračovat v herních relacích a experimentovat s různými strategiemi, aniž by přišli o těžce vydělané úspěchy.

Budete příjemně překvapeni, jak jednoduché je přidat tuto funkci do vaší hry pomocí knihovny Python’s Arcade.

Vytvořte jednoduchou hru

Začněte tvorbou jednoduchá hra, kde se hráč může pohybovat vlevo a vpravo.

Kód použitý v tomto článku je k dispozici v tomto úložiště GitHub a můžete jej používat zdarma pod licencí MIT.

Vytvořte nový soubor s názvem jednoduchá hra.py a přidejte níže uvedený kód:

import pasáž

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
modrá = arkáda.barva. MODRÝ

třídaGameWindow(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
self.player_x = šířka // 2

defon_draw(já):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, modrá)

instagram viewer

defAktualizace(self, delta_time):
složit

defon_key_press(vlastní, klíč, modifikátory):
-li klíč == arcade.key. VLEVO, ODJET:
self.player_x -= RYCHLOST HRÁČE
elif klíč == arcade.key. ŽE JO:
self.player_x += RYCHLOST HRÁČE

defhlavní():
okno = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

-li __jméno__ == '__hlavní__':
hlavní()

Kód vytvoří okno s modrým obdélníkem představujícím hráče. Hráč se může pohybovat doleva a doprava pomocí kláves se šipkami doleva a doprava.

Správa herních stavů

Chcete-li implementovat systém ukládání a načítání, musíte spravovat různé stavy hry. Stav hry představuje aktuální stav hry, včetně pozic objektů, skóre a dalších relevantních dat. V tomto příkladu se zaměřte pouze na hráčovu souřadnici x.

Pro správu herních situací zaveďte a GameState třída, která zapouzdřuje data hry a poskytuje metody pro jejich uložení a načtení. Zde je kód:

třídaGameState:
def__init__(já):
self.player_x = 0

Ukládání herních dat

Chcete-li uložit data hry, prodlužte GameWindow class a v případě potřeby přidejte metodu pro uložení stavu hry. Pro jednoduchost použijte formát JSON. Zde je kód:

V uložit hru metoda, vytvořit pythonovský slovník obsahující příslušné herní údaje. Poté jej serializujte do souboru JSON s názvem uložit.json.

import json

třídaGameWindow(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
self.game_state = GameState()

defuložit hru(já):
data = {
'player_x': self.game_state.player_x
}
s OTEVŘENO('save.json', 'w') tak jako soubor:
json.dump (data, soubor)
tisknout (data)

defon_draw(já):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, modrá)

defAktualizace(self, delta_time):
složit

defon_key_press(vlastní, klíč, modifikátory):
-li klíč == arcade.key. VLEVO, ODJET:
self.game_state.player_x -= RYCHLOST HRÁČE
elif klíč == arcade.key. ŽE JO:
self.game_state.player_x += PLAYER_SPEED
elif klíč == arcade.key. S:
self.save_game()

Načítání herních dat

Chcete-li načíst herní data, prodlužte GameWindow třídy dále a přidejte metodu pro načtení stavu hry. Vytvořte nový soubor s názvem load-game.py a přidejte kód s níže uvedenými aktualizacemi:

třídaGameWindow(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
self.game_state = GameState()
self.load_game()

defnahrát hru(já):
Snaž se:
s OTEVŘENO('save.json', 'r') tak jako soubor:
data = json.load (soubor)
self.game_state.player_x = data['player_x']
až na FileNotFoundError:
složit

defon_key_press(vlastní, klíč, modifikátory):
-li klíč == arcade.key. L:
self.load_game()

The nahrát hru metoda se pokouší otevřít uložit.json soubor a načtěte herní data. Poté aktualizuje stav hry načtenými daty. Pokud soubor neexistuje, můžete výjimku ignorovat a ponechat výchozí stav hry.

Včetně dalších funkcí

Můžete přidat další funkce pro vylepšení systému ukládání a načítání hry.

Ukládání nejvyšších skóre

Ukládání vysokých skóre vedle stavu hry je běžnou funkcí mnoha her. Můžeš spravovat skóre a uložit vysoké skóre pomocí tohoto systému. Vytvořte nový soubor s názvem high-score.py a přidejte kód s níže uvedenými aktualizacemi:

třídaGameWindow(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
self.high_score = 0

defnahrát hru(já):
Snaž se:
s OTEVŘENO('save.json', 'r') tak jako soubor:
data = json.load (soubor)
tisknout (data)
self.player_x = data.get('player_x', self.player_x)
self.high_score = data.get('vysoké skóre', vlastní.nejvyšší_skóre)
až na FileNotFoundError:
složit

defuložit hru(já):
data = {
'player_x': self.player_x,
'vysoké skóre': self.high_score
}
s OTEVŘENO('save.json', 'w') tak jako soubor:
json.dump (data, soubor)
tisknout (data)

defon_key_press(vlastní, klíč, modifikátory):
-li klíč == arcade.key. VLEVO, ODJET:
self.player_x -= RYCHLOST HRÁČE
elif klíč == arcade.key. ŽE JO:
self.player_x += RYCHLOST HRÁČE
self.high_score += 1

Funkce automatického ukládání

Chcete-li hráčům poskytnout klid a zabránit ztrátě postupu, můžete v pravidelných intervalech automaticky ukládat stav hry. Vytvořte nový soubor s názvem auto-save.py a přidejte kód s níže uvedenými aktualizacemi:

import čas

třídaGameWindow(pasáž. Okno):
def__init__(vlastní, šířka, výška):
super().__init__(šířka, výška)
self.game_state = GameState()

# Uložit každých 6 sekund
self.autosave_interval = 6
self.last_save_time = time.time()

defAktualizace(self, delta_time):
aktuální_čas = čas.čas()
time_diff = aktuální_čas - self.last_save_time

-li time_diff >= self.autosave_interval:
self.save_game()
tisk("Uložené")
self.last_save_time = aktuální_čas

V tomto fragmentu kódu je Aktualizace metoda zkontroluje, zda uplynul zadaný časový interval od posledního uložení. Pokud ano, spustí se uložit hru metoda GameWindow třídy automaticky uložit stav hry. Upravte autosave_interval hodnotu podle požadavků vaší hry.

Ověřování herních dat

Ověření načtených herních dat je zásadní pro zajištění jejich integrity a konzistence. Ověřování dat můžete snadno začlenit do našeho systému ukládání a načítání:

třídaGameState:
def__init__(já):
self.player_x = 0

defsave_state(já):
-li self.is_valid_state():
data = {
'player_x': self.player_x
}

s OTEVŘENO('save.json', 'w') tak jako soubor:
json.dump (data, soubor)

defstav_načtení(já):
s OTEVŘENO('save.json', 'r') tak jako soubor:
data = json.load (soubor)

-li self.validate_loaded_data (data):
self.player_x = data['player_x']
jiný:
tisk("Chyba!")

defis_valid_state(já):
# Zde proveďte logiku ověření
# Vraťte True, pokud je stav platný, False jinak
složit

defvalidate_loaded_data(já, data):
# Proveďte ověření načtených dat
# Vraťte True, pokud jsou data platná, False jinak
složit

Začleněním těchto dalších funkcí do systému ukládání a načítání můžete vytvořit všestrannější a robustnější hru zážitek, který hráčům nabízí možnost ukládat více herních situací, sledovat nejvyšší skóre, povolit automatické ukládání a zajistit data integrita.

Nejlepší postupy pro systém ukládání a načítání

Implementace systému ukládání a načítání je důležitým aspektem vývoje hry. Pro zajištění robustního a spolehlivého systému je nezbytné dodržovat osvědčené postupy. Zde je několik klíčových postupů, které je třeba zvážit:

Šifrovat citlivá data

Pokud vaše hra obsahuje citlivé informace, jako jsou hesla, osobní údaje nebo nákupy v aplikaci, je důležité zašifrovat uložený stav hry. Šifrování přidává další vrstvu zabezpečení, chrání soukromí hráče a zabraňuje neoprávněnému přístupu k jeho datům. Používejte šifrovací algoritmy a knihovny k ochraně citlivých informací.

Ověřte načtená data

Před načtením herních dat je nezbytné je ověřit, abyste zajistili jejich integritu a konzistenci. Ověřte, že načtená data odpovídají očekávanému formátu, struktuře a omezením vaší hry.

Provádějte ověřovací kontroly kritických datových polí, abyste se vyhnuli haváriím nebo podvodům. Implementujte robustní mechanismy ověřování dat pro zpracování potenciálních chyb nebo neočekávaných dat.

Zvládejte chyby elegantně

Při práci se souborovými I/O operacemi může dojít k chybám. Je důležité, abyste s těmito chybami zacházeli elegantně a poskytovali hráči informativní chybové zprávy. Chyť a ošetřuj výjimky, jako např FileNotFoundError nebo PermissionErrorběhem operací ukládání a načítání.

Zobrazujte uživatelsky přívětivé chybové zprávy, které hráče navedou a zabrání frustraci. Kromě toho zvažte implementaci protokolování chyb, které vám pomůže diagnostikovat a opravit problémy.

Otestujte funkci ukládání a načítání

Důkladně otestujte funkci ukládání a načítání vaší hry, abyste zajistili její spolehlivost a správnost. Vytvářejte testovací případy, které pokrývají různé scénáře, jako je ukládání v různých herních situacích, načítání z platných a neplatných uložených souborů a testování okrajových případů.

Ověřte, zda je stav hry správně uložen a načten a zda dochází k očekávanému chování. Automatizované testovací rámce mohou pomoci při vytváření komplexních testovacích sad.

Udělejte si hry zábavnější díky systému ukládání a načítání

Přidání systému ukládání a načítání může učinit hry poutavějšími tím, že hráčům poskytne pocit kontinuity a pokroku. Hráči mohou volně experimentovat, zkoušet různé přístupy a vrátit se do hry později, aniž by přišli o své úspěchy.

Tato funkce také umožňuje hráčům soutěžit s přáteli nebo se sami vyzvat, aby překonali své předchozí vysoké skóre, což přidává znovu hratelnost a dlouhodobé zapojení do vaší hry.