Naučite se vključiti funkcijo shranjevanja in nalaganja napredka igre za brezhibno igralno izkušnjo.

V sodobnem razvoju iger je možnost shranjevanja in nalaganja napredka igre ključna lastnost, ki izboljša uporabniško izkušnjo in sodelovanje. PyGame, priljubljena knjižnica za ustvarjanje 2D iger v Pythonu, nudi potrebna orodja za enostavno izvajanje funkcije shranjevanja in nalaganja.

Ustvarjanje preproste igre

Preden začnete, se prepričajte, da imate pip nameščen v vaši napravi. Po namestitvi pip zaženite spodnji ukaz, da namestite pygame modul:

pip namestite pygame

Za ponazoritev izvajanja sistema za shranjevanje in nalaganje v PyGame začnite z ustvarjanjem preproste igre.

Koda, uporabljena v tem članku, je na voljo tukaj Repozitorij GitHub in je brezplačen za uporabo pod licenco MIT.

V tej igri se bo igralec lahko premikal levo in desno. Tukaj je primer izrezka kode, ki prikazuje osnovno strukturo igre:

uvoz pygame

# Inicializirajte Pygame
pygame.init()

# Nastavite okno igre
širina_okna = 800


višina_okna = 600
okno = pygame.display.set_mode((širina_okna, višina_okna))
pygame.display.set_caption("Shrani in naloži sistemsko vadnico")

# Spremenljivke igre
igralec_x = 400
igralec_y = 500
hitrost_igralca = 5

# Igralna zanka
tek = Prav
medtem teče:
za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
tek = False

tipke = pygame.key.get_pressed()
če ključi [pygame. K_LEVO]:
igralec_x -= hitrost_igralca
če ključi [pygame. K_DESNO]:
igralec_x += hitrost_igralca

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

# Narišite igralca
pygame.draw.rect (okno, (255, 255, 255), (player_x, player_y, 50, 50))

# Posodobite zaslon
pygame.display.flip()

# Zapustite igro
pygame.quit()

Upravljanje stanja igre in obstojnosti podatkov

Pred implementacijo funkcije shranjevanja in nalaganja morate vzpostaviti način za upravljanje stanja igre in ohranjanje podatkov. Eden pogostih pristopov je uporabite slovar Python za shranjevanje ustreznih podatkov o igri. Tukaj je primer, kako lahko spremenite prejšnjo kodo, da vključuje upravljanje stanja igre:

# Spremenljivke igre
stanje_igre = {
'player_x': 400,
'player_y': 500
}

# Igralna zanka
tek = Prav
medtem teče:
# ...

tipke = pygame.key.get_pressed()
če ključi [pygame. K_LEVO]:
game_state['player_x'] -= hitrost_igralca
če ključi [pygame. K_DESNO]:
game_state['player_x'] += hitrost_igralca

# ...

pygame.display.flip()

Implementacija funkcije shranjevanja in nalaganja

Če želite omogočiti shranjevanje in nalaganje napredka igre, lahko uporabite vgrajen Python kumarica modul, ki nam omogoča serializacijo in deserializacijo objektov Python. Ustvari novo datoteko z imenom save-game.py in dodajte kodo s spodnjimi posodobitvami:

stanje_igre = {
'player_x': igralec_x,
'player_y': igralec_y
}

# Shrani stanje igre
defshrani_stanje_igre(stanje_igre, ime_datoteke):
poskusi:
z odpri (ime_datoteke, 'wb') kot mapa:
pickle.dump (stanje_igre, datoteka)
natisni("Stanje igre uspešno shranjeno!")
razen IOError:
natisni("Napaka: stanja igre ni mogoče shraniti.")

# Naloži stanje igre
defload_game_state(Ime datoteke):
poskusi:
z odpri (ime_datoteke, 'rb') kot mapa:
game_state = pickle.load (datoteka)
natisni("Stanje igre je bilo uspešno naloženo!")
vrnitev game_state
razen (IOError, kumarica. UnpicklingError):
natisni("Napaka: stanja igre ni mogoče naložiti.")

# Igralna zanka
tek = Prav
medtem teče:

# ...

tipke = pygame.key.get_pressed()
če ključi [pygame. K_LEVO]:
igralec_x -= hitrost_igralca
game_state['player_x'] = igralec_x
če ključi [pygame. K_DESNO]:
igralec_x += hitrost_igralca
game_state['player_x'] = igralec_x

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

# ...

# ...

Spodaj je rezultat:

Oblikovanje uporabniškega vmesnika za reže za shranjevanje

Če želite zagotoviti vmesnik za shranjevanje in nalaganje, lahko prikažete reže za shranjevanje, ki igralcu omogočajo, da izbere, katero režo naj shrani ali naloži. V tem primeru so možnosti prikazane v konzoli, vendar jih lahko uporabite Pythonova ogrodja GUI za ustvarjanje uporabniku prijaznejšega vmesnika.

Ustvariti save_slots seznam, ki predstavlja razpoložljiva mesta za shranjevanje. Dodajte tudi a izbrano_režo spremenljivka za spremljanje reže, ki jo izbere igralec.

Pokaži razpoložljiva mesta za shranjevanje, ko igralec pritisne gumb za shranjevanje (K_s). Igralec lahko izbere režo s pritiskom na ustrezno številsko tipko (K_1, K_2, oz K_3). Če je izbrana reža, se stanje igre shrani v datoteko, imenovano po izbrani reži.

Podobno, ko igralec pritisne gumb za nalaganje (K_l), prikažejo mesta za shranjevanje. Igralec lahko s pritiskom na tipke izbere režo K_a, K_b, oz K_c da naložite stanje igre. Lahko pa tudi uporabite vnose na dotik namesto vnosov s tipkovnice za izbiro reže. Če je izbrana reža, se stanje igre naloži iz ustrezne datoteke.

Ustvari novo datoteko z imenom vmesnik.py in dodajte kodo s spodnjimi posodobitvami:

# Spremenljivke igre
save_slots = ['Reža 1', 'Reža 2', 'Reža 3']
izbrano_režo = Noben

# Igralna zanka
tek = Prav
medtem teče:
za dogodek v pygame.event.get():
če event.type == pygame. PRENEHATI:
tek = False

če event.type == pygame. KEYDOWN:
če event.key == pygame. K_s:
# Pokaži reže za shranjevanje
izbrano_režo = Noben
za i, reža v naštej (save_slots):
natisni(f"Shrani režo {i+1}: {slot}")
natisni("Izberi režo za shranjevanje igre.")

če event.key == pygame. K_l:
natisni("Izberite režo:- a - reža 1, b - reža 3, c - reža 3")
# Pokaži reže za shranjevanje
izbrano_režo = Noben
za i, reža v naštej (save_slots):
natisni(f"Shrani režo {i+1}: {slot}")
natisni("Izberite režo za nalaganje igre.")

če event.key v [pygame. K_1, pygame. K_2, pygame. K_3]:
# Shranite ali naložite igro glede na izbrano režo
slot_index = event.key - pygame. K_1
izbrano_režo = shranjevalna_reža[indeks_reže]

save_game_state (stanje_igre, f"{selected_slot}.kisla kumarica")
natisni(f"Igra shranjena v {selected_slot}!")

če event.key v [pygame. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key - pygame. K_a
izbrano_režo = shranjevalna_reža[indeks_reže]
game_state = load_game_state(f"{selected_slot}.kisla kumarica")
igralec_x = stanje_igre ['player_x']
natisni(f"Igra se je naložila iz {selected_slot}!")
# ...

pygame.display.flip()

# ...

Spodaj je rezultat:

Navedba avtorstva ni potrebna: Posnetek zaslona Imrana

Ravnanje z možnostmi prepisovanja

Če želite ponuditi možnosti za prepisovanje obstoječih shranjenih datotek, lahko implementirate opozorilno sporočilo, ki od predvajalnika zahteva potrditev, preden prepiše shranjeno datoteko. Ustvari novo datoteko z imenom prepisovanje-save.py in spremenite kodo s spodnjimi posodobitvami:

# Shrani stanje igre
defshrani_stanje_igre(stanje_igre, ime_datoteke):
če os.path.exists (ime_datoteke):
# Poziv za potrditev za prepis obstoječe shranjene datoteke
prepisati = vnos(»Shrani datoteko že obstaja. Ali želite prepisati? (da/ne): ")
če overwrite.lower() != 'y':
natisni("Shranjevanje preklicano.")
vrnitev

poskusi:
z odpri (ime_datoteke, 'wb') kot mapa:
pickle.dump (stanje_igre, datoteka)
natisni("Stanje igre uspešno shranjeno!")
razen IOError:
natisni("Napaka: stanja igre ni mogoče shraniti.")

# ...

# Naloži stanje igre
defload_game_state(Ime datoteke):
čene os.path.exists (ime_datoteke):
natisni("Napaka: Shranjena datoteka ne obstaja.")
vrnitevNoben

poskusi:
z odpri (ime_datoteke, 'rb') kot mapa:
game_state = pickle.load (datoteka)
natisni("Stanje igre je bilo uspešno naloženo!")
vrnitev game_state
razen (IOError, kumarica. UnpicklingError):
natisni("Napaka: stanja igre ni mogoče naložiti.")
vrnitevNoben

# ...

V zgornji kodi, preden shranite stanje igre, preverite, ali datoteka za shranjevanje že obstaja z uporabo os.path.exists(). Če se to zgodi, predvajalnik pozovete k potrditvi prepisa obstoječe shranjene datoteke. Če se predvajalnik odloči, da ne bo prepisal, je operacija shranjevanja preklicana.

Podobno, preden naložite stanje igre, preverite, ali shranjena datoteka obstaja z uporabo os.path.exists(). Če se ne zgodi, o tem obvestite igralca s sporočilom o napaki.

Najboljše prakse za sistem za shranjevanje in nalaganje

Ko implementirate sistem za shranjevanje in nalaganje v PyGame ali katerem koli projektu razvoja iger, upoštevajte naslednje najboljše prakse:

  • Uporabite dobro definirano podatkovno strukturo za predstavitev stanja igre in jo serializirajte s knjižnico za serializacijo, kot je kumarica. To vam omogoča enostavno shranjevanje in nalaganje celotnega stanja igre.
  • Ustvarite namenski imenik ali mapo za shranjevanje shranjenih datotek. To pomaga organizirati shranjene datoteke in preprečuje natrpanje glavnega imenika igre.
  • Izvedite obravnavo napak in zagotovite informativna sporočila o napakah za pomoč pri razhroščevanju in odpravljanju težav. To igralcem pomaga razumeti vse težave, ki se lahko pojavijo med operacijami shranjevanja in nalaganja.
  • Razmislite o implementaciji več rež za shranjevanje, da bi igralcem omogočili več shranjenih iger. To daje igralcem prilagodljivost, da raziskujejo različne poti ali ponavljajo določene dele igre, ne da bi prepisali svoj napredek.

Naredite igre bolj privlačne s sistemom za shranjevanje in nalaganje

Dodatek funkcije shranjevanja in nalaganja lahko močno poveča angažiranost in užitek v igri. Igralcem omogoča, da shranijo svoj napredek in se vrnejo v igro, ko jim ustreza. Poleg tega odpira možnosti za ustvarjanje kompleksnih igralnih svetov, kjer imajo igralčeve odločitve in dejanja trajne posledice.

Z uvedbo sistema za shranjevanje in nalaganje lahko svojim igralcem omogočite bolj poglobljeno in zadovoljujočo igralno izkušnjo.