Kui teie mäng pole väga lühike, aitab see edusamme salvestada. Isegi lühikesed mängud võivad rekordeid salvestada.

Salvestamis- ja laadimissüsteemi lisamine mängule võib mängija kogemust oluliselt parandada. See võimaldab mängijatel oma edusamme jätkata, mänguseansse jätkata ja katsetada erinevaid strateegiaid ilma raskelt teenitud saavutusi kaotamata.

Olete meeldivalt üllatunud, kui lihtne on lisada see funktsioon oma mängu Pythoni Arcade teegi abil.

Looge lihtne mäng

Alusta loomisega lihtne mäng, kus mängija saab liikuda vasakule ja paremale.

Selles artiklis kasutatud kood on saadaval selles GitHubi hoidla ja seda saate MIT-i litsentsi alusel tasuta kasutada.

Looge uus fail nimega lihtne-mäng.py ja lisage allolev kood:

importida arkaad

SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600
PLAYER_SPEED = 5
sinine = arkaad.värv. SININE

klassMänguaken(arkaad. aken):
def__selles__(ise, laius, kõrgus):
super().__init__(laius, kõrgus)
self.player_x = laius // 2

defon_draw(ise):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, sinine)

defvärskendada(ise, delta_aeg):
üle andma

defon_key_press(ise, võti, muutjad):
kui võti == arcade.key. VASAKULE:
self.player_x -= PLAYER_SPEED
elif võti == arcade.key. PAREMALE:
self.player_x += PLAYER_SPEED

defpeamine():
aken = Mänguaken (SCREEN_WIDTH, SCREEN_HEIGHT)
arcade.run()

kui __nimi__ == '__peamine__':
peamine ()

Kood loob mängijat tähistava sinise ristkülikuga akna. Mängija saab liikuda vasakule ja paremale, kasutades vasakut ja paremat nooleklahvi.

Mänguseisundite haldamine

Salvestamis- ja laadimissüsteemi juurutamiseks peate haldama erinevaid mänguolekuid. Mängu olek tähistab mängu hetkeseisu, sealhulgas objektide asukohti, tulemusi ja muid asjakohaseid andmeid. Selle näite puhul keskenduge ainult mängija x-koordinaadile.

Mängu olekute haldamiseks tutvustage a GameState klass, mis kapseldab mängu andmed ja pakub meetodeid nende salvestamiseks ja laadimiseks. Siin on kood:

klassGameState:
def__selles__(ise):
self.player_x = 0

Mänguandmete salvestamine

Mänguandmete salvestamiseks pikendage Mänguaken klassi ja lisage vajadusel meetod mängu oleku salvestamiseks. Lihtsuse huvides kasutage JSON-vormingut. Siin on kood:

Aastal Salvesta mäng meetod, luua Pythoni sõnaraamat mis sisaldab vastavaid mänguandmeid. Seejärel jada see JSON-failiks nimega save.json.

importida json

klassMänguaken(arkaad. aken):
def__selles__(ise, laius, kõrgus):
super().__init__(laius, kõrgus)
self.game_state = GameState()

defSalvesta mäng(ise):
andmed = {
'mängija_x': self.game_state.player_x
}
koos avatud ("Save.json", 'w') nagu fail:
json.dump (andmed, fail)
print (andmed)

defon_draw(ise):
arcade.start_render()
arcade.draw_rectangle_filled (self.game_state.player_x,
50, 50, 50, sinine)

defvärskendada(ise, delta_aeg):
üle andma

defon_key_press(ise, võti, muutjad):
kui võti == arcade.key. VASAKULE:
self.game_state.player_x -= MÄNGIJA_KIIRUS
elif võti == arcade.key. PAREMALE:
self.game_state.player_x += PLAYER_SPEED
elif võti == arcade.key. S:
self.save_game()

Mänguandmete laadimine

Mängu andmete laadimiseks pikendage Mänguaken klassi edasi ja lisage meetod mängu oleku laadimiseks. Looge uus fail nimega load-game.py ja lisage kood koos allolevate värskendustega:

klassMänguaken(arkaad. aken):
def__selles__(ise, laius, kõrgus):
super().__init__(laius, kõrgus)
self.game_state = GameState()
self.load_game()

defload_game(ise):
proovige:
koos avatud ("Save.json", 'r') nagu fail:
andmed = json.load (fail)
self.game_state.player_x = andmed['mängija_x']
välja arvatud FileNotFoundError:
üle andma

defon_key_press(ise, võti, muutjad):
kui võti == arcade.key. L:
self.load_game()

The load_game meetod üritab avada save.json faili ja hankige mängu andmed. Seejärel värskendab see mängu olekut laaditud andmetega. Kui faili pole olemas, võite erandit lihtsalt ignoreerida, jättes mängu vaikeoleku.

Kaasa arvatud lisafunktsioonid

Mängu salvestamise ja laadimise süsteemi täiustamiseks saate lisada rohkem funktsioone.

rekordite salvestamine

Mängu oleku kõrval rekordite salvestamine on paljudes mängudes tavaline funktsioon. Sa saad hallata hindeid ja salvestage rekord selle süsteemi abil. Looge uus fail nimega high-score.py ja lisage kood koos allolevate värskendustega:

klassMänguaken(arkaad. aken):
def__selles__(ise, laius, kõrgus):
super().__init__(laius, kõrgus)
ise.high_score = 0

defload_game(ise):
proovige:
koos avatud ("Save.json", 'r') nagu fail:
andmed = json.load (fail)
print (andmed)
self.player_x = data.get('mängija_x', self.player_x)
self.high_score = data.get('kõrgeim punktisumma', self.high_score)
välja arvatud FileNotFoundError:
üle andma

defSalvesta mäng(ise):
andmed = {
'mängija_x': self.player_x,
'kõrgeim punktisumma': ise.high_score
}
koos avatud ("Save.json", 'w') nagu fail:
json.dump (andmed, fail)
print (andmed)

defon_key_press(ise, võti, muutjad):
kui võti == arcade.key. VASAKULE:
self.player_x -= PLAYER_SPEED
elif võti == arcade.key. PAREMALE:
self.player_x += PLAYER_SPEED
ise.high_score += 1

Automaatse salvestamise funktsioon

Mängijatele meelerahu pakkumiseks ja edenemise kaotamise vältimiseks saate mängu oleku regulaarsete ajavahemike järel automaatselt salvestada. Looge uus fail nimega auto-save.py ja lisage kood koos allolevate värskendustega:

importida aega

klassMänguaken(arkaad. aken):
def__selles__(ise, laius, kõrgus):
super().__init__(laius, kõrgus)
self.game_state = GameState()

# Salvestage iga 6 sekundi järel
self.autosave_interval = 6
self.last_save_time = aeg.aeg()

defvärskendada(ise, delta_aeg):
praegune_aeg = aeg.aeg()
time_diff = praegune_aeg - ise.viimane_säästuaeg

kui time_diff >= self.autosave_interval:
self.save_game()
print("Salvestatud")
self.last_save_time = praegune_aeg

Selles koodilõigul on värskendada meetod kontrollib, kas määratud ajavahemik on viimasest salvestamisest möödunud. Kui jah, käivitab see Salvesta mäng meetod Mänguaken klassis, et mängu olek automaatselt salvestada. Reguleerige automaatse salvestamise_intervall väärtus vastavalt teie mängu nõuetele.

Mänguandmete kinnitamine

Laaditud mänguandmete kinnitamine on nende terviklikkuse ja järjepidevuse tagamiseks hädavajalik. Saate hõlpsasti lisada andmete valideerimise meie salvestamise ja laadimise süsteemi:

klassGameState:
def__selles__(ise):
self.player_x = 0

defsalvesta_olek(ise):
kui self.is_valid_state():
andmed = {
'mängija_x': self.player_x
}

koos avatud ("Save.json", 'w') nagu fail:
json.dump (andmed, fail)

defload_state(ise):
koos avatud ("Save.json", 'r') nagu fail:
andmed = json.load (fail)

kui self.validate_loaded_data (andmed):
self.player_x = andmed['mängija_x']
muidu:
print("Viga!")

defon_kehtiv_olek(ise):
# Tehke siin valideerimisloogika
# Tagasta Tõene, kui olek on kehtiv, muul juhul Väär
üle andma

defvalide_loaded_data(ise, andmed):
# Tehke laaditud andmete valideerimine
# Tagasta True, kui andmed on kehtivad, False muul juhul
üle andma

Lisades need lisafunktsioonid salvestamis- ja laadimissüsteemi, saate luua mitmekülgsema ja jõulisema mängu kogemus, pakkudes mängijatele võimalust salvestada mitu mängu olekut, jälgida rekordeid, lubada automaatset salvestamist ja tagada andmed terviklikkus.

Salvestamise ja laadimise süsteemi parimad tavad

Salvestamis- ja laadimissüsteemi juurutamine on mänguarenduse oluline aspekt. Tugeva ja usaldusväärse süsteemi tagamiseks on oluline järgida parimaid tavasid. Siin on mõned peamised tavad, mida kaaluda:

Tundlike andmete krüptimine

Kui teie mäng sisaldab tundlikku teavet, nagu paroolid, isiklikud andmed või rakendusesisesed ostud, on salvestatud mänguoleku krüptimine ülioluline. Krüpteerimine lisab täiendava turvakihi, kaitstes mängija privaatsust ja takistades volitamata juurdepääsu nende andmetele. Tundliku teabe kaitsmiseks kasutage krüpteerimisalgoritme ja teeke.

Kinnitage laaditud andmed

Enne mänguandmete laadimist on oluline need kinnitada, et tagada nende terviklikkus ja järjepidevus. Veenduge, et laaditud andmed järgiksid teie mängu eeldatavat vormingut, struktuuri ja piiranguid.

Krahhide või pettuste vältimiseks tehke kriitiliste andmeväljade valideerimiskontrolle. Võimalike vigade või ootamatute andmete käsitlemiseks rakendage tugevaid andmete valideerimismehhanisme.

Käsitsege vigu graatsiliselt

Faili sisend-/väljundoperatsioonidega tegelemisel võib esineda vigu. Väga oluline on neid tõrkeid elegantselt käsitleda ja anda mängijale informatiivseid veateateid. Püüdke ja käsitsege erandeid, nt FileNotFoundError või PermissionError, salvestamise ja laadimise ajal.

Mängijate juhendamiseks ja frustratsiooni vältimiseks kuvage kasutajasõbralikud veateated. Lisaks kaaluge probleemide diagnoosimiseks ja lahendamiseks vigade logimise rakendamist.

Testige salvestamise ja laadimise funktsionaalsust

Testige põhjalikult oma mängu salvestamise ja laadimise funktsioone, et tagada selle töökindlus ja õigsus. Looge testjuhtumeid, mis hõlmavad erinevaid stsenaariume, nagu salvestamine erinevates mänguolekutes, laadimine kehtivatest ja kehtetutest salvestusfailidest ning servajuhtumite testimine.

Kontrollige, kas mängu olek on õigesti salvestatud ja laaditud ning kas ootuspärane käitumine toimub. Automatiseeritud testimisraamistikud võivad aidata luua terviklikke testikomplekte.

Muutke mängud salvestamis- ja laadimissüsteemiga lõbusamaks

Salvestamis- ja laadimissüsteemi lisamine võib muuta mängud kaasahaaravamaks, pakkudes mängijatele järjepidevuse ja edenemise tunnet. Mängijad saavad vabalt katsetada, proovida erinevaid lähenemisviise ja hiljem mängu juurde naasta, ilma oma saavutusi kaotamata.

See funktsioon võimaldab mängijatel võistelda ka sõpradega või proovile panna end ületama oma varasemaid rekordeid, lisades teie mängule taasesitatavuse ja pikaajalise seotuse.