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. PLAVArazredaGameWindow(arkada. Prozor):
def__u tome__(ja, širina, visina):
super().__init__(širina, visina)
self.player_x = širina // 2defizvlačenje(sebe):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, plava)defAžuriraj(sam, delta_vrijeme):
proćidefna_pritisak_tipke(ja, ključ, modifikatori):
ako ključ == arkada.ključ. LIJEVO:
self.player_x -= PLAYER_SPEED
elif ključ == arkada.ključ. PRAVO:
self.player_x += PLAYER_SPEEDdefglavni():
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 = 0defload_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ćidefSpremi 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 = 0defspremi_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.