Naučte sa, ako začleniť funkciu ukladania a načítania priebehu hry pre bezproblémový herný zážitok.

V modernom vývoji hier je schopnosť ukladať a načítať priebeh hry kľúčovou funkciou, ktorá zlepšuje používateľský zážitok a zapojenie. PyGame, populárna knižnica na vytváranie 2D hier v Pythone, poskytuje potrebné nástroje na jednoduchú implementáciu funkcie ukladania a načítania.

Vytvorenie jednoduchej hry

Pred začatím sa uistite, že máte pip nainštalovaný na vašom zariadení. Po inštalácii pip spustite nižšie uvedený príkaz na inštaláciu pygame modul:

pip install pygame

Na ilustráciu implementácie systému ukladania a načítania v PyGame začnite vytvorením jednoduchej hry.

Kód použitý v tomto článku je dostupný v tomto úložisko GitHub a môžete ho bezplatne používať na základe licencie MIT.

V tejto hre bude mať hráč možnosť pohybovať sa doľava a doprava. Tu je príklad útržku kódu, ktorý demonštruje základnú štruktúru hry:

importovať pygame

# Inicializujte Pygame
pygame.init()

# Nastavte herné okno
šírka_okna =

instagram viewer
800
výška_okna = 600
okno = pygame.display.set_mode((šírka_okna, výška_okna))
pygame.display.set_caption("Uložiť a načítať systémový návod")

# Premenné hry
hráč_x = 400
hráč_y = 500
player_speed = 5

# Herná slučka
beh = Pravda
zatiaľ čo beh:
pre udalosť v pygame.event.get():
ak event.type == pygame. UKONČIŤ:
beh = Nepravdivé

keys = pygame.key.get_pressed()
ak kľúče [pygame. K_LEFT]:
player_x -= player_speed
ak kľúče [pygame. K_RIGHT]:
player_x += player_speed

# Vyčistite obrazovku
window.fill((0, 0, 0))

# Nakreslite prehrávač
pygame.draw.rect (okno, (255, 255, 255), (player_x, player_y, 50, 50))

# Aktualizujte displej
pygame.display.flip()

# Ukončite hru
pygame.quit()

Správa stavu hry a trvalosti údajov

Pred implementáciou funkcie ukladania a načítania musíte vytvoriť spôsob, ako spravovať stav hry a uchovávať údaje. Jedným z bežných prístupov je použite pythonovský slovník uložiť príslušné herné údaje. Tu je príklad toho, ako môžete upraviť predchádzajúci kód tak, aby zahŕňal správu stavu hry:

# Premenné hry
game_state = {
'player_x': 400,
'player_y': 500
}

# Herná slučka
beh = Pravda
zatiaľ čo beh:
# ...

keys = pygame.key.get_pressed()
ak kľúče [pygame. K_LEFT]:
game_state['player_x'] -= player_speed
ak kľúče [pygame. K_RIGHT]:
game_state['player_x'] += rýchlosť hráča

# ...

pygame.display.flip()

Implementácia funkcie Uložiť a Načítať

Ak chcete povoliť ukladanie a načítanie priebehu hry, môžete využiť vstavaný Python kyslá uhorka modul, ktorý nám umožňuje serializovať a deserializovať objekty Pythonu. Vytvorte nový súbor s názvom save-game.py a pridajte kód s nižšie uvedenými aktualizáciami:

game_state = {
'player_x': player_x,
'player_y': player_y
}

# Uložiť stav hry
defsave_game_state(game_state, file_name):
skúste:
s otvoriť (názov_súboru, 'wb') ako súbor:
pickle.dump (game_state, súbor)
vytlačiť ("Herná situácia bola úspešne uložená!")
okrem IOError:
vytlačiť ("Chyba: Nie je možné uložiť stav hry.")

# Načítať stav hry
defload_game_state(názov súboru):
skúste:
s otvoriť (názov_súboru, 'rb') ako súbor:
game_state = pickle.load (súbor)
vytlačiť ("Herný stav bol úspešne načítaný!")
vrátiť game_state
okrem (IOError, kyslá uhorka. UnpicklingError):
vytlačiť ("Chyba: Nie je možné načítať stav hry.")

# Herná slučka
beh = Pravda
zatiaľ čo beh:

# ...

keys = pygame.key.get_pressed()
ak kľúče [pygame. K_LEFT]:
player_x -= player_speed
game_state['player_x'] = player_x
ak kľúče [pygame. K_RIGHT]:
player_x += player_speed
game_state['player_x'] = player_x

ak kľúče [pygame. K_s]:
save_game_state (game_state, 'save_game.pickle')
ak kľúče [pygame. K_l]:
game_state = load_game_state('save_game.pickle')
hráč_x = stav hry['player_x']

# ...

# ...

Nižšie je výstup:

Navrhovanie používateľského rozhrania pre ukladacie sloty

Ak chcete poskytnúť rozhranie na ukladanie a načítanie, môžete zobraziť ukladacie sloty, ktoré umožňujú prehrávaču vybrať si, ktorý slot sa má uložiť alebo načítať. V tomto príklade sú možnosti zobrazené v konzole, ale môžete ich použiť Rámce GUI Pythonu na vytvorenie užívateľsky prívetivejšieho rozhrania.

Vytvor save_slots zoznam, ktorý predstavuje dostupné ukladacie sloty. Pridajte tiež a vybraný_slot premenná na sledovanie slotu zvoleného hráčom.

Zobrazte dostupné sloty na uloženie, keď prehrávač stlačí tlačidlo uloženia (K_s). Hráč si môže vybrať slot stlačením príslušného číselného tlačidla (K_1, K_2, alebo K_3). Ak je vybratý slot, stav hry sa uloží do súboru pomenovaného podľa zvoleného slotu.

Podobne, keď hráč stlačí tlačidlo načítania (K_l), zobrazte ukladacie sloty. Hráč si môže vybrať slot stlačením klávesov K_a, K_b, alebo K_c na načítanie stavu hry. Prípadne môžete používať dotykové vstupy namiesto vstupov z klávesnice pre výber slotu. Ak je vybratý slot, stav hry sa načíta z príslušného súboru.

Vytvorte nový súbor s názvom interface.py a pridajte kód s nižšie uvedenými aktualizáciami:

# Premenné hry
save_slots = ['Slot 1', 'Slot 2', 'Slot 3']
vybraný_slot = žiadne

# Herná slučka
beh = Pravda
zatiaľ čo beh:
pre udalosť v pygame.event.get():
ak event.type == pygame. UKONČIŤ:
beh = Nepravdivé

ak event.type == pygame. KEYDOWN:
ak event.key == pygame. K_s:
# Zobraziť ukladacie sloty
vybraný_slot = žiadne
pre i, slot v enumerate (save_slots):
vytlačiť (f"Uložiť slot {i+1}: {slot}")
vytlačiť ("Vyberte slot na uloženie hry.")

ak event.key == pygame. K_l:
vytlačiť ("Vyberte slot:- a - slot 1, b - slot 3, c - slot 3")
# Zobraziť ukladacie sloty
vybraný_slot = žiadne
pre i, slot v enumerate (save_slots):
vytlačiť (f"Uložiť slot {i+1}: {slot}")
vytlačiť ("Vyberte slot na načítanie hry.")

ak event.key v [pygame. K_1, pygame. K_2, pygame. K_3]:
# Uložte alebo načítajte hru na základe zvoleného slotu
slot_index = event.key - pygame. K_1
vybraný_slot = save_slots[slot_index]

save_game_state (game_state, f"{selected_slot}.pickle")
vytlačiť (f"Hra uložená v {selected_slot}!")

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

slot_index = event.key - pygame. K_a
vybraný_slot = save_slots[slot_index]
game_state = load_game_state(f"{selected_slot}.pickle")
hráč_x = stav hry['player_x']
vytlačiť (f"Hra načítaná z {selected_slot}!")
# ...

pygame.display.flip()

# ...

Nižšie je výstup:

Nie je potrebné uviesť zdroj: Snímka obrazovky od Imrana

Spracovanie možností prepisovania

Ak chcete poskytnúť možnosti na prepísanie existujúcich uložení, môžete implementovať varovnú správu, ktorá vyzve prehrávač na potvrdenie pred prepísaním uloženého súboru. Vytvorte nový súbor s názvom overwriting-save.py a upravte kód pomocou nasledujúcich aktualizácií:

# Uložiť stav hry
defsave_game_state(game_state, file_name):
ak os.path.exists (názov_súboru):
# Výzva na potvrdenie prepísania existujúceho ukladacieho súboru
prepísať = vstup("Uložiť súbor už existuje." Chcete prepísať? (y/n): ")
ak overwrite.lower() != 'y':
vytlačiť ("Uloženie zrušené.")
vrátiť

skúste:
s otvoriť (názov_súboru, 'wb') ako súbor:
pickle.dump (game_state, súbor)
vytlačiť ("Herná situácia bola úspešne uložená!")
okrem IOError:
vytlačiť ("Chyba: Nie je možné uložiť stav hry.")

# ...

# Načítať stav hry
defload_game_state(názov súboru):
aknie os.path.exists (názov_súboru):
vytlačiť ("Chyba: Uložený súbor neexistuje.")
vrátiťžiadne

skúste:
s otvoriť (názov_súboru, 'rb') ako súbor:
game_state = pickle.load (súbor)
vytlačiť ("Herný stav bol úspešne načítaný!")
vrátiť game_state
okrem (IOError, kyslá uhorka. UnpicklingError):
vytlačiť ("Chyba: Nie je možné načítať stav hry.")
vrátiťžiadne

# ...

Vo vyššie uvedenom kóde pred uložením stavu hry skontrolujete, či uložený súbor už existuje pomocou os.path.exists(). Ak áno, požiadate prehrávač o potvrdenie prepísania existujúceho uloženého súboru. Ak sa prehrávač rozhodne neprepísať, operácia ukladania sa zruší.

Podobne pred načítaním stavu hry skontrolujete, či uložený súbor existuje pomocou os.path.exists(). Ak nie, informujete prehrávač chybovým hlásením.

Osvedčené postupy pre systém ukladania a načítania

Pri implementácii systému ukladania a načítania v PyGame alebo akomkoľvek projekte vývoja hier zvážte nasledujúce osvedčené postupy:

  • Použite dobre definovanú dátovú štruktúru na reprezentáciu stavu hry a serializujte ju pomocou serializačnej knižnice, ako je napr kyslá uhorka. To vám umožní ľahko uložiť a načítať celý stav hry.
  • Vytvorte vyhradený adresár alebo priečinok na ukladanie uložených súborov. Pomáha to organizovať uložené súbory a zabraňuje preplneniu hlavného adresára hry.
  • Implementujte spracovanie chýb a poskytujte informatívne chybové správy, ktoré vám pomôžu pri ladení a riešení problémov. To pomáha hráčom pochopiť všetky problémy, ktoré môžu nastať počas operácií ukladania a načítania.
  • Zvážte implementáciu viacerých ukladacích slotov, aby hráči mohli mať uloženie viacerých hier. To dáva hráčom flexibilitu pri skúmaní rôznych ciest alebo opakovaní konkrétnych častí hry bez prepisovania ich postupu.

Urobte hry pútavejšími vďaka systému uloženia a načítania

Pridanie funkcie ukladania a načítania môže výrazne zvýšiť zapojenie a pôžitok z hry. Umožňuje hráčom uložiť si svoj postup a vrátiť sa do hry podľa vlastného uváženia. Okrem toho otvára možnosti vytvárania komplexných herných svetov, v ktorých majú hráčske voľby a činy trvalé následky.

Implementáciou systému ukladania a načítania môžete svojim hráčom poskytnúť ešte viac pohlcujúci a uspokojivý herný zážitok.