Ak vaša hra nie je príliš krátka, pomôže vám, ak si budete môcť uložiť pokrok. Dokonca aj krátke hry môžu ťažiť z ukladania vysokých skóre.

Pridanie systému ukladania a načítania do vašej hry môže výrazne zlepšiť zážitok hráča. Umožňuje hráčom pokračovať v napredovaní, pokračovať v herných reláciách a experimentovať s rôznymi stratégiami bez straty ťažko získaných úspechov.

Budete príjemne prekvapení, aké jednoduché je pridať túto funkciu do vašej hry pomocou knižnice Arcade v Pythone.

Vytvorte jednoduchú hru

Začnite tvorbou jednoduchá hra, kde sa hráč môže pohybovať vľavo a vpravo.

Kód použitý v tomto článku je dostupný v tomto úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.

Vytvorte nový súbor s názvom jednoduchá hra.py a pridajte nižšie uvedený kód:

importovať pasáž

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
modrá = arkáda.farba. MODRÁ

triedaGameWindow(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
self.player_x = šírka // 2

defon_draw(ja):

instagram viewer

arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, Modrá)

defaktualizovať(self, delta_time):
prejsť

defon_key_press(ja, kľúč, modifikátory):
ak kľúč == arcade.key. VĽAVO:
self.player_x -= PLAYER_SPEED
elif kľúč == arcade.key. SPRÁVNY:
self.player_x += PLAYER_SPEED

defHlavná():
okno = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

ak __meno__ == '__Hlavná__':
Hlavná()

Kód vytvorí okno s modrým obdĺžnikom reprezentujúcim hráča. Hráč sa môže pohybovať doľava a doprava pomocou šípok doľava a doprava.

Správa herných stavov

Ak chcete implementovať systém ukladania a načítania, musíte spravovať rôzne stavy hry. Stav hry predstavuje aktuálny stav hry vrátane pozícií objektov, skóre a iných relevantných údajov. V tomto príklade sa zamerajte iba na x-ovú súradnicu hráča.

Na riadenie herných stavov zaveďte a GameState trieda, ktorá zapuzdruje údaje hry a poskytuje metódy na ich uloženie a načítanie. Tu je kód:

triedaGameState:
def__init__(ja):
self.player_x = 0

Ukladanie údajov o hre

Ak chcete uložiť údaje o hre, predĺžte GameWindow triedy a v prípade potreby pridajte metódu na uloženie stavu hry. Pre jednoduchosť použite formát JSON. Tu je kód:

V uložiť hru metóda, vytvorte pythonovský slovník obsahujúce príslušné herné údaje. Potom ho serializujte do súboru JSON s názvom save.json.

importovať json

triedaGameWindow(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
self.game_state = GameState()

defuložiť hru(ja):
údaje = {
'player_x': self.game_state.player_x
}
s OTVORENÉ('save.json', 'w') ako súbor:
json.dump (údaje, súbor)
tlačiť (dáta)

defon_draw(ja):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, Modrá)

defaktualizovať(self, delta_time):
prejsť

defon_key_press(ja, kľúč, modifikátory):
ak kľúč == arcade.key. VĽAVO:
self.game_state.player_x -= PLAYER_SPEED
elif kľúč == arcade.key. SPRÁVNY:
self.game_state.player_x += PLAYER_SPEED
elif kľúč == arcade.key. S:
self.save_game()

Načítavanie údajov hry

Ak chcete načítať údaje o hre, predĺžte GameWindow triedy ďalej a pridajte metódu na načítanie stavu hry. Vytvorte nový súbor s názvom load-game.py a pridajte kód s nižšie uvedenými aktualizáciami:

triedaGameWindow(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
self.game_state = GameState()
self.load_game()

defnačítať hru(ja):
skúste:
s OTVORENÉ('save.json', 'r') ako súbor:
data = json.load (súbor)
self.game_state.player_x = údaje['player_x']
okrem FileNotFoundError:
prejsť

defon_key_press(ja, kľúč, modifikátory):
ak kľúč == arcade.key. L:
self.load_game()

The načítať hru metóda sa pokúša otvoriť save.json súbor a získajte údaje o hre. Potom aktualizuje stav hry pomocou načítaných údajov. Ak súbor neexistuje, môžete výnimku jednoducho ignorovať a ponechať predvolený stav hry.

Vrátane ďalších funkcií

Môžete pridať ďalšie funkcie na zlepšenie systému ukladania a načítania hry.

Ukladanie najvyšších skóre

Ukladanie vysokých skóre popri stave hry je bežnou funkciou v mnohých hrách. Môžeš spravovať skóre a pomocou tohto systému uložte najvyššie skóre. Vytvorte nový súbor s názvom high-score.py a pridajte kód s nižšie uvedenými aktualizáciami:

triedaGameWindow(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
self.high_score = 0

defnačítať hru(ja):
skúste:
s OTVORENÉ('save.json', 'r') ako súbor:
data = json.load (súbor)
tlačiť (dáta)
self.player_x = data.get('player_x', self.player_x)
self.high_score = data.get('vysoké skóre', vlastné.najvyššie_skóre)
okrem FileNotFoundError:
prejsť

defuložiť hru(ja):
údaje = {
'player_x': self.player_x,
'vysoké skóre': vlastné.najvyššie_skóre
}
s OTVORENÉ('save.json', 'w') ako súbor:
json.dump (údaje, súbor)
tlačiť (dáta)

defon_key_press(ja, kľúč, modifikátory):
ak kľúč == arcade.key. VĽAVO:
self.player_x -= PLAYER_SPEED
elif kľúč == arcade.key. SPRÁVNY:
self.player_x += PLAYER_SPEED
self.vysoké_skóre += 1

Funkcia automatického ukladania

Ak chcete hráčom poskytnúť pokoj a zabrániť strate postupu, môžete v pravidelných intervaloch automaticky ukladať stav hry. Vytvorte nový súbor s názvom auto-save.py a pridajte kód s nižšie uvedenými aktualizáciami:

importovať čas

triedaGameWindow(arkáda. okno):
def__init__(ja, šírka, výška):
super().__init__(šírka, výška)
self.game_state = GameState()

# Uložiť každých 6 sekúnd
self.autosave_interval = 6
self.last_save_time = time.time()

defaktualizovať(self, delta_time):
aktuálny_čas = čas.čas()
time_diff = aktuálny_čas - self.last_save_time

ak time_diff >= self.autosave_interval:
self.save_game()
vytlačiť ("uložené")
self.last_save_time = aktuálny_čas

V tomto útržku kódu je aktualizovať metóda skontroluje, či od posledného uloženia uplynul zadaný časový interval. Ak áno, spustí sa uložiť hru metóda GameWindow triedy na automatické uloženie stavu hry. Upravte autosave_interval hodnotu podľa požiadaviek vašej hry.

Overenie údajov hry

Overenie načítaných herných údajov je nevyhnutné na zabezpečenie ich integrity a konzistencie. Overenie údajov môžete jednoducho začleniť do nášho systému ukladania a načítania:

triedaGameState:
def__init__(ja):
self.player_x = 0

defsave_state(ja):
ak self.is_valid_state():
údaje = {
'player_x': self.player_x
}

s OTVORENÉ('save.json', 'w') ako súbor:
json.dump (údaje, súbor)

defload_state(ja):
s OTVORENÉ('save.json', 'r') ako súbor:
data = json.load (súbor)

ak self.validate_loaded_data (údaje):
self.player_x = údaje['player_x']
inak:
vytlačiť ("Chyba!")

defis_valid_state(ja):
# Tu vykonajte logiku overenia
# Vráti True, ak je stav platný, False inak
prejsť

defvalidate_loaded_data(ja, údaje):
# Vykonajte overenie načítaných údajov
# Vráti hodnotu True, ak sú údaje platné, inak hodnotu False
prejsť

Začlenením týchto dodatočných funkcií do systému ukladania a načítania môžete vytvoriť všestrannejšie a robustnejšie hranie zážitok, ktorý hráčom ponúka možnosť ukladať viaceré herné situácie, sledovať najvyššie skóre, povoliť automatické ukladanie a zabezpečiť dáta bezúhonnosť.

Osvedčené postupy pre systém uloženia a načítania

Implementácia systému ukladania a načítania je dôležitým aspektom vývoja hry. Na zabezpečenie robustného a spoľahlivého systému je nevyhnutné dodržiavať osvedčené postupy. Tu je niekoľko kľúčových postupov, ktoré treba zvážiť:

Šifrovanie citlivých údajov

Ak vaša hra obsahuje citlivé informácie, ako sú heslá, osobné údaje alebo nákupy v aplikácii, je dôležité zašifrovať uložený stav hry. Šifrovanie pridáva ďalšiu vrstvu zabezpečenia, chráni súkromie hráča a zabraňuje neoprávnenému prístupu k jeho údajom. Využite šifrovacie algoritmy a knižnice na ochranu citlivých informácií.

Overte načítané údaje

Pred načítaním údajov o hre je nevyhnutné ich overiť, aby sa zabezpečila ich integrita a konzistencia. Overte, či načítané údaje zodpovedajú očakávanému formátu, štruktúre a obmedzeniam vašej hry.

Vykonajte overovacie kontroly kritických dátových polí, aby ste predišli zlyhaniam alebo podvádzaniu. Implementujte robustné mechanizmy overovania údajov na spracovanie potenciálnych chýb alebo neočakávaných údajov.

Spravujte chyby elegantne

Pri práci so súbormi I/O operáciami sa môžu vyskytnúť chyby. Je dôležité, aby ste tieto chyby zvládli elegantne a poskytli hráčovi informatívne chybové hlásenia. Chytajte a zvládajte výnimky, ako napr FileNotFoundError alebo PermissionErrorpočas operácií ukladania a načítania.

Zobrazujte užívateľsky prívetivé chybové hlásenia, ktoré nasmerujú hráčov a zabránia frustrácii. Okrem toho zvážte implementáciu protokolovania chýb, ktoré vám pomôže diagnostikovať a opraviť problémy.

Otestujte funkčnosť ukladania a načítania

Dôkladne otestujte funkčnosť ukladania a načítania vašej hry, aby ste zaistili jej spoľahlivosť a správnosť. Vytvorte testovacie prípady, ktoré pokrývajú rôzne scenáre, ako je ukladanie v rôznych herných situáciách, načítanie z platných a neplatných úložných súborov a testovanie okrajových prípadov.

Overte, či je stav hry správne uložený a načítaný a či došlo k očakávanému správaniu. Automatizované testovacie rámce môžu pomôcť pri vytváraní komplexných testovacích balíkov.

Urobte z hier väčšiu zábavu so systémom uloženia a načítania

Pridanie systému ukladania a načítania môže urobiť hry pútavejšími tým, že hráčom poskytne pocit kontinuity a pokroku. Hráči môžu voľne experimentovať, skúšať rôzne prístupy a vrátiť sa do hry neskôr bez straty svojich úspechov.

Táto funkcia tiež umožňuje hráčom súťažiť s priateľmi alebo sa vyzvať, aby prekonali svoje predchádzajúce vysoké skóre, čím sa zvyšuje znovuhrateľnosť a dlhodobá angažovanosť vašej hry.