Naučte se, jak začlenit funkci ukládání a načítání průběhu hry pro bezproblémový herní zážitek.
V moderním vývoji her je schopnost ukládat a načítat průběh hry zásadní funkcí, která zlepšuje uživatelský zážitek a zapojení. PyGame, oblíbená knihovna pro vytváření 2D her v Pythonu, poskytuje potřebné nástroje pro bezproblémovou implementaci funkce ukládání a načítání.
Vytvoření jednoduché hry
Než začnete, ujistěte se, že máte pip nainstalovaný na vašem zařízení. Po instalaci pip spusťte níže uvedený příkaz k instalaci pygame modul:
pip nainstalovat pygame
Pro ilustraci implementace systému ukládání a načítání v PyGame začněte vytvořením jednoduché hry.
Kód použitý v tomto článku je k dispozici v tomto úložiště GitHub a můžete jej používat zdarma pod licencí MIT.
V této hře bude mít hráč možnost pohybovat se doleva a doprava. Zde je příklad úryvku kódu, který ukazuje základní strukturu hry:
import pygame
# Inicializujte Pygame
pygame.init()# Nastavte herní okno
šířka_okna = 800
výška_okna = 600
okno = pygame.display.set_mode((šířka_okna, výška_okna))
pygame.display.set_caption(„Výukový program pro uložení a načtení systému“)# Proměnné hry
hráč_x = 400
player_y = 500
player_speed = 5# Herní smyčka
běh = Skutečný
zatímco běh:
pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
běh = Nepravdivékeys = pygame.key.get_pressed()
-li klíče [pygame. K_LEFT]:
player_x -= player_speed
-li klíče [pygame. K_RIGHT]:
player_x += player_speed# Vyčistěte obrazovku
window.fill((0, 0, 0))# Nakreslete přehrávač
pygame.draw.rect (okno, (255, 255, 255), (player_x, player_y, 50, 50))# Aktualizujte displej
pygame.display.flip()
# Ukončete hru
pygame.quit()
Správa stavu hry a perzistence dat
Před implementací funkce ukládání a načítání musíte vytvořit způsob, jak spravovat stav hry a uchovávat data. Jedním z běžných přístupů je použít slovník Pythonu pro uložení příslušných herních dat. Zde je příklad, jak můžete upravit předchozí kód tak, aby zahrnoval správu stavu hry:
# Proměnné hry
game_state = {
'player_x': 400,
'player_y': 500
}# Herní smyčka
běh = Skutečný
zatímco běh:
# ...keys = pygame.key.get_pressed()
-li klíče [pygame. K_LEFT]:
game_state['player_x'] -= player_speed
-li klíče [pygame. K_RIGHT]:
game_state['player_x'] += player_speed# ...
pygame.display.flip()
Implementace funkce ukládání a načítání
Chcete-li umožnit ukládání a načítání průběhu hry, můžete využít vestavěný Python lák modul, který nám umožňuje serializovat a deserializovat objekty Pythonu. Vytvořte nový soubor s názvem save-game.py a přidejte kód s níže uvedenými aktualizacemi:
game_state = {
'player_x': player_x,
'player_y': player_y
}# Uložit herní stav
defsave_game_state(game_state, file_name):
Snaž se:
s otevřít (název_souboru, 'wb') tak jako soubor:
pickle.dump (game_state, soubor)
tisk("Herní stav byl úspěšně uložen!")
až na IOError:
tisk("Chyba: Nelze uložit stav hry.")# Načíst stav hry
defload_game_state(název souboru):
Snaž se:
s otevřít (název_souboru, 'rb') tak jako soubor:
game_state = pickle.load (soubor)
tisk("Herní stav úspěšně načten!")
vrátit se game_state
až na (IOError, okurka. UnpicklingError):
tisk("Chyba: Nelze načíst stav hry.")# Herní smyčka
běh = Skutečný
zatímco běh:# ...
keys = pygame.key.get_pressed()
-li klíče [pygame. K_LEFT]:
player_x -= player_speed
game_state['player_x'] = player_x
-li klíče [pygame. K_RIGHT]:
player_x += player_speed
game_state['player_x'] = player_x-li klíče [pygame. K_s]:
save_game_state (game_state, 'save_game.pickle')
-li klíče [pygame. K_l]:
game_state = load_game_state('save_game.pickle')
hráč_x = stav hry['player_x']
# ...
# ...
Níže je výstup:
Návrh uživatelského rozhraní pro ukládání slotů
Chcete-li poskytnout rozhraní pro ukládání a načítání, můžete zobrazit sloty pro ukládání, které umožňují přehrávači vybrat, který slot uložit nebo načíst. V tomto příkladu jsou možnosti zobrazeny v konzole, ale můžete je použít GUI frameworky Pythonu pro vytvoření uživatelsky přívětivějšího rozhraní.
Vytvořit save_slots seznam, který představuje dostupné sloty pro ukládání. Také přidejte a vybraný_slot proměnná pro sledování slotu zvoleného hráčem.
Zobrazí dostupné sloty pro ukládání, když hráč stiskne tlačítko pro uložení (K_s). Hráč si může vybrat slot stisknutím příslušného číselného tlačítka (K_1, K_2nebo K_3). Pokud je vybrán slot, stav hry se uloží do souboru pojmenovaného po vybraném slotu.
Podobně, když hráč stiskne tlačítko načíst (K_l), zobrazte sloty pro ukládání. Hráč si může vybrat slot stisknutím kláves K_a, K_bnebo K_c pro načtení stavu hry. Případně můžete používat dotykové vstupy místo vstupů z klávesnice pro výběr slotu. Pokud je vybrán slot, stav hry se načte z odpovídajícího souboru.
Vytvořte nový soubor s názvem interface.py a přidejte kód s níže uvedenými aktualizacemi:
# Proměnné hry
save_slots = ['Slot 1', 'Slot 2', 'Slot 3']
vybraný_slot = Žádný# Herní smyčka
běh = Skutečný
zatímco běh:
pro událost v pygame.event.get():
-li event.type == pygame. PŘESTAT:
běh = Nepravdivé-li event.type == pygame. KEYDOWN:
-li event.key == pygame. K_s:
# Zobrazit sloty pro uložení
vybraný_slot = Žádný
pro i, slot v výčet (save_slots):
tisk(f"Uložit slot {i+1}: {slot}")
tisk("Vyberte slot pro uložení hry.")-li event.key == pygame. K_l:
tisk("Vyberte slot:- a - Slot 1, b - Slot 3, c - Slot 3")
# Zobrazit sloty pro uložení
vybraný_slot = Žádný
pro i, slot v výčet (save_slots):
tisk(f"Uložit slot {i+1}: {slot}")
tisk("Vyberte slot pro načtení hry.")-li klíč události v [pygame. K_1, pygame. K_2, pygame. K_3]:
# Uložte nebo načtěte hru na základě vybraného slotu
slot_index = event.key - pygame. K_1
selected_slot = save_slots[slot_index]
save_game_state (game_state, F"{selected_slot}.lák")
tisk(f"Hra uložena v {selected_slot}!")-li klíč události v [pygame. K_a, pygame. K_b, pygame. K_c]:
slot_index = event.key - pygame. K_a
selected_slot = save_slots[slot_index]
game_state = load_game_state(F"{selected_slot}.lák")
hráč_x = stav hry['player_x']
tisk(f"Hra načtena z {selected_slot}!")
# ...pygame.display.flip()
# ...
Níže je výstup:
Manipulace s možnostmi přepisování
Chcete-li poskytnout možnosti pro přepsání existujících uložení, můžete implementovat varovnou zprávu, která vyzve přehrávač k potvrzení před přepsáním uloženého souboru. Vytvořte nový soubor s názvem overwriting-save.py a upravte kód pomocí níže uvedených aktualizací:
# Uložit herní stav
defsave_game_state(game_state, file_name):
-li os.path.exists (název_souboru):
# Dotázat se na potvrzení přepsání existujícího uloženého souboru
přepsat = vstup("Uložit soubor již existuje. Chcete přepsat? (y/n): ")
-li overwrite.lower() != 'y':
tisk("Uložení zrušeno.")
vrátit seSnaž se:
s otevřít (název_souboru, 'wb') tak jako soubor:
pickle.dump (game_state, soubor)
tisk("Herní stav byl úspěšně uložen!")
až na IOError:
tisk("Chyba: Nelze uložit stav hry.")# ...
# Načíst stav hry
defload_game_state(název souboru):
-line os.path.exists (název_souboru):
tisk("Chyba: Uložit soubor neexistuje.")
vrátit seŽádnýSnaž se:
s otevřít (název_souboru, 'rb') tak jako soubor:
game_state = pickle.load (soubor)
tisk("Herní stav úspěšně načten!")
vrátit se game_state
až na (IOError, okurka. UnpicklingError):
tisk("Chyba: Nelze načíst stav hry.")
vrátit seŽádný
# ...
Ve výše uvedeném kódu před uložením stavu hry zkontrolujete, zda soubor pro uložení již existuje pomocí os.path.exists(). Pokud ano, požádáte přehrávač o potvrzení přepsání existujícího uloženého souboru. Pokud se přehrávač rozhodne nepřepisovat, operace ukládání se zruší.
Podobně před načtením herního stavu zkontrolujete, zda soubor pro uložení existuje pomocí os.path.exists(). Pokud ne, informujete přehrávač chybovou zprávou.
Nejlepší postupy pro systém ukládání a načítání
Při implementaci systému ukládání a načítání v PyGame nebo jakémkoli projektu vývoje her zvažte následující osvědčené postupy:
- Použijte dobře definovanou datovou strukturu k reprezentaci stavu hry a serializujte ji pomocí serializační knihovny, jako je např lák. To vám umožní snadno uložit a načíst celý stav hry.
- Vytvořte vyhrazený adresář nebo složku pro ukládání uložených souborů. To pomáhá uspořádat uložené soubory a zabraňuje zahlcení hlavního adresáře hry.
- Implementujte zpracování chyb a poskytujte informativní chybové zprávy, které vám pomohou s laděním a odstraňováním problémů. To pomáhá hráčům pochopit jakékoli problémy, které mohou nastat během operací ukládání a načítání.
- Zvažte implementaci více slotů pro ukládání, abyste hráčům umožnili uložit více her. To dává hráčům flexibilitu prozkoumávat různé cesty nebo opakovat určité části hry, aniž by přepisovali svůj postup.
Udělejte hry poutavější díky systému ukládání a načítání
Přidání funkce ukládání a načítání může výrazně zlepšit zapojení a požitek ze hry. Umožňuje hráčům uložit si svůj postup a vrátit se do hry podle potřeby. Navíc otevírá možnosti pro vytváření komplexních herních světů, kde mají hráčské volby a akce trvalé následky.
Implementací systému ukládání a načítání můžete dát svým hráčům větší pohlcující a uspokojivý herní zážitek.