Osim ako vaša igra nije vrlo kratka, pomaže vam da možete sačuvati napredak. Čak i kratke igre mogu imati koristi od spremanja visokih rezultata.

Dodavanje sustava spremanja i učitavanja vašoj igri može uvelike poboljšati iskustvo igrača. Omogućuje igračima da ustraju u svom napretku, nastave sesije igranja i eksperimentiraju s različitim strategijama bez gubitka teško zarađenih postignuća.

Bit ćete ugodno iznenađeni koliko je jednostavno dodati ovu značajku svojoj igri pomoću Python Arcade knjižnice.

Stvorite jednostavnu igru

Započnite stvaranjem jednostavna igra u kojoj se igrač može kretati lijevo i desno.

Kôd korišten u ovom članku dostupan je u ovom GitHub spremište i besplatan je za korištenje pod MIT licencom.

Stvorite novu datoteku pod nazivom jednostavna igra.py i dodajte donji kod:

uvoz arkada

SCREEN_WIDTH = 800
VISINA_EKRANA = 600
PLAYER_SPEED = 5
plava = arkada.boja. PLAVA

razredaGameWindow(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
self.player_x = širina // 2

instagram viewer

defizvlačenje(sebe):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, plava)

defAžuriraj(sam, delta_vrijeme):
proći

defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= PLAYER_SPEED
elif ključ == arkada.ključ. PRAVO:
self.player_x += PLAYER_SPEED

defglavni():
prozor = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
arkada.run()

ako __ime__ == '__glavni__':
glavni()

Kod stvara prozor s plavim pravokutnikom koji predstavlja igrača. Igrač se može pomicati lijevo i desno koristeći lijeve i desne tipke sa strelicama.

Upravljanje stanjima igre

Da biste implementirali sustav spremanja i učitavanja, morate upravljati različitim stanjima igre. Stanje igre predstavlja trenutno stanje igre, uključujući položaje objekata, rezultate i druge relevantne podatke. Za ovaj primjer, usredotočite se samo na x-koordinatu igrača.

Za upravljanje stanjima igre, uvedite a GameState klasa koja enkapsulira podatke igre i pruža metode za njihovo spremanje i učitavanje. Evo koda:

razredaGameState:
def__u tome__(sebe):
self.player_x = 0

Spremanje podataka igre

Da biste spremili podatke igre, proširite GameWindow klasu i dodajte metodu za spremanje stanja igre kad god je potrebno. Za jednostavnost koristite JSON format. Evo koda:

u Spremi igru metoda, stvoriti Python rječnik koji sadrži relevantne podatke o igri. Zatim ga serijalizirajte u JSON datoteku pod nazivom spremi.json.

uvoz json

razredaGameWindow(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
self.game_state = GameState()

defSpremi igru(sebe):
podaci = {
'player_x': self.game_state.player_x
}
s otvoren('save.json', 'w') kao datoteka:
json.dump (podaci, datoteka)
ispis (podaci)

defizvlačenje(sebe):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, plava)

defAžuriraj(sam, delta_vrijeme):
proći

defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.game_state.player_x -= PLAYER_SPEED
elif ključ == arkada.ključ. PRAVO:
self.game_state.player_x += PLAYER_SPEED
elif ključ == arkada.ključ. S:
self.save_game()

Učitavanje podataka igre

Za učitavanje podataka igre, proširite GameWindow klasu dalje i dodajte metodu za učitavanje stanja igre. Stvorite novu datoteku pod nazivom load-game.py i dodajte kod sa sljedećim ažuriranjima:

razredaGameWindow(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
self.game_state = GameState()
self.load_game()

defload_game(sebe):
probati:
s otvoren('save.json', 'r') kao datoteka:
podaci = json.load (datoteka)
self.game_state.player_x = podaci['player_x']
osim FileNotFoundError:
proći

defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. L:
self.load_game()

The load_game metoda pokušava otvoriti spremi.json datoteku i dohvatite podatke igre. Zatim ažurira stanje igre s učitanim podacima. Ako datoteka ne postoji, možete samo zanemariti iznimku, ostavljajući zadano stanje igre.

Uključujući dodatne značajke

Možete dodati više značajki kako biste poboljšali sustav spremanja i učitavanja igre.

Spremanje najboljih rezultata

Spremanje visokih rezultata uz stanje igre uobičajena je značajka u mnogim igrama. Možeš upravljati rezultatima i spremite visoku ocjenu pomoću ovog sustava. Stvorite novu datoteku pod nazivom high-score.py i dodajte kod sa sljedećim ažuriranjima:

razredaGameWindow(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
self.high_score = 0

defload_game(sebe):
probati:
s otvoren('save.json', 'r') kao datoteka:
podaci = json.load (datoteka)
ispis (podaci)
self.player_x = data.get('player_x', self.player_x)
self.high_score = data.get('najbolji rezultat', self.high_score)
osim FileNotFoundError:
proći

defSpremi igru(sebe):
podaci = {
'player_x': self.player_x,
'najbolji rezultat': self.high_score
}
s otvoren('save.json', 'w') kao datoteka:
json.dump (podaci, datoteka)
ispis (podaci)

defna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= PLAYER_SPEED
elif ključ == arkada.ključ. PRAVO:
self.player_x += PLAYER_SPEED
sam.visoki_rezultat += 1

Značajka automatskog spremanja

Kako biste igračima pružili mir i spriječili gubitak napretka, možete automatski spremati stanje igre u redovitim intervalima. Stvorite novu datoteku pod nazivom automatsko spremanje.py i dodajte kod sa sljedećim ažuriranjima:

uvoz vrijeme

razredaGameWindow(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
self.game_state = GameState()

# Spremi svakih 6 sekundi
self.autosave_interval = 6
self.last_save_time = time.time()

defAžuriraj(sam, delta_vrijeme):
trenutno_vrijeme = vrijeme.vrijeme()
time_diff = current_time - self.last_save_time

ako time_diff >= self.autosave_interval:
self.save_game()
ispis("Spremljeno")
self.last_save_time = trenutno_vrijeme

U ovom isječku koda, Ažuriraj metoda provjerava je li od posljednjeg spremanja prošao navedeni vremenski interval. Ako je tako, to pokreće Spremi igru metoda GameWindow klasa za automatsko spremanje stanja igre. Podesite interval_automatskog_spremanja vrijednost prema zahtjevima vaše igre.

Provjera podataka igre

Validacija učitanih podataka o igri ključna je kako bi se osigurao njihov integritet i dosljednost. Provjeru podataka možete jednostavno ugraditi u naš sustav spremanja i učitavanja:

razredaGameState:
def__u tome__(sebe):
self.player_x = 0

defspremi_stanje(sebe):
ako self.is_valid_state():
podaci = {
'player_x': self.player_x
}

s otvoren('save.json', 'w') kao datoteka:
json.dump (podaci, datoteka)

defstanje_opterećenja(sebe):
s otvoren('save.json', 'r') kao datoteka:
podaci = json.load (datoteka)

ako self.validate_loaded_data (podaci):
self.player_x = podaci['player_x']
drugo:
ispis("Greška!")

defje_važeće_stanje(sebe):
# Izvedite logiku provjere valjanosti ovdje
# Vrati True ako je stanje važeće, False u suprotnom
proći

defpotvrdi_učitane_podatke(sebe, podaci):
# Izvršite provjeru valjanosti učitanih podataka
# Vrati True ako su podaci valjani, False u suprotnom
proći

Uključivanjem ovih dodatnih značajki u sustav spremanja i učitavanja, možete stvoriti svestraniji i robusniji način igranja iskustvo, nudeći igračima mogućnost spremanja višestrukih stanja igre, praćenje visokih rezultata, omogućavanje automatskog spremanja i osiguranje podataka integritet.

Najbolji primjeri iz prakse za sustav spremanja i učitavanja

Implementacija sustava spremanja i učitavanja važan je aspekt razvoja igre. Kako biste osigurali robustan i pouzdan sustav, bitno je slijediti najbolje prakse. Evo nekoliko ključnih praksi koje treba razmotriti:

Šifrirajte osjetljive podatke

Ako vaša igra uključuje osjetljive podatke kao što su zaporke, osobni podaci ili kupnje unutar aplikacije, ključno je šifrirati spremljeno stanje igre. Enkripcija dodaje dodatni sloj sigurnosti, štiteći privatnost igrača i sprječavajući neovlašteni pristup njihovim podacima. Koristite algoritme šifriranja i biblioteke za zaštitu osjetljivih informacija.

Provjeri valjanost učitanih podataka

Prije učitavanja podataka igre bitno ih je potvrditi kako bi se osigurao njihov integritet i dosljednost. Provjerite jesu li učitani podaci u skladu s očekivanim formatom, strukturom i ograničenjima vaše igre.

Izvršite provjere valjanosti na kritičnim podatkovnim poljima kako biste izbjegli padove ili varanje. Implementirajte robusne mehanizme za provjeru valjanosti podataka za rješavanje potencijalnih pogrešaka ili neočekivanih podataka.

Postupajte s pogreškama elegantno

Pri radu s I/O operacijama datoteka mogu se pojaviti pogreške. Od ključne je važnosti graciozno postupati s tim pogreškama i igraču dati informativne poruke o pogrešci. Hvatanje i rukovanje iznimkama, kao što je FileNotFoundError ili PermissionError, tijekom operacija spremanja i učitavanja.

Prikažite poruke o pogreškama prilagođene korisniku kako biste vodili igrače i spriječili frustracije. Osim toga, razmislite o implementaciji zapisivanja pogrešaka kako biste lakše dijagnosticirali i riješili probleme.

Testirajte funkcionalnost spremanja i učitavanja

Temeljito testirajte funkciju spremanja i učitavanja svoje igre kako biste osigurali njezinu pouzdanost i ispravnost. Stvorite testne slučajeve koji pokrivaju različite scenarije, kao što je spremanje u različitim stanjima igre, učitavanje iz valjanih i nevažećih datoteka za spremanje i testiranje rubnih slučajeva.

Provjerite je li stanje igre pravilno spremljeno i učitano i događa li se očekivano ponašanje. Automatizirani okviri testiranja mogu pomoći u stvaranju sveobuhvatnih testnih paketa.

Učinite igre zabavnijim uz sustav za spremanje i učitavanje

Dodavanje sustava spremanja i učitavanja može učiniti igre privlačnijim pružajući igračima osjećaj kontinuiteta i napretka. Igrači mogu slobodno eksperimentirati, isprobavati različite pristupe i kasnije se vratiti igri bez gubitka svojih postignuća.

Ova značajka također omogućuje igračima da se natječu s prijateljima ili izazovu sami sebe kako bi pobijedili svoje prethodne visoke rezultate, dodajući mogućnost ponovnog igranja i dugoročnu angažiranost vašoj igri.