Научите како да уградите функцију напретка игре за чување и учитавање за беспрекорно искуство играња.

У модерном развоју игара, могућност чувања и учитавања напретка игре је кључна карактеристика која побољшава корисничко искуство и ангажовање. ПиГаме, популарна библиотека за креирање 2Д игара у Питхон-у, пружа неопходне алате за имплементацију функције чувања и учитавања без напора.

Креирање једноставне игре

Пре него што почнете, уверите се да имате пип инсталиран на вашем уређају. Након инсталирања пип-а, покрените наредбу испод да бисте инсталирали пигаме модул:

пип инсталл пигаме

Да бисте илустровали примену система за чување и учитавање у ПиГаме-у, почните креирањем једноставне игре.

Код који се користи у овом чланку доступан је у овом ГитХуб спремиште и бесплатан је за коришћење под МИТ лиценцом.

У овој игри, играч ће имати могућност да се креће лево и десно. Ево примера исечка кода који показује основну структуру игре:

увоз пигаме

# Иницијализујте Пигаме
пигаме.инит()

# Подесите прозор игре


ширина_прозора = 800
висина_прозора = 600
прозор = пигаме.дисплаи.сет_моде((ширина_прозора, висина_прозора))
пигаме.дисплаи.сет_цаптион(„Сачувај и учитај системски водич“)

# Променљиве игре
плаиер_к = 400
плаиер_и = 500
плаиер_спеед = 5

# Игра петља
трчање = Истина
док трчање:
за догађај ин пигаме.евент.гет():
ако евент.типе == пигаме. ОДУСТАТИ:
трчање = Фалсе

кључеви = пигаме.кеи.гет_прессед()
ако кључеви [пигаме. К_ЛЕФТ]:
плаиер_к -= плаиер_спеед
ако кључеви [пигаме. К_ДЕСНО]:
плаиер_к += плаиер_спеед

# Обришите екран
виндов.филл((0, 0, 0))

# Нацртајте играча
пигаме.драв.рецт (прозор, (255, 255, 255), (плаиер_к, плаиер_и, 50, 50))

# Ажурирајте екран
пигаме.дисплаи.флип()

# Прекините игру
пигаме.куит()

Управљање стањем игре и постојаношћу података

Пре имплементације функције чувања и учитавања, потребно је да успоставите начин да управљате стањем игре и да сачувате податке. Један уобичајени приступ је да користите Питхон речник за чување релевантних података о игрици. Ево примера како можете да измените претходни код да бисте укључили управљање стањем игре:

# Променљиве игре
гаме_стате = {
'плаиер_к': 400,
'плаиер_и': 500
}

# Игра петља
трчање = Истина
док трчање:
# ...

кључеви = пигаме.кеи.гет_прессед()
ако кључеви [пигаме. К_ЛЕФТ]:
гаме_стате['плаиер_к'] -= брзина_играча
ако кључеви [пигаме. К_ДЕСНО]:
гаме_стате['плаиер_к'] += брзина_играча

# ...

пигаме.дисплаи.флип()

Имплементација функције чувања и учитавања

Да бисте омогућили чување и учитавање напретка игре, можете искористити уграђени Питхон кисели краставац модул, који нам омогућава да серијализује и десеријализује Питхон објекте. Креирајте нову датотеку под називом саве-гаме.пи и додајте код са ажурирањима у наставку:

гаме_стате = {
'плаиер_к': плаиер_к,
'плаиер_и': плаиер_и
}

# Сачувајте стање игре
дефсаве_гаме_стате(стање_игре, име_датотеке):
покушати:
са отвори (име_датотеке, 'вб') као фајл:
пицкле.думп (стање_игра, датотека)
штампа („Стање игре је успешно сачувано!“)
осим ИОЕррор:
штампа („Грешка: Није могуће сачувати стање игре.“)

# Учитај стање игре
дефлоад_гаме_стате(назив документа):
покушати:
са отвори (име_датотеке, 'рб') као фајл:
гаме_стате = пицкле.лоад (фајл)
штампа („Стање игре је успешно учитано!“)
повратак гаме_стате
осим (ИОЕррор, кисели краставчић. УнпицклингЕррор):
штампа („Грешка: Није могуће учитати стање игре.“)

# Игра петља
трчање = Истина
док трчање:

# ...

кључеви = пигаме.кеи.гет_прессед()
ако кључеви [пигаме. К_ЛЕФТ]:
плаиер_к -= плаиер_спеед
гаме_стате['плаиер_к'] = плаиер_к
ако кључеви [пигаме. К_ДЕСНО]:
плаиер_к += плаиер_спеед
гаме_стате['плаиер_к'] = плаиер_к

ако кључеви [пигаме. К_с]:
саве_гаме_стате (стате_гаме_стате, 'саве_гаме.пицкле')
ако кључеви [пигаме. К_л]:
гаме_стате = лоад_гаме_стате('саве_гаме.пицкле')
играч_к = игра_стање['плаиер_к']

# ...

# ...

Испод је излаз:

Дизајнирање корисничког интерфејса за уторе за чување

Да бисте обезбедили интерфејс за чување и учитавање, можете приказати уторе за чување који омогућавају играчу да одабере који слот ће сачувати или учитати. За овај пример, опције су приказане у конзоли, али можете користити Питхон ГУИ оквири за креирање интерфејса који је прилагођенији кориснику.

Створити саве_слотс листа која представља доступна места за чување. Такође, додајте а селецтед_слот променљива да бисте пратили слот који је играч изабрао.

Прикажите доступне уторе за чување када играч притисне дугме за чување (К_с). Играч може изабрати слот притиском на одговарајући нумерички тастер (К_1, К_2, или К_3). Ако је слот изабран, стање игре се чува у датотеци названој према изабраном слоту.

Слично, када плејер притисне дугме за учитавање (К_л), прикажите уторе за чување. Играч може изабрати слот притиском на тастере К_а, К_б, или К_ц да учитате стање игре. Алтернативно, можете користите додирне уносе уместо уноса са тастатуре за избор слота. Ако је слот изабран, стање игре се учитава из одговарајуће датотеке.

Креирајте нову датотеку под називом интерфејс.пи и додајте код са ажурирањима у наставку:

# Променљиве игре
саве_слотс = ['Слот 1', 'Слот 2', 'Слот 3']
селецтед_слот = Ниједан

# Игра петља
трчање = Истина
док трчање:
за догађај ин пигаме.евент.гет():
ако евент.типе == пигаме. ОДУСТАТИ:
трчање = Фалсе

ако евент.типе == пигаме. КЕИДОВН:
ако евент.кеи == пигаме. К_с:
# Прикажи уторе за чување
селецтед_слот = Ниједан
за ја, слот ин набрајати (саве_слотс):
штампа (ф"Сачувај утор {и+1}: {слот}")
штампа („Одаберите слот да бисте сачували игру.“)

ако евент.кеи == пигаме. К_л:
штампа („Изаберите слот:- а – слот 1, б – слот 3, ц – слот 3“)
# Прикажи уторе за чување
селецтед_слот = Ниједан
за ја, слот ин набрајати (саве_слотс):
штампа (ф"Сачувај утор {и+1}: {слот}")
штампа („Одаберите слот за учитавање игре.“)

ако догађај.кључ ин [пигаме. К_1, пигаме. К_2, пигаме. К_3]:
# Сачувајте или учитајте игру на основу изабраног слота
слот_индек = евент.кеи - пигаме. К_1
изабрано_слот = саве_слотс[слот_индек]

саве_гаме_стате (стате_гаме_стате, ф"{селецтед_слот}.кисели краставац")
штампа (ф"Игра је сачувана {селецтед_слот}!")

ако догађај.кључ ин [пигаме. К_а, пигаме. К_б, пигаме. К_ц]:

слот_индек = евент.кеи - пигаме. К_а
изабрано_слот = саве_слотс[слот_индек]
гаме_стате = лоад_гаме_стате(ф"{селецтед_слот}.кисели краставац")
играч_к = игра_стање['плаиер_к']
штампа (ф"Игра је учитана са {селецтед_слот}!")
# ...

пигаме.дисплаи.флип()

# ...

Испод је излаз:

Није потребно приписивање: Имран снимак екрана

Руковање опцијама преписивања

Да бисте обезбедили опције за преписивање постојећих сачуваних датотека, можете применити поруку упозорења која тражи од плејера да потврди пре него што препише датотеку за чување. Креирајте нову датотеку под називом овервритинг-саве.пи и измените код следећим ажурирањима:

# Сачувајте стање игре
дефсаве_гаме_стате(стање_игре, име_датотеке):
ако ос.патх.екистс (име_датотеке):
# Затражите потврду за преписивање постојеће датотеке за чување
оверврите = инпут(„Сачувај фајл већ постоји. Да ли желите да препишете? (да/не): ")
ако оверврите.ловер() != 'и':
штампа („Сачување је отказано.“)
повратак

покушати:
са отвори (име_датотеке, 'вб') као фајл:
пицкле.думп (стање_игра, датотека)
штампа („Стање игре је успешно сачувано!“)
осим ИОЕррор:
штампа („Грешка: Није могуће сачувати стање игре.“)

# ...

# Учитај стање игре
дефлоад_гаме_стате(назив документа):
аконе ос.патх.екистс (име_датотеке):
штампа („Грешка: Сачувај датотеку не постоји.“)
повратакНиједан

покушати:
са отвори (име_датотеке, 'рб') као фајл:
гаме_стате = пицкле.лоад (фајл)
штампа („Стање игре је успешно учитано!“)
повратак гаме_стате
осим (ИОЕррор, кисели краставчић. УнпицклингЕррор):
штампа („Грешка: Није могуће учитати стање игре.“)
повратакНиједан

# ...

У горњем коду, пре него што сачувате стање игре, проверите да ли датотека за чување већ постоји користећи ос.патх.екистс(). Ако јесте, од плејера ћете тражити потврду да препише постојећу датотеку за чување. Ако играч одлучи да не преписује, операција чувања се отказује.

Слично томе, пре него што учитате стање игре, проверите да ли сачувана датотека постоји користећи ос.патх.екистс(). Ако није, обавестићете играча поруком о грешци.

Најбоље праксе за систем чувања и учитавања

Када имплементирате систем чувања и учитавања у ПиГаме-у или било ком пројекту развоја игара, размотрите следеће најбоље праксе:

  • Користите добро дефинисану структуру података да бисте представили стање игре и серијализујте га користећи библиотеку серијализације као што је кисели краставац. Ово вам омогућава да лако сачувате и учитате цело стање игре.
  • Направите наменски директоријум или фасциклу за чување сачуваних датотека. Ово помаже у организовању сачуваних датотека и спречава затрпавање главног директоријума игре.
  • Примените руковање грешкама и обезбедите информативне поруке о грешкама које ће вам помоћи у отклањању грешака и решавању проблема. Ово помаже играчима да разумеју све проблеме који се могу појавити током операција чувања и учитавања.
  • Размислите о примени вишеструких слотова за чување како бисте омогућили играчима да имају више чувања игара. Ово даје играчима флексибилност да истражују различите путеве или поново играју одређене делове игре без преписивања њиховог напретка.

Учините игре занимљивијим помоћу система за чување и учитавање

Додатак функције чувања и учитавања може у великој мери побољшати ангажовање и уживање у игри. Омогућава играчима да сачувају свој напредак и да се врате у игру када им одговара. Штавише, отвара могућности за стварање сложених светова игре, где избори и акције играча имају трајне последице.

Имплементацијом система чувања и учитавања, можете оснажити своје играче да имају импресивније и задовољавајуће искуство играња.