Aflați cum să încorporați funcția de salvare și încărcare a progresului jocului pentru o experiență de joc fără probleme.

În dezvoltarea jocurilor moderne, capacitatea de a salva și încărca progresul jocului este o caracteristică crucială care îmbunătățește experiența și implicarea utilizatorului. PyGame, o bibliotecă populară pentru crearea de jocuri 2D în Python, oferă instrumentele necesare pentru a implementa funcția de salvare și încărcare fără efort.

Crearea unui joc simplu

Înainte de a începe, asigurați-vă că aveți pip instalat pe dispozitivul dvs. După instalarea pip, rulați comanda de mai jos pentru a instala pygame modul:

pip install pygame

Pentru a ilustra implementarea unui sistem de salvare și încărcare în PyGame, începeți prin a crea un joc simplu.

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

În acest joc, jucătorul va avea capacitatea de a se deplasa la stânga și la dreapta. Iată un exemplu de fragment de cod care demonstrează structura de bază a jocului:

instagram viewer
import pygame

# Inițializați Pygame
pygame.init()

# Configurați fereastra jocului
window_width = 800
window_height = 600
fereastră = pygame.display.set_mode((lățimea_ferestrei, înălțimea_ferestrei))
pygame.display.set_caption(„Tutorial Salvare și încărcare a sistemului”)

# Variabile de joc
player_x = 400
player_y = 500
player_speed = 5

# Buclă de joc
alergare = Adevărat
in timp ce alergare:
pentru eveniment în pygame.event.get():
dacă event.type == pygame. PĂRĂSI:
alergare = Fals

taste = pygame.key.get_pressed()
dacă chei[pygame. K_LEFT]:
player_x -= player_speed
dacă chei[pygame. K_RIGHT]:
player_x += player_speed

# Ștergeți ecranul
window.fill((0, 0, 0))

# Desenați jucătorul
pygame.draw.rect (fereastră, (255, 255, 255), (player_x, player_y, 50, 50))

# Actualizați afișajul
pygame.display.flip()

# Închide jocul
pygame.quit()

Gestionarea stării jocului și a persistenței datelor

Înainte de a implementa funcționalitatea de salvare și încărcare, trebuie să stabiliți o modalitate de a gestiona starea jocului și de a persista datele. O abordare comună este să utilizați un dicționar Python pentru a stoca datele relevante ale jocului. Iată un exemplu despre cum puteți modifica codul anterior pentru a include gestionarea stării jocului:

# Variabile de joc
stare_joc = {
„player_x”: 400,
„player_y”: 500
}

# Buclă de joc
alergare = Adevărat
in timp ce alergare:
# ...

taste = pygame.key.get_pressed()
dacă chei[pygame. K_LEFT]:
starea_joc[„player_x”] -= viteza_jucătorului
dacă chei[pygame. K_RIGHT]:
starea_joc[„player_x”] += viteza_jucătorului

# ...

pygame.display.flip()

Implementarea funcției de salvare și încărcare

Pentru a activa salvarea și încărcarea progresului jocului, puteți folosi funcția Python încorporată murătură modul, care ne permite să serializăm și să deserializăm obiecte Python. Creați un fișier nou numit save-game.py și adăugați codul cu actualizările de mai jos:

stare_joc = {
„player_x”: player_x,
„player_y”: player_y
}

# Salvați starea jocului
defsave_game_state(stare_joc, nume_fișier):
încerca:
cu deschide (nume_fișier, 'wb') la fel de fişier:
pickle.dump (stare_joc, fișier)
imprimare(„Starea jocului a fost salvată cu succes!”)
cu exceptia IOErrore:
imprimare(„Eroare: Nu se poate salva starea jocului”.)

# Încărcați starea jocului
defload_game_state(nume de fișier):
încerca:
cu deschide (nume_fișier, „rb”) la fel de fişier:
game_state = pickle.load (fișier)
imprimare(„Starea jocului sa încărcat cu succes!”)
întoarcere joc_state
cu exceptia (IOEroare, murătură. UnpicklingError):
imprimare(„Eroare: Nu se poate încărca starea jocului.”)

# Buclă de joc
alergare = Adevărat
in timp ce alergare:

# ...

taste = pygame.key.get_pressed()
dacă chei[pygame. K_LEFT]:
player_x -= player_speed
starea_joc[„player_x”] = player_x
dacă chei[pygame. K_RIGHT]:
player_x += player_speed
starea_joc[„player_x”] = player_x

dacă chei[pygame. K_s]:
save_game_state (stare_joc, „save_game.pickle”)
dacă chei[pygame. K_l]:
starea_joc = load_game_state(„save_game.pickle”)
player_x = stare_joc[„player_x”]

# ...

# ...

Mai jos este rezultatul:

Proiectarea unei interfețe de utilizator pentru spațiile de salvare

Pentru a oferi o interfață de salvare și încărcare, puteți afișa sloturi de salvare care permit jucătorului să aleagă ce slot să salveze sau să încarce. Pentru acest exemplu, opțiunile sunt afișate în consolă, dar puteți utiliza Cadrele GUI Python pentru a crea o interfață mai ușor de utilizat.

Creeaza o save_slots lista care reprezintă spațiile de salvare disponibile. De asemenea, adăugați a slot_selectat variabilă pentru a urmări slotul ales de jucător.

Afișați sloturile de salvare disponibile atunci când jucătorul apasă butonul de salvare (K_s). Jucătorul poate alege un slot apăsând tasta numerică corespunzătoare (K_1, K_2, sau K_3). Dacă este selectat un slot, starea jocului este salvată într-un fișier numit după slotul selectat.

În mod similar, atunci când jucătorul apasă butonul de încărcare (K_l), afișați sloturile de salvare. Jucătorul poate alege un slot apăsând tastele K_a, K_b, sau K_c pentru a încărca starea jocului. Alternativ, puteți utilizați intrări tactile în loc de intrările de la tastatură pentru selectarea slotului. Dacă este selectat un slot, starea jocului este încărcată din fișierul corespunzător.

Creați un fișier nou numit interface.py și adăugați codul cu actualizările de mai jos:

# Variabile de joc
save_slots = [„Slot 1”, „Slot 2”, „Slot 3”]
selectat_slot = Nici unul

# Buclă de joc
alergare = Adevărat
in timp ce alergare:
pentru eveniment în pygame.event.get():
dacă event.type == pygame. PĂRĂSI:
alergare = Fals

dacă event.type == pygame. TASTA ÎN JOS:
dacă event.key == pygame. K_s:
# Afișați spațiile de salvare
selectat_slot = Nici unul
pentru eu, slot în enumerare (save_slots):
imprimare(f"Salvare Slot {i+1}: {slot}")
imprimare(„Alegeți un slot pentru a salva jocul”.)

dacă event.key == pygame. K_l:
imprimare(„Selectați Slot:- a - Slot 1, b - Slot 3, c - Slot 3")
# Afișați spațiile de salvare
selectat_slot = Nici unul
pentru eu, slot în enumerare (save_slots):
imprimare(f"Salvare Slot {i+1}: {slot}")
imprimare(„Alegeți un slot pentru a încărca jocul”.)

dacă eveniment.cheie în [pygame. K_1, pygame. K_2, pygame. K_3]:
# Salvați sau încărcați jocul pe baza slotului selectat
slot_index = event.key - pygame. K_1
selectat_slot = salvare_slot[slot_index]

save_game_state (stare_joc, f"{selected_slot}.murătură")
imprimare(f"Joc salvat în {selected_slot}!")

dacă eveniment.cheie în [pygame. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key - pygame. K_a
selectat_slot = salvare_slot[slot_index]
starea_joc = load_game_state(f"{selected_slot}.murătură")
player_x = stare_joc[„player_x”]
imprimare(f"Jocul încărcat de la {selected_slot}!")
# ...

pygame.display.flip()

# ...

Mai jos este rezultatul:

Nu este necesară atribuirea: captură de ecran de Imran

Gestionarea opțiunilor de suprascriere

Pentru a oferi opțiuni pentru suprascrierea salvărilor existente, puteți implementa un mesaj de avertizare care solicită playerului să confirme înainte de a suprascrie un fișier de salvare. Creați un fișier nou numit suprascriere-salvare.py și modificați codul cu actualizările de mai jos:

# Salvați starea jocului
defsave_game_state(stare_joc, nume_fișier):
dacă os.path.exists (nume_fișier):
# Solicitați confirmarea pentru a suprascrie fișierul de salvare existent
suprascrie = input(„Fișierul de salvare există deja. Doriți să suprascrieți? (da/nu): ")
dacă suprascrie.lower() != 'y':
imprimare(„Salvare anulată”.)
întoarcere

încerca:
cu deschide (nume_fișier, 'wb') la fel de fişier:
pickle.dump (stare_joc, fișier)
imprimare(„Starea jocului a fost salvată cu succes!”)
cu exceptia IOErrore:
imprimare(„Eroare: Nu se poate salva starea jocului”.)

# ...

# Încărcați starea jocului
defload_game_state(nume de fișier):
dacănu os.path.exists (nume_fișier):
imprimare(„Eroare: Salvarea fișierului nu există.”)
întoarcereNici unul

încerca:
cu deschide (nume_fișier, „rb”) la fel de fişier:
game_state = pickle.load (fișier)
imprimare(„Starea jocului sa încărcat cu succes!”)
întoarcere joc_state
cu exceptia (IOEroare, murătură. UnpicklingError):
imprimare(„Eroare: Nu se poate încărca starea jocului.”)
întoarcereNici unul

# ...

În codul de mai sus, înainte de a salva o stare de joc, verificați dacă fișierul de salvare există deja folosind os.path.exists(). Dacă se întâmplă, solicitați playerului confirmarea pentru a suprascrie fișierul de salvare existent. Dacă jucătorul alege să nu suprascrie, operația de salvare este anulată.

În mod similar, înainte de a încărca o stare de joc, verificați dacă fișierul de salvare există folosind os.path.exists(). Dacă nu, informați jucătorul cu un mesaj de eroare.

Cele mai bune practici pentru salvarea și încărcarea sistemului

Când implementați un sistem de salvare și încărcare în PyGame sau în orice proiect de dezvoltare a jocului, luați în considerare următoarele bune practici:

  • Utilizați o structură de date bine definită pentru a reprezenta starea jocului și serializați-o folosind o bibliotecă de serializare ca murătură. Acest lucru vă permite să salvați și să încărcați cu ușurință întreaga stare de joc.
  • Creați un director sau un folder dedicat pentru a stoca fișierele salvate. Acest lucru ajută la organizarea fișierelor salvate și previne aglomerarea directorului principal al jocului.
  • Implementați gestionarea erorilor și furnizați mesaje de eroare informative pentru a ajuta la depanare și depanare. Acest lucru îi ajută pe jucători să înțeleagă orice probleme care pot apărea în timpul operațiunilor de salvare și încărcare.
  • Luați în considerare implementarea mai multor sloturi de salvare pentru a permite jucătorilor să salveze mai multe jocuri. Acest lucru le oferă jucătorilor flexibilitatea de a explora diferite căi sau de a reda anumite secțiuni ale jocului fără a-și suprascrie progresul.

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

Adăugarea funcției de salvare și încărcare poate îmbunătăți foarte mult angajamentul și plăcerea unui joc. Le permite jucătorilor să-și salveze progresul și să se întoarcă la joc după convenție. În plus, deschide posibilități pentru crearea de lumi de joc complexe, în care alegerile și acțiunile jucătorilor au consecințe de durată.

Prin implementarea unui sistem de salvare și încărcare, vă puteți permite jucătorilor să aibă o experiență de joc mai captivantă și mai satisfăcătoare.