Uzziniet, kā iekļaut spēles norises saglabāšanas un ielādes funkciju, lai nodrošinātu nevainojamu spēļu pieredzi.

Mūsdienu spēļu izstrādē iespēja saglabāt un ielādēt spēles progresu ir būtiska funkcija, kas uzlabo lietotāja pieredzi un iesaisti. PyGame, populāra bibliotēka 2D spēļu izveidei programmā Python, nodrošina nepieciešamos rīkus, lai bez piepūles ieviestu saglabāšanas un ielādes funkciju.

Vienkāršas spēles izveide

Pirms sākat, pārliecinieties, ka jums ir pip ir instalēts jūsu ierīcē. Pēc pip instalēšanas palaidiet tālāk norādīto komandu, lai instalētu pygame modulis:

pip instalēt pygame

Lai ilustrētu saglabāšanas un ielādes sistēmas ieviešanu PyGame, sāciet ar vienkāršas spēles izveidi.

Šajā rakstā izmantotais kods ir pieejams šajā GitHub repozitorijs un to varat izmantot bez maksas saskaņā ar MIT licenci.

Šajā spēlē spēlētājam būs iespēja pārvietoties pa kreisi un pa labi. Šeit ir koda fragmenta piemērs, kas parāda spēles pamata struktūru:

imports pygame

# Inicializējiet Pygame
pygame.init()

instagram viewer

# Iestatiet spēles logu
loga_platums = 800
loga_augstums = 600
logs = pygame.display.set_mode((loga_platums, loga_augstums))
pygame.display.set_caption("Sistēmas saglabāšanas un ielādes apmācība")

# Spēles mainīgie
spēlētājs_x = 400
spēlētājs_y = 500
player_speed = 5

# Spēles cilpa
skriešana = Taisnība
kamēr darbojas:
priekš notikumu iekšā pygame.event.get():
ja event.type == pygame. IZIET:
skriešana = Nepatiesi

taustiņi = pygame.key.get_pressed()
ja atslēgas [pygame. K_LEFT]:
player_x -= spēlētāja_ātrums
ja atslēgas [pygame. K_RIGHT]:
player_x += player_speed

# Notīriet ekrānu
window.fill((0, 0, 0))

# Uzzīmējiet atskaņotāju
pygame.draw.rect (logs, (255, 255, 255), (spēlētājs_x, spēlētājs_y, 50, 50))

# Atjauniniet displeju
pygame.display.flip()

# Iziet no spēles
pygame.quit()

Spēles stāvokļa un datu noturības pārvaldība

Pirms saglabāšanas un ielādes funkcionalitātes ieviešanas jums ir jāizveido veids, kā pārvaldīt spēles stāvokli un saglabāt datus. Viena izplatīta pieeja ir izmantojiet Python vārdnīcu lai saglabātu attiecīgos spēles datus. Tālāk ir sniegts piemērs tam, kā varat modificēt iepriekšējo kodu, lai iekļautu spēles stāvokļa pārvaldību.

# Spēles mainīgie
game_state = {
'player_x': 400,
'player_y': 500
}

# Spēles cilpa
skriešana = Taisnība
kamēr darbojas:
# ...

taustiņi = pygame.key.get_pressed()
ja atslēgas [pygame. K_LEFT]:
spēles_stāvoklis['player_x'] -= spēlētāja_ātrums
ja atslēgas [pygame. K_RIGHT]:
spēles_stāvoklis['player_x'] += atskaņotāja_ātrums

# ...

pygame.display.flip()

Saglabāšanas un ielādes funkcionalitātes ieviešana

Lai iespējotu spēles progresa saglabāšanu un ielādi, varat izmantot Python iebūvēto marinēti gurķi modulis, kas ļauj mums serializēt un deserializēt Python objektus. Izveidojiet jaunu failu ar nosaukumu save-game.py un pievienojiet kodu ar tālāk norādītajiem atjauninājumiem:

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

# Saglabājiet spēles stāvokli
defsave_game_state(spēles_state, faila_nosaukums):
mēģināt:
ar atvērt (faila_nosaukums, 'wb') fails:
pickle.dump (spēles statuss, fails)
drukāt ("Spēles stāvoklis veiksmīgi saglabāts!")
izņemot IO kļūda:
drukāt ("Kļūda: nevar saglabāt spēles stāvokli.")

# Ielādēt spēles stāvokli
defload_game_state(faila nosaukums):
mēģināt:
ar atvērt (faila_nosaukums, "rb") fails:
game_state = pickle.load (fails)
drukāt ("Spēles stāvoklis ir veiksmīgi ielādēts!")
atgriezties game_state
izņemot (IOKļūda, marinēts gurķis. UnpicklingError):
drukāt ("Kļūda: nevar ielādēt spēles stāvokli.")

# Spēles cilpa
skriešana = Taisnība
kamēr darbojas:

# ...

taustiņi = pygame.key.get_pressed()
ja atslēgas [pygame. K_LEFT]:
player_x -= spēlētāja_ātrums
spēles_stāvoklis['player_x'] = spēlētājs_x
ja atslēgas [pygame. K_RIGHT]:
player_x += player_speed
spēles_stāvoklis['player_x'] = spēlētājs_x

ja atslēgas [pygame. K_s]:
save_game_state (game_state, "save_game.pickle")
ja atslēgas [pygame. K_l]:
game_state = load_game_state("save_game.pickle")
spēlētājs_x = spēles_stāvoklis['player_x']

# ...

# ...

Zemāk ir izvade:

Lietotāja saskarnes projektēšana saglabāšanas slotiem

Lai nodrošinātu saglabāšanas un ielādes saskarni, varat parādīt saglabāšanas slotus, kas ļauj spēlētājam izvēlēties, kuru slotu saglabāt vai ielādēt. Šajā piemērā opcijas tiek parādītas konsolē, taču varat to izmantot Python GUI ietvari, lai izveidotu lietotājam draudzīgāku saskarni.

Izveidot a save_slots saraksts, kas atspoguļo pieejamās saglabāšanas vietas. Tāpat pievienojiet a atlasītais_slots mainīgais, lai izsekotu spēlētāja izvēlētajam slotam.

Rādīt pieejamos saglabāšanas laikus, kad spēlētājs nospiež saglabāšanas pogu (K_s). Spēlētājs var izvēlēties slotu, nospiežot atbilstošo cipara taustiņu (K_1, K_2, vai K_3). Ja ir atlasīts slots, spēles stāvoklis tiek saglabāts failā, kas nosaukts pēc atlasītā slota.

Līdzīgi, kad spēlētājs nospiež ielādes pogu (K_l), parādiet saglabāšanas vietas. Spēlētājs var izvēlēties slotu, nospiežot taustiņus K_a, K_b, vai K_c lai ielādētu spēles stāvokli. Alternatīvi, jūs varat izmantojiet pieskārienu ievades tastatūras ievades vietā slota izvēlei. Ja ir atlasīts slots, spēles stāvoklis tiek ielādēts no atbilstošā faila.

Izveidojiet jaunu failu ar nosaukumu interfeiss.py un pievienojiet kodu ar tālāk norādītajiem atjauninājumiem:

# Spēles mainīgie
save_slots = ["1. vieta", "Slot 2", "Slot 3"]
atlasītā_vieta = Nav

# Spēles cilpa
skriešana = Taisnība
kamēr darbojas:
priekš notikumu iekšā pygame.event.get():
ja event.type == pygame. IZIET:
skriešana = Nepatiesi

ja event.type == pygame. KEYDOWN:
ja event.key == pygame. K_s:
# Rādīt saglabāšanas vietas
atlasītā_vieta = Nav
priekš es, slots iekšā uzskaitīt (save_slots):
drukāt (f"Saglabāt slotu {i+1}: {slot}")
drukāt ("Izvēlieties slotu, lai saglabātu spēli.")

ja event.key == pygame. K_l:
drukāt ("Atlasīt slotu: - a - 1. slots, b - 3. slots, c - 3. slots")
# Rādīt saglabāšanas vietas
atlasītā_vieta = Nav
priekš es, slots iekšā uzskaitīt (save_slots):
drukāt (f"Saglabāt slotu {i+1}: {slot}")
drukāt ("Izvēlieties slotu, lai ielādētu spēli.")

ja notikums.atslēga iekšā [pygame. K_1, pygame. K_2, pygame. K_3]:
# Saglabājiet vai ielādējiet spēli, pamatojoties uz atlasīto slotu
slot_index = event.key — pygame. K_1
atlasītais_vieta = saglabāšanas_vietas[vietas_indekss]

save_game_state (game_state, f"{selected_slot}.marinēts")
drukāt (f"Spēle saglabāta {selected_slot}!")

ja notikums.atslēga iekšā [pygame. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key — pygame. K_a
atlasītais_vieta = saglabāšanas_vietas[vietas_indekss]
game_state = load_game_state(f"{selected_slot}.marinēts")
spēlētājs_x = spēles_stāvoklis['player_x']
drukāt (f"Spēle ielādēta no {selected_slot}!")
# ...

pygame.display.flip()

# ...

Zemāk ir izvade:

Nav nepieciešams attiecinājums: Imran ekrānuzņēmums

Pārrakstīšanas opciju apstrāde

Lai nodrošinātu esošās saglabāšanas pārrakstīšanas iespējas, varat ieviest brīdinājuma ziņojumu, kas aicina atskaņotāju apstiprināt pirms saglabāšanas faila pārrakstīšanas. Izveidojiet jaunu failu ar nosaukumu overwriting-save.py un modificējiet kodu ar tālāk norādītajiem atjauninājumiem:

# Saglabājiet spēles stāvokli
defsave_game_state(spēles_state, faila_nosaukums):
ja os.path.exists (faila_nosaukums):
# Pieprasīt apstiprinājumu, lai pārrakstītu esošo saglabāšanas failu
pārrakstīt = ievade("Saglabāšanas fails jau pastāv. Vai vēlaties pārrakstīt? (y/n): ")
ja pārrakstīt.zemāks() != 'y':
drukāt ("Saglabāšana atcelta.")
atgriezties

mēģināt:
ar atvērt (faila_nosaukums, 'wb') fails:
pickle.dump (spēles statuss, fails)
drukāt ("Spēles stāvoklis veiksmīgi saglabāts!")
izņemot IO kļūda:
drukāt ("Kļūda: nevar saglabāt spēles stāvokli.")

# ...

# Ielādēt spēles stāvokli
defload_game_state(faila nosaukums):
ja os.path.exists (faila_nosaukums):
drukāt ("Kļūda: saglabāšanas fails neeksistē.")
atgrieztiesNav

mēģināt:
ar atvērt (faila_nosaukums, "rb") fails:
game_state = pickle.load (fails)
drukāt ("Spēles stāvoklis ir veiksmīgi ielādēts!")
atgriezties game_state
izņemot (IOKļūda, marinēts gurķis. UnpicklingError):
drukāt ("Kļūda: nevar ielādēt spēles stāvokli.")
atgrieztiesNav

# ...

Iepriekš minētajā kodā pirms spēles stāvokļa saglabāšanas pārbaudiet, vai saglabāšanas fails jau pastāv, izmantojot os.path.exists(). Ja tā notiek, atskaņotājā tiek prasīts apstiprināt esošā saglabāšanas faila pārrakstīšanu. Ja atskaņotājs izvēlas nepārrakstīt, saglabāšanas darbība tiek atcelta.

Tāpat pirms spēles stāvokļa ielādes pārbaudiet, vai saglabāšanas fails pastāv, izmantojot os.path.exists(). Ja tā nenotiek, jūs informējat atskaņotāju ar kļūdas ziņojumu.

Saglabāšanas un ielādes sistēmas labākā prakse

Ieviešot saglabāšanas un ielādes sistēmu PyGame vai jebkurā spēļu izstrādes projektā, ņemiet vērā šādu paraugpraksi:

  • Izmantojiet precīzi definētu datu struktūru, lai attēlotu spēles stāvokli un serializētu to, izmantojot serializācijas bibliotēku, piemēram marinēti gurķi. Tas ļauj ērti saglabāt un ielādēt visu spēles stāvokli.
  • Izveidojiet īpašu direktoriju vai mapi saglabāto failu glabāšanai. Tas palīdz sakārtot saglabātos failus un novērš galvenā spēles direktorija pārblīvēšanu.
  • Ieviesiet kļūdu apstrādi un sniedziet informatīvus kļūdu ziņojumus, lai palīdzētu atkļūdot un novērst problēmas. Tas palīdz spēlētājiem izprast visas problēmas, kas var rasties saglabāšanas un ielādes darbību laikā.
  • Apsveriet iespēju ieviest vairākas saglabāšanas vietas, lai spēlētāji varētu saglabāt vairākas spēles. Tas sniedz spēlētājiem elastību, lai izpētītu dažādus ceļus vai atkārtotu noteiktas spēles sadaļas, nepārrakstot savu progresu.

Padariet spēles saistošākas, izmantojot saglabāšanas un ielādes sistēmu

Saglabāšanas un ielādes funkcijas pievienošana var ievērojami uzlabot spēles iesaistīšanos un baudījumu. Tas ļauj spēlētājiem saglabāt savu progresu un atgriezties spēlē sev ērtā laikā. Turklāt tas paver iespējas izveidot sarežģītas spēļu pasaules, kurās spēlētāju izvēlei un darbībām ir paliekošas sekas.

Ieviešot saglabāšanas un ielādes sistēmu, jūs varat dot saviem spēlētājiem aizraujošāku un apmierinošāku spēļu pieredzi.