Осим ако ваша игра није веома кратка, помаже да сачувате напредак. Чак и кратке игре могу имати користи од чувања високих резултата.
Додавање система за чување и учитавање вашој игри може знатно побољшати искуство играча. Омогућава играчима да истрају у свом напретку, наставе сесије играња и експериментишу са различитим стратегијама без губитка тешко зарађених достигнућа.
Бићете пријатно изненађени колико је једноставно додати ову функцију својој игри користећи Питхон-ову библиотеку Арцаде.
Направите једноставну игру
Почните креирањем једноставна игра у којој играч може да се креће лево и десно.
Код који се користи у овом чланку доступан је у овом ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.
Креирајте нову датотеку под називом симпле-гаме.пи и додајте код испод:
увоз арцаде
СЦРЕЕН_ВИДТХ = 800
СЦРЕЕН_ХЕИГХТ = 600
ПЛАИЕР_СПЕЕД = 5
плава = аркада.боја. ПЛАВИкласаГамеВиндов(аркада. прозор):
деф__у томе__(само, ширина, висина):
супер().__инит__(ширина, висина)
селф.плаиер_к = ширина // 2дефон_драв(сам):
арцаде.старт_рендер()
арцаде.драв_рецтангле_филлед (селф.гаме_стате.плаиер_к,
50, 50, 50, Плави)дефажурирање(селф, делта_тиме):
проћидефон_кеи_пресс(селф, кључ, модификатори):
ако кључ == арцаде.кеи. ЛИЈЕВО:
селф.плаиер_к -= ПЛАИЕР_СПЕЕД
елиф кључ == арцаде.кеи. ЈЕЛ ТАКО:
селф.плаиер_к += ПЛАИЕР_СПЕЕДдефглавни():
прозор = ГамеВиндов (СЦРЕЕН_ВИДТХ, СЦРЕЕН_ХЕИГХТ)
арцаде.рун()
ако __наме__ == '__главни__':
главни()
Код креира прозор са плавим правоугаоником који представља играча. Играч може да се креће лево и десно користећи стрелице лево и десно.
Управљање државама игре
Да бисте применили систем чувања и учитавања, морате да управљате различитим стањима игре. Стање игре представља тренутно стање игре, укључујући положаје објеката, резултате и друге релевантне податке. За овај пример, фокусирајте се само на к-координату играча.
Да бисте управљали стањима игре, уведите а ГамеСтате класа која инкапсулира податке игре и пружа методе за њихово чување и учитавање. Ево кода:
класаГамеСтате:
деф__у томе__(сам):
селф.плаиер_к = 0
Чување података игре
Да бисте сачували податке игре, проширите ГамеВиндов класе и додајте метод за чување стања игре кад год је то потребно. Користите ЈСОН формат ради једноставности. Ево кода:
У саве_гаме метод, направите Питхон речник који садрже релевантне податке о игри. Затим га серијализујте у ЈСОН датотеку под називом саве.јсон.
увоз јсон
класаГамеВиндов(аркада. прозор):
деф__у томе__(само, ширина, висина):
супер().__инит__(ширина, висина)
селф.гаме_стате = ГамеСтате()дефсаве_гаме(сам):
подаци = {
'плаиер_к': селф.гаме_стате.плаиер_к
}
са отвори ('саве.јсон', 'в') као фајл:
јсон.думп (подаци, датотека)
штампа (подаци)дефон_драв(сам):
арцаде.старт_рендер()
арцаде.драв_рецтангле_филлед (селф.гаме_стате.плаиер_к,
50, 50, 50, Плави)дефажурирање(селф, делта_тиме):
проћи
дефон_кеи_пресс(селф, кључ, модификатори):
ако кључ == арцаде.кеи. ЛИЈЕВО:
селф.гаме_стате.плаиер_к -= ПЛАИЕР_СПЕЕД
елиф кључ == арцаде.кеи. ЈЕЛ ТАКО:
селф.гаме_стате.плаиер_к += ПЛАИЕР_СПЕЕД
елиф кључ == арцаде.кеи. С:
селф.саве_гаме()
Учитавање података игре
Да бисте учитали податке игре, проширите ГамеВиндов класа даље и додајте метод за учитавање стања игре. Креирајте нову датотеку под називом лоад-гаме.пи и додајте код са ажурирањима у наставку:
класаГамеВиндов(аркада. прозор):
деф__у томе__(само, ширина, висина):
супер().__инит__(ширина, висина)
селф.гаме_стате = ГамеСтате()
селф.лоад_гаме()дефУчитај игру(сам):
покушати:
са отвори ('саве.јсон', 'р') као фајл:
подаци = јсон.лоад (фајл)
селф.гаме_стате.плаиер_к = подаци['плаиер_к']
осим ФилеНотФоундЕррор:
проћи
дефон_кеи_пресс(селф, кључ, модификатори):
ако кључ == арцаде.кеи. Л:
селф.лоад_гаме()
Тхе Учитај игру метода покушава да отвори саве.јсон датотеку и преузмите податке игре. Затим ажурира стање игре са учитаним подацима. Ако датотека не постоји, можете једноставно занемарити изузетак, остављајући подразумевано стање игре.
Укључујући додатне функције
Можете додати још функција да побољшате систем чувања и учитавања игре.
Чување високих резултата
Чување високих резултата поред стања игре је уобичајена карактеристика у многим играма. Можете управљати резултатима и сачувајте висок резултат користећи овај систем. Креирајте нову датотеку под називом хигх-сцоре.пи и додајте код са ажурирањима у наставку:
класаГамеВиндов(аркада. прозор):
деф__у томе__(само, ширина, висина):
супер().__инит__(ширина, висина)
селф.хигх_сцоре = 0дефУчитај игру(сам):
покушати:
са отвори ('саве.јсон', 'р') као фајл:
подаци = јсон.лоад (фајл)
штампа (подаци)
селф.плаиер_к = дата.гет('плаиер_к', селф.плаиер_к)
селф.хигх_сцоре = дата.гет('високу оцену', селф.хигх_сцоре)
осим ФилеНотФоундЕррор:
проћидефсаве_гаме(сам):
подаци = {
'плаиер_к': селф.плаиер_к,
'високу оцену': селф.хигх_сцоре
}
са отвори ('саве.јсон', 'в') као фајл:
јсон.думп (подаци, датотека)
штампа (подаци)
дефон_кеи_пресс(селф, кључ, модификатори):
ако кључ == арцаде.кеи. ЛИЈЕВО:
селф.плаиер_к -= ПЛАИЕР_СПЕЕД
елиф кључ == арцаде.кеи. ЈЕЛ ТАКО:
селф.плаиер_к += ПЛАИЕР_СПЕЕД
селф.хигх_сцоре += 1
Функција аутоматског чувања
Да бисте играчима пружили мир и спречили губитак напретка, можете аутоматски да сачувате стање игре у редовним интервалима. Креирајте нову датотеку под називом ауто-саве.пи и додајте код са ажурирањима у наставку:
увоз време
класаГамеВиндов(аркада. прозор):
деф__у томе__(само, ширина, висина):
супер().__инит__(ширина, висина)
селф.гаме_стате = ГамеСтате()# Сачувајте сваких 6 секунди
селф.аутосаве_интервал = 6
селф.ласт_саве_тиме = тиме.тиме()дефажурирање(селф, делта_тиме):
тренутно_време = време.време()
тиме_дифф = цуррент_тиме - селф.ласт_саве_тиме
ако тиме_дифф >= селф.аутосаве_интервал:
селф.саве_гаме()
штампа ("Сачувано")
селф.ласт_саве_тиме = цуррент_тиме
У овом исечку кода, ажурирање метода проверава да ли је наведени временски интервал прошао од последњег чувања. Ако је тако, то покреће саве_гаме методом ГамеВиндов класе да аутоматски сачува стање игре. Подесите аутосаве_интервал вредност у складу са захтевима ваше игре.
Провера података о игрици
Провера учитаних података игре је неопходна да би се обезбедио њихов интегритет и доследност. Можете лако да уградите валидацију података у наш систем за чување и учитавање:
класаГамеСтате:
деф__у томе__(сам):
селф.плаиер_к = 0дефсаве_стате(сам):
ако селф.ис_валид_стате():
подаци = {
'плаиер_к': селф.плаиер_к
}са отвори ('саве.јсон', 'в') као фајл:
јсон.думп (подаци, датотека)дефлоад_стате(сам):
са отвори ('саве.јсон', 'р') као фајл:
подаци = јсон.лоад (фајл)ако селф.валидате_лоадед_дата (подаци):
селф.плаиер_к = подаци['плаиер_к']
друго:
штампа ("Грешка!")дефис_валид_стате(сам):
# Изведите логику валидације овде
# Врати Труе ако је стање важеће, Фалсе у супротном
проћи
дефвалидате_лоадед_дата(ја, подаци):
# Извршите проверу учитаних података
# Врати Труе ако су подаци валидни, Фалсе у супротном
проћи
Укључивањем ових додатних функција у систем чувања и учитавања, можете креирати свестранији и робуснији начин игре искуство, нудећи играчима могућност да сачувају више стања игре, прате високе резултате, омогуће аутоматско чување и обезбеде податке интегритет.
Најбоље праксе за систем чувања и учитавања
Имплементација система чувања и учитавања је важан аспект развоја игре. Да бисте обезбедили робустан и поуздан систем, неопходно је пратити најбоље праксе. Ево неколико кључних пракси које треба узети у обзир:
Шифрујте осетљиве податке
Ако ваша игра садржи осетљиве информације као што су лозинке, лични подаци или куповине у апликацији, кључно је шифровати сачувано стање игре. Шифровање додаје додатни ниво безбедности, штити приватност играча и спречава неовлашћени приступ њиховим подацима. Користите алгоритме за шифровање и библиотеке за заштиту осетљивих информација.
Потврдите учитане податке
Пре учитавања података игре, неопходно је да их потврдите да бисте осигурали њихов интегритет и доследност. Проверите да ли се учитани подаци придржавају очекиваног формата, структуре и ограничења ваше игре.
Извршите провере ваљаности на критичним пољима података да бисте избегли рушења или варање. Имплементирајте робусне механизме за валидацију података за руковање потенцијалним грешкама или неочекиваним подацима.
Грациозно поступајте са грешкама
Када се ради о У/И операцијама датотека, може доћи до грешака. Од кључне је важности да се са овим грешкама рукујете елегантно и да играчу пружите информативне поруке о грешци. Ухвати и обради изузетке, као што је ФилеНотФоундЕррор или ПермиссионЕррор, током операција чувања и учитавања.
Прикажите поруке о грешкама које су прилагођене кориснику да бисте водили играче и спречили фрустрацију. Поред тога, размислите о примени евиденције грешака да бисте помогли у дијагностици и решавању проблема.
Тестирајте функционалност чувања и учитавања
Темељно тестирајте функцију чувања и учитавања ваше игре да бисте осигурали њену поузданост и исправност. Креирајте тест случајеве који покривају различите сценарије, као што су чување у различитим стањима игре, учитавање из важећих и неважећих датотека за чување и тестирање рубних случајева.
Потврдите да је стање игре исправно сачувано и учитано и да се дешава очекивано понашање. Аутоматизовани оквири за тестирање могу помоћи у креирању свеобухватних тестних пакета.
Учините игре забавнијим уз систем за чување и учитавање
Додавање система чувања и учитавања може учинити игре привлачнијим пружајући играчима осећај континуитета и напретка. Играчи могу слободно експериментисати, испробавати различите приступе и касније се вратити игри без губљења својих достигнућа.
Ова функција такође омогућава играчима да се такмиче са пријатељима или изазову себе да победе своје претходне високе резултате, додајући вашој игри могућност поновног играња и дугорочно ангажовање.