Jei jūsų žaidimas nėra labai trumpas, tai padeda išsaugoti pažangą. Net trumpiems žaidimams gali būti naudinga išsaugoti aukštus rezultatus.
Įtraukę į savo žaidimą išsaugojimo ir įkėlimo sistemą, galite žymiai pagerinti žaidėjo patirtį. Tai leidžia žaidėjams tęsti savo progresą, atnaujinti žaidimo sesijas ir eksperimentuoti su įvairiomis strategijomis neprarandant sunkiai uždirbtų laimėjimų.
Būsite maloniai nustebinti, kaip paprasta pridėti šią funkciją prie žaidimo naudojant Python Arcade biblioteką.
Sukurkite paprastą žaidimą
Pradėkite nuo kūrimo paprastas žaidimas, kuriame žaidėjas gali judėti kairė ir dešinė.
Šiame straipsnyje naudojamas kodas pateikiamas čia GitHub saugykla ir jūs galite nemokamai naudotis pagal MIT licenciją.
Sukurkite naują failą pavadinimu paprastas žaidimas.py ir pridėkite žemiau esantį kodą:
importuoti arkada
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
mėlyna = arkada.spalva. MĖLYNAklasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.player_x = plotis // 2defon_draw(savarankiškai):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, mėlyna)defatnaujinti(savaime, delta_laikas):
praeitidefyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= PLAYER_SPEED
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += PLAYER_SPEEDdefpagrindinis():
langas = Žaidimo langas (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()
jeigu __vardas__ == '__pagrindinis__':
pagrindinis ()
Kodas sukuria langą su mėlynu stačiakampiu, vaizduojančiu grotuvą. Žaidėjas gali judėti į kairę ir į dešinę, naudodamas kairiojo ir dešiniojo rodyklių klavišus.
Žaidimo būsenų valdymas
Norėdami įdiegti išsaugojimo ir įkėlimo sistemą, turite valdyti skirtingas žaidimo būsenas. Žaidimo būsena rodo dabartinę žaidimo būseną, įskaitant objektų pozicijas, rezultatus ir kitus susijusius duomenis. Šiame pavyzdyje sutelkite dėmesį tik į žaidėjo x koordinatę.
Norėdami valdyti žaidimo būsenas, įveskite a GameState klasė, kuri apima žaidimo duomenis ir pateikia metodus, kaip juos išsaugoti ir įkelti. Štai kodas:
klasėGameState:
def__init__(savarankiškai):
self.player_x = 0
Žaidimo duomenų išsaugojimas
Norėdami išsaugoti žaidimo duomenis, pratęskite Žaidimo langas klasę ir pridėkite metodą, kad prireikus išsaugotumėte žaidimo būseną. Dėl paprastumo naudokite JSON formatą. Štai kodas:
Viduje išsaugoti žaidimą metodas, sukurti Python žodyną kuriame yra atitinkami žaidimo duomenys. Tada suskirstykite jį į JSON failą, vadinamą save.json.
importuoti json
klasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.game_state = GameState()defišsaugoti žaidimą(savarankiškai):
duomenys = {
'player_x': self.game_state.player_x
}
su atviras(„Save.json“, "w") kaip failas:
json.dump (duomenys, failas)
spausdinti (duomenys)defon_draw(savarankiškai):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, mėlyna)defatnaujinti(savaime, delta_laikas):
praeiti
defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.game_state.player_x -= PLAYER_SPEED
elifas raktas == arcade.key. DEŠINĖJE:
self.game_state.player_x += PLAYER_SPEED
elifas raktas == arcade.key. S:
self.save_game()
Įkeliami žaidimo duomenys
Norėdami įkelti žaidimo duomenis, pratęskite Žaidimo langas klasę toliau ir pridėkite metodą žaidimo būsenai įkelti. Sukurkite naują failą pavadinimu load-game.py ir pridėkite kodą su toliau pateiktais atnaujinimais:
klasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.game_state = GameState()
self.load_game()defužkrauti žaidimą(savarankiškai):
bandyti:
su atviras(„Save.json“, "r") kaip failas:
duomenys = json.load (failas)
self.game_state.player_x = duomenys['player_x']
išskyrus „FileNotFoundError“:
praeiti
defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. L:
self.load_game()
The užkrauti žaidimą metodas bando atidaryti save.json failą ir gauti žaidimo duomenis. Tada jis atnaujina žaidimo būseną su įkeltais duomenimis. Jei failo nėra, galite tiesiog nepaisyti išimties, palikdami numatytąją žaidimo būseną.
Įskaitant papildomas funkcijas
Galite pridėti daugiau funkcijų, kad pagerintumėte žaidimo išsaugojimo ir įkėlimo sistemą.
Aukštų balų išsaugojimas
Daugelio žaidimų įprastas bruožas yra aukštų rezultatų išsaugojimas kartu su žaidimo būsena. Tu gali valdyti balus ir išsaugokite aukštą rezultatą naudodami šią sistemą. Sukurkite naują failą pavadinimu aukštas rezultatas.py ir pridėkite kodą su toliau pateiktais atnaujinimais:
klasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.high_score = 0defužkrauti žaidimą(savarankiškai):
bandyti:
su atviras(„Save.json“, "r") kaip failas:
duomenys = json.load (failas)
spausdinti (duomenys)
self.player_x = data.get('player_x', self.player_x)
self.high_score = data.get('rekordas', self.high_score)
išskyrus „FileNotFoundError“:
praeitidefišsaugoti žaidimą(savarankiškai):
duomenys = {
'player_x': self.player_x,
'rekordas': self.high_score
}
su atviras(„Save.json“, "w") kaip failas:
json.dump (duomenys, failas)
spausdinti (duomenys)
defyra_key_press(savaime, raktas, modifikatoriai):
jeigu raktas == arcade.key. KAIRĖ:
self.player_x -= PLAYER_SPEED
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += PLAYER_SPEED
self.high_score += 1
Automatinio išsaugojimo funkcija
Norėdami suteikti žaidėjams ramybę ir išvengti progreso praradimo, galite automatiškai išsaugoti žaidimo būseną reguliariais intervalais. Sukurkite naują failą pavadinimu automatinis išsaugojimas.py ir pridėkite kodą su toliau pateiktais atnaujinimais:
importuoti laikas
klasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.game_state = GameState()# Išsaugokite kas 6 sekundes
self.autosave_interval = 6
self.last_save_time = laikas.laikas()defatnaujinti(savaime, delta_laikas):
dabartinis_laikas = laikas.laikas()
time_diff = esamas_laikas – self.last_save_time
jeigu time_diff >= self.autosave_interval:
self.save_game()
spausdinti ("Išsaugota")
self.last_save_time = esamas_laikas
Šiame kodo fragmente atnaujinti metodas patikrina, ar nurodytas laiko intervalas praėjo nuo paskutinio išsaugojimo. Jei taip, tai suaktyvina išsaugoti žaidimą metodas Žaidimo langas klasėje, kad automatiškai išsaugotumėte žaidimo būseną. Sureguliuokite automatinio išsaugojimo_intervalas vertė pagal jūsų žaidimo reikalavimus.
Žaidimo duomenų patvirtinimas
Įkeltų žaidimo duomenų patvirtinimas yra būtinas norint užtikrinti jų vientisumą ir nuoseklumą. Galite lengvai įtraukti duomenų patvirtinimą į mūsų išsaugojimo ir įkėlimo sistemą:
klasėGameState:
def__init__(savarankiškai):
self.player_x = 0defišsaugoti_būseną(savarankiškai):
jeigu self.is_valid_state():
duomenys = {
'player_x': self.player_x
}su atviras(„Save.json“, "w") kaip failas:
json.dump (duomenys, failas)defapkrovos_būsena(savarankiškai):
su atviras(„Save.json“, "r") kaip failas:
duomenys = json.load (failas)jeigu self.validate_loaded_data (duomenys):
self.player_x = duomenys['player_x']
Kitas:
spausdinti ("Klaida!")defyra_galiojanti_būsena(savarankiškai):
# Čia atlikite patvirtinimo logiką
# Grąžinkite „True“, jei būsena galioja, „False“, kitaip
praeiti
defpatvirtinti_įkelti_duomenys(aš, duomenys):
# Atlikite įkeltų duomenų patvirtinimą
# Grąžinti „True“, jei duomenys galioja, „False“, kitaip
praeiti
Įtraukę šias papildomas funkcijas į išsaugojimo ir įkėlimo sistemą, galite sukurti universalesnį ir patikimesnį žaidimą patirtis, suteikianti žaidėjams galimybę išsaugoti kelias žaidimo būsenas, sekti aukščiausius rezultatus, įjungti automatinį išsaugojimą ir užtikrinti duomenis vientisumas.
Geriausia taupymo ir įkėlimo sistemos praktika
Įrašymo ir įkėlimo sistemos įdiegimas yra svarbus žaidimo kūrimo aspektas. Norint užtikrinti tvirtą ir patikimą sistemą, būtina laikytis geriausios praktikos. Štai keletas pagrindinių praktikų, į kurias reikia atsižvelgti:
Šifruoti jautrius duomenis
Jei žaidime yra neskelbtinos informacijos, pvz., slaptažodžių, asmeninių duomenų ar pirkinių programoje, labai svarbu užšifruoti išsaugotą žaidimo būseną. Šifravimas suteikia papildomo saugumo lygio, apsaugo žaidėjo privatumą ir neleidžia neteisėtai prieiti prie jų duomenų. Norėdami apsaugoti neskelbtiną informaciją, naudokite šifravimo algoritmus ir bibliotekas.
Patvirtinkite įkeltus duomenis
Prieš įkeliant žaidimo duomenis, būtina juos patvirtinti, kad būtų užtikrintas jų vientisumas ir nuoseklumas. Patikrinkite, ar įkelti duomenys atitinka numatytą žaidimo formatą, struktūrą ir apribojimus.
Atlikite svarbių duomenų laukų patvirtinimo patikras, kad išvengtumėte gedimų ar sukčiavimo. Įdiekite patikimus duomenų patvirtinimo mechanizmus, kad galėtumėte apdoroti galimas klaidas ar netikėtus duomenis.
Maloniai elkitės su klaidomis
Atliekant failų įvesties / išvesties operacijas, gali atsirasti klaidų. Labai svarbu grakščiai elgtis su šiomis klaidomis ir žaidėjui pateikti informatyvius klaidų pranešimus. Pagauk ir tvarkyk išimtis, pvz „FileNotFoundError“. arba Leidimo klaida, atliekant išsaugojimo ir įkėlimo operacijas.
Rodykite patogius klaidų pranešimus, kad padėtų žaidėjams ir išvengtumėte nusivylimo. Be to, apsvarstykite galimybę įdiegti klaidų registravimą, kad būtų lengviau diagnozuoti ir išspręsti problemas.
Išbandykite išsaugojimo ir įkėlimo funkciją
Kruopščiai išbandykite savo žaidimo išsaugojimo ir įkėlimo funkcijas, kad įsitikintumėte, jog jis patikimas ir teisingas. Kurkite bandomuosius atvejus, apimančius įvairius scenarijus, pvz., įrašymą skirtingose žaidimo būsenose, įkėlimą iš galiojančių ir negaliojančių įrašymo failų ir išbandymo kraštutinius atvejus.
Patvirtinkite, kad žaidimo būsena yra tinkamai išsaugota ir įkelta ir ar elgsis taip, kaip tikėtasi. Automatizuotos testavimo sistemos gali padėti sukurti išsamius bandymų rinkinius.
Padarykite žaidimus linksmesnius naudodami išsaugojimo ir įkėlimo sistemą
Pridėjus išsaugojimo ir įkėlimo sistemą, žaidimai gali tapti patrauklesni, nes žaidėjai jaučiasi tęstinumas ir progresas. Žaidėjai gali laisvai eksperimentuoti, išbandyti įvairius metodus ir vėliau grįžti į žaidimą neprarasdami savo laimėjimų.
Ši funkcija taip pat leidžia žaidėjams konkuruoti su draugais arba iššūkį sau įveikti savo ankstesnius aukštus balus, todėl jūsų žaidimas gali būti atkuriamas ir ilgalaikis įsitraukimas.