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ĖLYNA

klasėŽaidimo langas(arkada. Langas):
def__init__(savaime, plotis, aukštis):
super().__init__(plotis, aukštis)
self.player_x = plotis // 2

instagram viewer

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.player_x -= PLAYER_SPEED
elifas raktas == arcade.key. DEŠINĖJE:
self.player_x += PLAYER_SPEED

defpagrindinis():
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 = 0

defuž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“:
praeiti

defiš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 = 0

defiš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.