Sužinokite, kaip įtraukti žaidimo eigos išsaugojimo ir įkėlimo funkciją, kad žaidimų patirtis būtų sklandi.
Kuriant šiuolaikinius žaidimus, galimybė išsaugoti ir įkelti žaidimo eigą yra esminė savybė, kuri pagerina vartotojo patirtį ir įtraukimą. „PyGame“, populiari biblioteka, skirta kurti 2D žaidimus „Python“, suteikia reikalingus įrankius, kad būtų galima lengvai įgyvendinti išsaugojimo ir įkėlimo funkciją.
Paprasto žaidimo kūrimas
Prieš pradėdami įsitikinkite, kad turite pip įdiegtas jūsų įrenginyje. Įdiegę pip, paleiskite toliau pateiktą komandą, kad įdiegtumėte pygame modulis:
pip įdiegti pygame
Norėdami iliustruoti išsaugojimo ir įkėlimo sistemos įgyvendinimą PyGame, pradėkite nuo paprasto žaidimo kūrimo.
Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.
Šiame žaidime žaidėjas turės galimybę judėti į kairę ir į dešinę. Pateikiame kodo fragmento, kuris parodo pagrindinę žaidimo struktūrą, pavyzdį:
importuoti pygame
# Inicijuoti Pygame
pygame.init()# Nustatykite žaidimo langą
lango_plotis = 800
lango_aukštis = 600
langas = pygame.display.set_mode((lango_plotis, lango_aukštis))
pygame.display.set_caption(„Išsaugoti ir įkelti sistemos pamoka“)# Žaidimo kintamieji
žaidėjas_x = 400
žaidėjas_y = 500
žaidėjo_greitis = 5# Žaidimo kilpa
bėgimas = Tiesa
kol veikia:
dėl renginys in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
bėgimas = Netiesaklavišai = pygame.key.get_pressed()
jeigu raktai[pygame. K_LEFT]:
žaidėjas_x - = žaidėjo_greitis
jeigu raktai[pygame. K_RIGHT]:
žaidėjas_x += grotuvo_greitis# Išvalykite ekraną
window.fill((0, 0, 0))# Nupieškite grotuvą
pygame.draw.rect (langas, (255, 255, 255), (žaidėjas_x, žaidėjas_y, 50, 50))# Atnaujinkite ekraną
pygame.display.flip()
# Išeikite iš žaidimo
pygame.quit()
Žaidimo būsenos ir duomenų patvarumo valdymas
Prieš įdiegdami išsaugojimo ir įkėlimo funkciją, turite nustatyti būdą, kaip valdyti žaidimo būseną ir išsaugoti duomenis. Vienas bendras požiūris yra naudoti Python žodyną saugoti atitinkamus žaidimo duomenis. Štai pavyzdys, kaip galite modifikuoti ankstesnį kodą, kad būtų įtrauktas žaidimo būsenos valdymas:
# Žaidimo kintamieji
game_state = {
'player_x': 400,
'player_y': 500
}# Žaidimo kilpa
bėgimas = Tiesa
kol veikia:
# ...klavišai = pygame.key.get_pressed()
jeigu raktai[pygame. K_LEFT]:
žaidimo būsena['player_x'] -= žaidėjo_greitis
jeigu raktai[pygame. K_RIGHT]:
žaidimo būsena['player_x'] += žaidėjo_greitis# ...
pygame.display.flip()
Įdiegti išsaugojimo ir įkėlimo funkciją
Norėdami išsaugoti ir įkelti žaidimo eigą, galite panaudoti integruotą Python marinuoti agurkai modulis, leidžiantis serializuoti ir deserializuoti Python objektus. Sukurkite naują failą pavadinimu save-game.py ir pridėkite kodą su toliau pateiktais atnaujinimais:
game_state = {
'player_x': žaidėjas_x,
'player_y': žaidėjas_y
}# Išsaugoti žaidimo būseną
defsave_game_state(žaidimo būsena, failo_pavadinimas):
bandyti:
su atidaryti (failo_pavadinimas, "wb") kaip failas:
pickle.dump (žaidimo būsena, failas)
spausdinti ("Žaidimo būsena sėkmingai išsaugota!")
išskyrus IO klaida:
spausdinti ("Klaida: nepavyko išsaugoti žaidimo būsenos.")# Įkelti žaidimo būseną
defload_game_state(failo pavadinimas):
bandyti:
su atidaryti (failo_pavadinimas, "rb") kaip failas:
game_state = pickle.load (failas)
spausdinti ("Žaidimo būsena sėkmingai įkelta!")
grąžinti žaidimo būsena
išskyrus (IOKlaida, marinatas. UnpiclingError):
spausdinti ("Klaida: nepavyko įkelti žaidimo būsenos.")# Žaidimo kilpa
bėgimas = Tiesa
kol veikia:# ...
klavišai = pygame.key.get_pressed()
jeigu raktai[pygame. K_LEFT]:
žaidėjas_x - = žaidėjo_greitis
žaidimo būsena['player_x'] = žaidėjas_x
jeigu raktai[pygame. K_RIGHT]:
žaidėjas_x += grotuvo_greitis
žaidimo būsena['player_x'] = žaidėjas_xjeigu raktai[pygame. K_s]:
save_game_state (game_state, 'save_game.pickle')
jeigu raktai[pygame. K_l]:
game_state = load_game_state('save_game.pickle')
žaidėjas_x = žaidimo būsena['player_x']
# ...
# ...
Žemiau yra išvestis:
Vartotojo sąsajos kūrimas išsaugojimo lizdams
Norėdami suteikti išsaugojimo ir įkėlimo sąsają, galite rodyti išsaugojimo lizdus, leidžiančius žaidėjui pasirinkti, kurį lizdą išsaugoti arba įkelti. Šiame pavyzdyje parinktys rodomos konsolėje, tačiau galite naudoti Python GUI sistemas, kad būtų sukurta patogesnė sąsaja.
Sukurti save_slots sąrašą, kuriame pateikiamos galimos išsaugojimo vietos. Taip pat pridėkite a pasirinktas_slot kintamasis, skirtas sekti žaidėjo pasirinktą lizdą.
Rodyti galimus išsaugojimo tarpus, kai žaidėjas paspaudžia išsaugojimo mygtuką (K_s). Žaidėjas gali pasirinkti lizdą paspausdamas atitinkamą skaičiaus klavišą (K_1, K_2, arba K_3). Jei pasirenkamas lizdas, žaidimo būsena išsaugoma faile, pavadintame pagal pasirinktą lizdą.
Panašiai, kai grotuvas paspaudžia įkėlimo mygtuką (K_l), parodykite išsaugojimo vietas. Žaidėjas gali pasirinkti lizdą paspausdamas klavišus K_a, K_b, arba K_c Norėdami įkelti žaidimo būseną. Arba galite naudoti jutiklinius įvestis vietoj klaviatūros įvesties lizdo pasirinkimui. Jei pasirenkamas lizdas, žaidimo būsena įkeliama iš atitinkamo failo.
Sukurkite naują failą pavadinimu sąsaja.py ir pridėkite kodą su toliau pateiktais atnaujinimais:
# Žaidimo kintamieji
save_slots = [„1 vieta“, „2 vieta“, „3 lizdas“]
pasirinktas_slot = Nė vienas# Žaidimo kilpa
bėgimas = Tiesa
kol veikia:
dėl renginys in pygame.event.get():
jeigu event.type == pygame. UŽDARYTI:
bėgimas = Netiesajeigu event.type == pygame. KEYDOWN:
jeigu event.key == pygame. K_s:
# Rodyti išsaugojimo vietas
pasirinktas_slot = Nė vienas
dėl aš, lizdas in išvardinti (save_slots):
spausdinti (f"Išsaugoti lizdą {i+1}: {slot}")
spausdinti ("Pasirinkite lizdą, kad išsaugotumėte žaidimą.")jeigu event.key == pygame. K_l:
spausdinti ("Pasirinkite lizdą: - a - 1 lizdas, b - 3 lizdas, c - 3 lizdas")
# Rodyti išsaugojimo vietas
pasirinktas_slot = Nė vienas
dėl aš, lizdas in išvardinti (save_slots):
spausdinti (f"Išsaugoti lizdą {i+1}: {slot}")
spausdinti ("Pasirinkite lizdą, kad įkeltumėte žaidimą.")jeigu įvykis.raktas in [pygame. K_1, pygame. K_2, pygame. K_3]:
# Išsaugokite arba įkelkite žaidimą pagal pasirinktą lizdą
slot_index = event.key – pygame. K_1
select_slot = išsaugoti_slots[slot_index]
save_game_state (game_state, f"{selected_lot}.pickle")
spausdinti (f"Žaidimas išsaugotas {selected_lot}!")jeigu įvykis.raktas in [pygame. K_a, pygame. K_b, pygame. K_c]:
slot_index = event.key – pygame. K_a
select_slot = išsaugoti_slots[slot_index]
game_state = load_game_state(f"{selected_lot}.pickle")
žaidėjas_x = žaidimo būsena['player_x']
spausdinti (f"Žaidimas įkeltas iš {selected_lot}!")
# ...pygame.display.flip()
# ...
Žemiau yra išvestis:
Perrašymo parinkčių tvarkymas
Norėdami pateikti esamų įrašų perrašymo parinktis, galite įdiegti įspėjamąjį pranešimą, kuris ragina grotuvą patvirtinti prieš perrašant išsaugojimo failą. Sukurkite naują failą pavadinimu overwriting-save.py ir pakeiskite kodą naudodami toliau nurodytus atnaujinimus:
# Išsaugoti žaidimo būseną
defsave_game_state(žaidimo būsena, failo_pavadinimas):
jeigu os.path.exists (failo_pavadinimas):
# Prašyti patvirtinimo perrašyti esamą išsaugojimo failą
perrašyti = input(„Išsaugoti failą jau yra. Ar norite perrašyti? (y/n): ")
jeigu perrašyti.žemesnis() != 'y':
spausdinti („Išsaugojimas atšauktas“.)
grąžintibandyti:
su atidaryti (failo_pavadinimas, "wb") kaip failas:
pickle.dump (žaidimo būsena, failas)
spausdinti ("Žaidimo būsena sėkmingai išsaugota!")
išskyrus IO klaida:
spausdinti ("Klaida: nepavyko išsaugoti žaidimo būsenos.")# ...
# Įkelti žaidimo būseną
defload_game_state(failo pavadinimas):
jeigune os.path.exists (failo_pavadinimas):
spausdinti ("Klaida: išsaugoti failą nėra.")
grąžintiNė vienasbandyti:
su atidaryti (failo_pavadinimas, "rb") kaip failas:
game_state = pickle.load (failas)
spausdinti ("Žaidimo būsena sėkmingai įkelta!")
grąžinti žaidimo būsena
išskyrus (IOKlaida, marinatas. UnpiclingError):
spausdinti ("Klaida: nepavyko įkelti žaidimo būsenos.")
grąžintiNė vienas
# ...
Aukščiau pateiktame kode prieš išsaugodami žaidimo būseną patikrinkite, ar išsaugojimo failas jau egzistuoja naudojant os.path.exists(). Jei taip, jūs paprašysite grotuvo patvirtinti esamo išsaugojimo failo perrašymą. Jei grotuvas pasirenka neperrašyti, išsaugojimo operacija atšaukiama.
Panašiai, prieš įkeldami žaidimo būseną, patikrinkite, ar išsaugojimo failas egzistuoja naudojant os.path.exists(). Jei ne, pranešate žaidėjui klaidos pranešimu.
Geriausia išsaugokite ir įkelkite sistemą
Diegdami išsaugojimo ir įkėlimo sistemą PyGame arba bet kuriame žaidimų kūrimo projekte, atsižvelkite į šią geriausią praktiką:
- Naudokite tiksliai apibrėžtą duomenų struktūrą, kad pavaizduotumėte žaidimo būseną ir suskirstytumėte ją naudodami serializacijos biblioteką, pvz., marinuoti agurkai. Tai leidžia lengvai išsaugoti ir įkelti visą žaidimo būseną.
- Sukurkite specialų katalogą arba aplanką išsaugotiems failams saugoti. Tai padeda tvarkyti išsaugotus failus ir neleidžia užgriozdinti pagrindinio žaidimo katalogo.
- Įdiekite klaidų tvarkymą ir pateikite informatyvius klaidų pranešimus, kad padėtų derinti ir šalinti triktis. Tai padeda žaidėjams suprasti visas problemas, kurios gali kilti atliekant išsaugojimo ir įkėlimo operacijas.
- Apsvarstykite galimybę įdiegti kelis įrašymo laikus, kad žaidėjai galėtų išsaugoti kelis žaidimus. Tai suteikia žaidėjams lankstumo tyrinėti skirtingus kelius arba pakartoti tam tikras žaidimo dalis neperrašant savo pažangos.
Padarykite žaidimus patrauklesnius naudodami išsaugojimo ir įkėlimo sistemą
Papildoma išsaugojimo ir įkėlimo funkcija gali žymiai padidinti žaidimo įsitraukimą ir malonumą. Tai leidžia žaidėjams išsaugoti progresą ir grįžti į žaidimą jiems patogiu metu. Be to, tai atveria galimybes kurti sudėtingus žaidimų pasaulius, kuriuose žaidėjų pasirinkimai ir veiksmai turi ilgalaikių pasekmių.
Įdiegę išsaugojimo ir įkėlimo sistemą galite suteikti žaidėjams daugiau įtraukiančių ir malonesnių žaidimų patirties.