Cu excepția cazului în care jocul tău este foarte scurt, te ajută să poți salva progresul. Chiar și jocurile scurte pot beneficia de salvarea scorurilor mari.

Adăugarea unui sistem de salvare și încărcare în joc poate îmbunătăți considerabil experiența jucătorului. Le permite jucătorilor să-și continue progresul, să reia sesiunile de joc și să experimenteze diferite strategii fără a pierde realizările câștigate cu greu.

Veți fi plăcut surprins de cât de simplu este să adăugați această funcție la jocul dvs. folosind biblioteca Arcade a lui Python.

Creați un joc simplu

Începe prin a crea un joc simplu în care jucătorul se poate mișca stânga și dreapta.

Codul folosit în acest articol este disponibil în acest articol Depozitul GitHub și este gratuit pentru utilizare sub licența MIT.

Creați un fișier nou numit joc simplu.py si adauga codul de mai jos:

import arcadă

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
albastru = arcade.culoare. ALBASTRU

clasăGame Window(arcadă. Fereastră):
def__init__(sine, lățime, înălțime):
super().__init__(lățime, înălțime)
self.player_x = latime // 2

instagram viewer

defon_draw(de sine):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, albastru)

defActualizați(self, delta_time):
trece

defon_key_press(sine, cheie, modificatori):
dacă cheie == arcade.key. STÂNGA:
self.player_x -= PLAYER_SPEED
elif cheie == arcade.key. DREAPTA:
self.player_x += PLAYER_SPEED

defprincipal():
fereastra = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

dacă __nume__ == '__principal__':
principal()

Codul creează o fereastră cu un dreptunghi albastru reprezentând jucătorul. Jucătorul se poate deplasa la stânga și la dreapta folosind tastele săgeți stânga și dreapta.

Gestionarea statelor jocului

Pentru a implementa un sistem de salvare și încărcare, trebuie să gestionați diferite stări de joc. O stare de joc reprezintă starea curentă a jocului, inclusiv pozițiile obiectelor, scorurile și alte date relevante. Pentru acest exemplu, concentrați-vă doar pe coordonatele x a jucătorului.

Pentru a gestiona stările jocului, introduceți a GameState clasă care încapsulează datele jocului și oferă metode de salvare și încărcare. Iată codul:

clasăGameState:
def__init__(de sine):
self.player_x = 0

Salvarea datelor jocului

Pentru a salva datele jocului, extindeți Game Window clasa și adăugați o metodă pentru a salva starea jocului ori de câte ori este necesar. Utilizați formatul JSON pentru simplitate. Iată codul:

În Salveaza jocul metodă, creați un dicționar Python care conțin datele relevante ale jocului. Apoi serializați-l într-un fișier JSON numit save.json.

import json

clasăGame Window(arcadă. Fereastră):
def__init__(sine, lățime, înălțime):
super().__init__(lățime, înălțime)
self.game_state = GameState()

defSalveaza jocul(de sine):
date = {
„player_x”: self.game_state.player_x
}
cu deschis(„save.json”, 'w') la fel de fişier:
json.dump (date, fișier)
imprimare (date)

defon_draw(de sine):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, albastru)

defActualizați(self, delta_time):
trece

defon_key_press(sine, cheie, modificatori):
dacă cheie == arcade.key. STÂNGA:
self.game_state.player_x -= PLAYER_SPEED
elif cheie == arcade.key. DREAPTA:
self.game_state.player_x += PLAYER_SPEED
elif cheie == arcade.key. S:
self.save_game()

Se încarcă datele jocului

Pentru a încărca datele jocului, extindeți Game Window clasă mai departe și adăugați o metodă pentru a încărca starea jocului. Creați un fișier nou numit load-game.py și adăugați codul cu actualizările de mai jos:

clasăGame Window(arcadă. Fereastră):
def__init__(sine, lățime, înălțime):
super().__init__(lățime, înălțime)
self.game_state = GameState()
self.load_game()

defincarca jocul(de sine):
încerca:
cu deschis(„save.json”, 'r') la fel de fişier:
date = json.load (fișier)
self.game_state.player_x = date[„player_x”]
cu exceptia FileNotFoundError:
trece

defon_key_press(sine, cheie, modificatori):
dacă cheie == arcade.key. L:
self.load_game()

The incarca jocul metoda încearcă să deschidă save.json fișier și preluați datele jocului. Apoi actualizează starea jocului cu datele încărcate. Dacă fișierul nu există, puteți pur și simplu să ignorați excepția, lăsând starea implicită de joc.

Inclusiv caracteristici suplimentare

Puteți adăuga mai multe funcții pentru a îmbunătăți sistemul de salvare și încărcare a jocului.

Salvarea scorurilor mari

Salvarea scorurilor mari alături de starea jocului este o caracteristică comună în multe jocuri. Puteți gestionează scorurile și salvați scorul cel mai mare utilizând acest sistem. Creați un fișier nou numit scor mare.py și adăugați codul cu actualizările de mai jos:

clasăGame Window(arcadă. Fereastră):
def__init__(sine, lățime, înălțime):
super().__init__(lățime, înălțime)
self.high_score = 0

defincarca jocul(de sine):
încerca:
cu deschis(„save.json”, 'r') la fel de fişier:
date = json.load (fișier)
imprimare (date)
self.player_x = data.get(„player_x”, self.player_x)
self.high_score = data.get('cel mai mare scor', self.high_score)
cu exceptia FileNotFoundError:
trece

defSalveaza jocul(de sine):
date = {
„player_x”: self.player_x,
'cel mai mare scor': sine.scor_înalt
}
cu deschis(„save.json”, 'w') la fel de fişier:
json.dump (date, fișier)
imprimare (date)

defon_key_press(sine, cheie, modificatori):
dacă cheie == arcade.key. STÂNGA:
self.player_x -= PLAYER_SPEED
elif cheie == arcade.key. DREAPTA:
self.player_x += PLAYER_SPEED
sine.scor_înalt += 1

Funcția de salvare automată

Pentru a oferi jucătorilor liniște sufletească și pentru a preveni pierderea progresului, puteți salva automat starea jocului la intervale regulate. Creați un fișier nou numit auto-save.py și adăugați codul cu actualizările de mai jos:

import timp

clasăGame Window(arcadă. Fereastră):
def__init__(sine, lățime, înălțime):
super().__init__(lățime, înălțime)
self.game_state = GameState()

# Salvați la fiecare 6 secunde
self.autosave_interval = 6
self.last_save_time = time.time()

defActualizați(self, delta_time):
current_time = time.time()
time_diff = current_time - self.last_save_time

dacă time_diff >= self.autosave_interval:
self.save_game()
imprimare("Salvat")
self.last_save_time = ora_actuală

În acest fragment de cod, Actualizați metoda verifică dacă intervalul de timp specificat a trecut de la ultima salvare. Dacă da, declanșează Salveaza jocul metoda de Game Window clasa pentru a salva automat starea jocului. Ajustează autosave_interval valoare în funcție de cerințele jocului dvs.

Validarea datelor jocului

Validarea datelor de joc încărcate este esențială pentru a asigura integritatea și consistența acestora. Puteți încorpora cu ușurință validarea datelor în sistemul nostru de salvare și încărcare:

clasăGameState:
def__init__(de sine):
self.player_x = 0

defsalvare_state(de sine):
dacă self.is_valid_state():
date = {
„player_x”: self.player_x
}

cu deschis(„save.json”, 'w') la fel de fişier:
json.dump (date, fișier)

defstare_încărcare(de sine):
cu deschis(„save.json”, 'r') la fel de fişier:
date = json.load (fișier)

dacă self.validate_loaded_data (date):
self.player_x = date[„player_x”]
altfel:
imprimare("Eroare!")

defeste_starea_validă(de sine):
# Efectuați logica de validare aici
# Returnează True dacă starea este validă, False în caz contrar
trece

defvalidate_loaded_data(sine, date):
# Efectuați validarea datelor încărcate
# Returnează True dacă datele sunt valide, False în caz contrar
trece

Încorporând aceste caracteristici suplimentare în sistemul de salvare și încărcare, puteți crea un joc mai versatil și mai robust experiență, oferind jucătorilor posibilitatea de a salva mai multe stări de joc, de a urmări scorurile mari, de a activa salvarea automată și de a asigura datele integritate.

Cele mai bune practici pentru sistemul de salvare și încărcare

Implementarea unui sistem de salvare și încărcare este un aspect important al dezvoltării jocului. Pentru a asigura un sistem robust și fiabil, este esențial să urmați cele mai bune practici. Iată câteva practici cheie de luat în considerare:

Criptați datele sensibile

Dacă jocul dvs. include informații sensibile, cum ar fi parole, date personale sau achiziții în aplicație, este esențial să criptați starea jocului salvat. Criptarea adaugă un nivel suplimentar de securitate, protejând confidențialitatea jucătorului și împiedicând accesul neautorizat la datele acestuia. Utilizați algoritmi și biblioteci de criptare pentru a proteja informațiile sensibile.

Validați datele încărcate

Înainte de a încărca datele jocului, este esențial să le validați pentru a le asigura integritatea și consistența. Verificați dacă datele încărcate respectă formatul, structura și constrângerile așteptate ale jocului dvs.

Efectuați verificări de validare pe câmpurile de date critice pentru a evita blocările sau înșelăciunea. Implementați mecanisme robuste de validare a datelor pentru a gestiona erori potențiale sau date neașteptate.

Gestionați erorile cu grație

Când aveți de-a face cu operațiuni I/O de fișiere, pot apărea erori. Este esențial să gestionați aceste erori cu grație și să furnizați mesaje de eroare informative jucătorului. Prindeți și gestionați excepțiile, cum ar fi FileNotFoundError sau PermissionErrore, în timpul operațiunilor de salvare și încărcare.

Afișează mesaje de eroare ușor de utilizat pentru a ghida jucătorii și a preveni frustrarea. În plus, luați în considerare implementarea înregistrării erorilor pentru a ajuta la diagnosticarea și rezolvarea problemelor.

Testați funcționalitatea de salvare și încărcare

Testați cu atenție funcționalitatea de salvare și încărcare a jocului dvs. pentru a vă asigura fiabilitatea și corectitudinea acestuia. Creați cazuri de testare care acoperă diferite scenarii, cum ar fi salvarea în diferite stări ale jocului, încărcarea din fișiere de salvare valide și nevalide și testarea cazurilor marginale.

Validați că starea jocului este salvată și încărcată corect și că are loc comportamentul așteptat. Cadrele de testare automatizate pot ajuta la crearea unor suite de testare cuprinzătoare.

Faceți jocurile mai distractive cu sistemul de salvare și încărcare

Adăugarea unui sistem de salvare și încărcare poate face jocurile mai captivante, oferind jucătorilor un sentiment de continuitate și progres. Jucătorii pot experimenta liber, pot încerca abordări diferite și pot reveni la joc mai târziu fără a-și pierde realizările.

Această caracteristică permite, de asemenea, jucătorilor să concureze cu prietenii sau să se provoace să-și depășească scorurile mari anterioare, adăugând rejuabilitate și implicare pe termen lung jocului tău.