Naučite kako uključiti značajku spremanja i učitavanja napretka igre za besprijekorno iskustvo igranja.

U modernom razvoju igara, mogućnost spremanja i učitavanja napretka igre ključna je značajka koja poboljšava korisničko iskustvo i angažman. PyGame, popularna biblioteka za stvaranje 2D igara u Pythonu, pruža potrebne alate za implementaciju značajke spremanja i učitavanja bez napora.

Stvaranje jednostavne igre

Prije početka provjerite imate li pip instaliran na vašem uređaju. Nakon instaliranja pip-a, pokrenite donju naredbu da biste instalirali pygame modul:

pip instaliraj pygame

Kako biste ilustrirali implementaciju sustava za spremanje i učitavanje u PyGameu, počnite stvaranjem jednostavne igre.

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

U ovoj igri igrač će se moći pomicati lijevo i desno. Evo primjera isječka koda koji pokazuje osnovnu strukturu igre:

uvoz pygame

# Inicijalizirajte Pygame
pygame.init()

# Postavite prozor igre

instagram viewer

širina_prozora = 800
visina_prozora = 600
prozor = pygame.display.set_mode((širina_prozora, visina_prozora))
pygame.display.set_caption("Spremi i učitaj vodič za sustav")

# Varijable igre
igrač_x = 400
igrač_y = 500
brzina_igrača = 5

# Petlja igre
trčanje = Pravi
dok trčanje:
za događaj u pygame.event.get():
ako event.type == pygame. PRESTATI:
trčanje = lažno

tipke = pygame.key.get_pressed()
ako ključevi[pygame. K_LIJEVO]:
igrač_x -= brzina_igrača
ako ključevi[pygame. K_DESNO]:
igrač_x += brzina_igrača

# Očistite zaslon
window.fill((0, 0, 0))

# Nacrtajte igrača
pygame.draw.rect (prozor, (255, 255, 255), (igrač_x, igrač_y, 50, 50))

# Ažurirajte zaslon
pygame.display.flip()

# Napustite igru
pygame.quit()

Upravljanje stanjem igre i postojanošću podataka

Prije implementacije funkcije spremanja i učitavanja morate uspostaviti način za upravljanje stanjem igre i održavanje podataka. Jedan uobičajeni pristup je da se koristite Python rječnik za pohranu relevantnih podataka igre. Evo primjera kako možete izmijeniti prethodni kod da uključi upravljanje stanjem igre:

# Varijable igre
game_state = {
'player_x': 400,
'player_y': 500
}

# Petlja igre
trčanje = Pravi
dok trčanje:
# ...

tipke = pygame.key.get_pressed()
ako ključevi[pygame. K_LIJEVO]:
game_state['player_x'] -= brzina_igrača
ako ključevi[pygame. K_DESNO]:
game_state['player_x'] += brzina_igrača

# ...

pygame.display.flip()

Implementacija funkcije spremanja i učitavanja

Da biste omogućili spremanje i učitavanje napretka igre, možete iskoristiti ugrađeni Python kiseli krastavac modul, koji nam omogućuje serijalizaciju i deserijalizaciju Python objekata. Stvorite novu datoteku pod nazivom spremi-igru.py i dodajte kod sa sljedećim ažuriranjima:

game_state = {
'player_x': igrač_x,
'player_y': igrač_y
}

# Spremite stanje igre
defsave_game_state(stanje_igre, naziv_datoteke):
probati:
s otvori (ime_datoteke, 'wb') kao datoteka:
pickle.dump (stanje_igre, datoteka)
ispis("Stanje igre uspješno spremljeno!")
osim IOError:
ispis("Pogreška: Nije moguće spremiti stanje igre.")

# Učitaj stanje igre
defload_stanje_igre(naziv datoteke):
probati:
s otvori (ime_datoteke, 'rb') kao datoteka:
game_state = pickle.load (datoteka)
ispis("Stanje igre je uspješno učitano!")
povratak game_state
osim (IOError, kiseli krastavac. UnpicklingError):
ispis("Pogreška: Nije moguće učitati stanje igre.")

# Petlja igre
trčanje = Pravi
dok trčanje:

# ...

tipke = pygame.key.get_pressed()
ako ključevi[pygame. K_LIJEVO]:
igrač_x -= brzina_igrača
game_state['player_x'] = igrač_x
ako ključevi[pygame. K_DESNO]:
igrač_x += brzina_igrača
game_state['player_x'] = igrač_x

ako ključevi[pygame. K_s]:
save_game_state (stanje_igre, 'save_game.pickle')
ako ključevi[pygame. K_l]:
game_state = load_game_state('save_game.pickle')
player_x = game_state['player_x']

# ...

# ...

Ispod je izlaz:

Dizajniranje korisničkog sučelja za utore za spremanje

Kako biste osigurali sučelje za spremanje i učitavanje, možete prikazati utore za spremanje koji omogućuju igraču da odabere koji utor želi spremiti ili učitati. Za ovaj primjer, opcije su prikazane u konzoli, ali možete koristiti Python GUI okviri za stvaranje sučelja prilagođenijeg korisniku.

Stvoriti save_slots popis koji predstavlja dostupna mjesta za spremanje. Također, dodajte a odabrani_utor varijabla za praćenje mjesta koje je odabrao igrač.

Prikažite dostupne utore za spremanje kada igrač pritisne gumb za spremanje (K_s). Igrač može odabrati mjesto pritiskom na odgovarajuću brojčanu tipku (K_1, K_2, ili K_3). Ako je utor odabran, stanje igre sprema se u datoteku nazvanu prema odabranom utoru.

Slično, kada igrač pritisne gumb za učitavanje (K_l), prikazati utore za spremanje. Igrač može odabrati utor pritiskom na tipke K_a, K_b, ili K_c za učitavanje stanja igre. Alternativno, možete koristiti dodirne unose umjesto unosa s tipkovnice za odabir utora. Ako je utor odabran, stanje igre se učitava iz odgovarajuće datoteke.

Stvorite novu datoteku pod nazivom sučelje.py i dodajte kod sa sljedećim ažuriranjima:

# Varijable igre
save_slots = ['Utor 1', "Utor 2", 'Utor 3']
odabrani_utor = Nijedan

# Petlja igre
trčanje = Pravi
dok trčanje:
za događaj u pygame.event.get():
ako event.type == pygame. PRESTATI:
trčanje = lažno

ako event.type == pygame. KEYDOWN:
ako event.key == pygame. K_s:
# Prikaži utore za spremanje
odabrani_utor = Nijedan
za ja, utor u nabroji (save_slots):
ispis(f"Spremi utor {i+1}: {slot}")
ispis("Odaberi utor za spremanje igre.")

ako event.key == pygame. K_l:
ispis("Odaberite utor:- a - utor 1, b - utor 3, c - utor 3")
# Prikaži utore za spremanje
odabrani_utor = Nijedan
za ja, utor u nabroji (save_slots):
ispis(f"Spremi utor {i+1}: {slot}")
ispis("Odaberite mjesto za učitavanje igre.")

ako događaj.ključ u [pygame. K_1, pygame. K_2, pygame. K_3]:
# Spremite ili učitajte igru ​​na temelju odabranog utora
slot_index = event.key - pygame. K_1
odabrani_utor = spremi_utor [utor_indeks]

save_game_state (stanje_igre, f"{selected_slot}.kiseli krastavac")
ispis(f"Igra je spremljena {selected_slot}!")

ako događaj.ključ u [pygame. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key - pygame. K_a
odabrani_utor = spremi_utor [utor_indeks]
game_state = load_game_state(f"{selected_slot}.kiseli krastavac")
player_x = game_state['player_x']
ispis(f"Igra je učitana sa {selected_slot}!")
# ...

pygame.display.flip()

# ...

Ispod je izlaz:

Nije potrebno pripisivanje: Snimak zaslona napravio Imran

Rukovanje opcijama prepisivanja

Kako biste pružili opcije za prepisivanje postojećih spremljenih datoteka, možete implementirati poruku upozorenja koja od igrača traži potvrdu prije prepisivanja datoteke za spremanje. Stvorite novu datoteku pod nazivom prepisivanje-save.py i izmijenite kod sa sljedećim ažuriranjima:

# Spremite stanje igre
defsave_game_state(stanje_igre, naziv_datoteke):
ako os.path.exists (ime_datoteke):
# Traži potvrdu za brisanje postojeće datoteke za spremanje
prepisati = unos("Datoteka za spremanje već postoji. Želite li prebrisati? (y/n): ")
ako prepisati.lower() != 'y':
ispis("Spremanje otkazano.")
povratak

probati:
s otvori (ime_datoteke, 'wb') kao datoteka:
pickle.dump (stanje_igre, datoteka)
ispis("Stanje igre uspješno spremljeno!")
osim IOError:
ispis("Pogreška: Nije moguće spremiti stanje igre.")

# ...

# Učitaj stanje igre
defload_stanje_igre(naziv datoteke):
akone os.path.exists (ime_datoteke):
ispis("Pogreška: datoteka za spremanje ne postoji.")
povratakNijedan

probati:
s otvori (ime_datoteke, 'rb') kao datoteka:
game_state = pickle.load (datoteka)
ispis("Stanje igre je uspješno učitano!")
povratak game_state
osim (IOError, kiseli krastavac. UnpicklingError):
ispis("Pogreška: Nije moguće učitati stanje igre.")
povratakNijedan

# ...

U gornjem kodu, prije spremanja stanja igre, provjeravate postoji li datoteka za spremanje pomoću os.path.exists(). Ako se dogodi, tražit ćete od playera potvrdu za brisanje postojeće datoteke za spremanje. Ako igrač odluči ne prebrisati, operacija spremanja se poništava.

Slično, prije učitavanja stanja igre, provjerite postoji li datoteka za spremanje pomoću os.path.exists(). Ako se ne dogodi, obavještavate igrača porukom o pogrešci.

Najbolje prakse za sustav spremanja i učitavanja

Prilikom implementacije sustava spremanja i učitavanja u PyGameu ili bilo kojem projektu razvoja igre, razmotrite sljedeće najbolje prakse:

  • Upotrijebite dobro definiranu strukturu podataka za predstavljanje stanja igre i serijalizirajte ga pomoću biblioteke za serijalizaciju kao što je kiseli krastavac. To vam omogućuje jednostavno spremanje i učitavanje cijelog stanja igre.
  • Stvorite namjenski direktorij ili mapu za pohranu spremljenih datoteka. To pomaže organizirati spremljene datoteke i sprječava pretrpavanje glavnog direktorija igre.
  • Implementirajte rukovanje pogreškama i pružite informativne poruke o pogreškama kao pomoć pri uklanjanju pogrešaka i rješavanju problema. Ovo pomaže igračima da razumiju probleme koji se mogu pojaviti tijekom operacija spremanja i učitavanja.
  • Razmislite o implementaciji više mjesta za spremanje kako biste omogućili igračima da imaju više spremanja igre. To igračima daje fleksibilnost da istražuju različite staze ili ponavljaju određene dijelove igre bez prepisivanja njihovog napretka.

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

Dodavanje značajke spremanja i učitavanja može uvelike povećati angažman i užitak u igri. Omogućuje igračima da spreme svoj napredak i vrate se u igru ​​kada im odgovara. Nadalje, otvara mogućnosti za stvaranje složenih svjetova igara, gdje izbori i akcije igrača imaju trajne posljedice.

Implementacijom sustava za spremanje i učitavanje, možete osnažiti svoje igrače da imaju impresivnije i zadovoljavajuće iskustvo igranja.