Научете как да включите функцията за запазване и зареждане на прогреса на играта за безпроблемно игрово изживяване.

В съвременното разработване на игри възможността за запазване и зареждане на прогреса на играта е ключова характеристика, която подобрява потребителското изживяване и ангажираност. PyGame, популярна библиотека за създаване на 2D игри в Python, предоставя необходимите инструменти за внедряване на функцията за запазване и зареждане без усилие.

Създаване на проста игра

Преди да започнете, уверете се, че имате pip, инсталиран на вашето устройство. След като инсталирате pip, изпълнете командата по-долу, за да инсталирате pygame модул:

pip инсталирайте pygame

За да илюстрирате прилагането на система за запазване и зареждане в PyGame, започнете със създаване на проста игра.

Кодът, използван в тази статия, е достъпен в това GitHub хранилище и е безплатен за използване под лиценза на MIT.

В тази игра играчът ще има способността да се движи наляво и надясно. Ето примерен кодов фрагмент, който демонстрира основната структура на играта:

instagram viewer
импортиране pygame

# Инициализирайте Pygame
pygame.init()

# Настройте прозореца на играта
window_width = 800
прозорец_височина = 600
прозорец = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption(„Урок за запазване и зареждане на системата“)

# Променливи на играта
играч_x = 400
player_y = 500
играч_скорост = 5

# Цикъл на играта
бягане = Вярно
докато работи:
за събитие в pygame.event.get():
ако event.type == pygame. ИЗХОД:
бягане = Невярно

ключове = pygame.key.get_pressed()
ако ключове [pygame. K_LEFT]:
player_x -= играч_скорост
ако ключове [pygame. K_RIGHT]:
player_x += player_speed

# Изчистете екрана
window.fill((0, 0, 0))

# Начертайте играча
pygame.draw.rect (прозорец, (255, 255, 255), (player_x, player_y, 50, 50))

# Актуализирайте дисплея
pygame.display.flip()

# Излезте от играта
pygame.quit()

Управление на състоянието на играта и постоянството на данните

Преди да внедрите функцията за запазване и зареждане, трябва да установите начин за управление на състоянието на играта и запазване на данните. Един общ подход е да използвайте речник на Python за съхраняване на съответните данни за играта. Ето пример за това как можете да промените предишния код, за да включите управление на състоянието на играта:

# Променливи на играта
game_state = {
'player_x': 400,
'player_y': 500
}

# Цикъл на играта
бягане = Вярно
докато работи:
# ...

ключове = pygame.key.get_pressed()
ако ключове [pygame. K_LEFT]:
състояние_на_играта['player_x'] -= скорост_на играча
ако ключове [pygame. K_RIGHT]:
състояние_на_играта['player_x'] += играч_скорост

# ...

pygame.display.flip()

Внедряване на функцията за запазване и зареждане

За да активирате запазването и зареждането на прогреса на играта, можете да използвате вградения Python туршия модул, който ни позволява да сериализираме и десериализираме обекти на Python. Създайте нов файл с име save-game.py и добавете кода със следните актуализации:

game_state = {
'player_x': player_x,
'player_y': player_y
}

# Запазване на състоянието на играта
дефsave_game_state(състояние_на_играта, име_на_файл):
опитвам:
с отворен (име_на_файл, "wb") като файл:
pickle.dump (състояние_на_играта, файл)
печат („Състоянието на играта е запазено успешно!“)
с изключение IOError:
печат („Грешка: Не може да се запази състоянието на играта.“)

# Заредете състоянието на играта
дефload_game_state(име на файл):
опитвам:
с отворен (име_на_файл, 'rb') като файл:
game_state = pickle.load (файл)
печат („Състоянието на играта се зареди успешно!“)
връщане състояние_на_играта
с изключение (IOError, туршия. UnpicklingError):
печат („Грешка: Не може да се зареди състоянието на играта.“)

# Цикъл на играта
бягане = Вярно
докато работи:

# ...

ключове = pygame.key.get_pressed()
ако ключове [pygame. K_LEFT]:
player_x -= играч_скорост
състояние_на_играта['player_x'] = играч_x
ако ключове [pygame. K_RIGHT]:
player_x += player_speed
състояние_на_играта['player_x'] = играч_x

ако ключове [pygame. K_s]:
save_game_state (game_state, 'save_game.pickle')
ако ключове [pygame. K_l]:
game_state = load_game_state('save_game.pickle')
player_x = game_state['player_x']

# ...

# ...

По-долу е резултатът:

Проектиране на потребителски интерфейс за Save Slots

За да предоставите интерфейс за запазване и зареждане, можете да показвате слотове за запазване, които позволяват на играча да избере кой слот да запази или зареди. За този пример опциите се показват в конзолата, но можете да използвате GUI рамки на Python за създаване на по-удобен за потребителя интерфейс.

Създавам save_slots списък, който представлява наличните слотове за запис. Също така добавете a избран_слот променлива, за да следите слота, избран от играча.

Показване на наличните слотове за запазване, когато играчът натисне бутона за запазване (K_s). Играчът може да избере слот, като натисне съответния цифров клавиш (K_1, K_2, или K_3). Ако е избран слот, състоянието на играта се записва във файл, наречен на избрания слот.

По същия начин, когато играчът натисне бутона за зареждане (K_l), покажете слотовете за запис. Играчът може да избере слот чрез натискане на клавишите K_a, K_b, или K_c за зареждане на състоянието на играта. Като алтернатива можете използвайте сензорни входове вместо въвеждане от клавиатурата за избор на слот. Ако е избран слот, състоянието на играта се зарежда от съответния файл.

Създайте нов файл с име интерфейс.py и добавете кода със следните актуализации:

# Променливи на играта
save_slots = [„Слот 1“, „Слот 2“, „Слот 3“]
избран_слот = Нито един

# Цикъл на играта
бягане = Вярно
докато работи:
за събитие в pygame.event.get():
ако event.type == pygame. ИЗХОД:
бягане = Невярно

ако event.type == pygame. KEYDOWN:
ако event.key == pygame. K_s:
# Показване на слотове за запазване
избран_слот = Нито един
за i, слот в изброяване (save_slots):
печат (f"Запазване на слота {i+1}: {слот}")
печат („Изберете слот, за да запазите играта.“)

ако event.key == pygame. K_l:
печат („Изберете слот:- a – Слот 1, b – Слот 3, c – Слот 3“)
# Показване на слотове за запазване
избран_слот = Нито един
за i, слот в изброяване (save_slots):
печат (f"Запазване на слота {i+1}: {слот}")
печат („Изберете слот за зареждане на играта.“)

ако събитие.ключ в [pygame. K_1, pygame. K_2, pygame. K_3]:
# Запазете или заредете игра въз основа на избрания слот
slot_index = event.key - pygame. K_1
избран_слот = save_slots[слот_индекс]

save_game_state (game_state, е"{selected_slot}.туршия")
печат (f"Играта е запазена в {selected_slot}!")

ако събитие.ключ в [pygame. K_a, pygame. K_b, pygame. K_c]:

slot_index = event.key - pygame. K_a
избран_слот = save_slots[слот_индекс]
game_state = load_game_state(е"{selected_slot}.туршия")
player_x = game_state['player_x']
печат (f"Играта е заредена от {selected_slot}!")
# ...

pygame.display.flip()

# ...

По-долу е резултатът:

Не се изисква приписване: Екранна снимка от Имран

Работа с опциите за презаписване

За да предоставите опции за презаписване на съществуващи записвания, можете да внедрите предупредително съобщение, което подканва плейъра за потвърждение, преди да презапише файл за записване. Създайте нов файл с име презаписване-save.py и променете кода със следните актуализации:

# Запазване на състоянието на играта
дефsave_game_state(състояние_на_играта, име_на_файл):
ако os.path.exists (име_на_файл):
# Подкана за потвърждение за презаписване на съществуващ файл за запис
презаписване = въвеждане(„Файлът за запазване вече съществува. Искате ли да презапишете? (да/не): ")
ако overwrite.lower() != 'y':
печат („Запазването е отменено.“)
връщане

опитвам:
с отворен (име_на_файл, "wb") като файл:
pickle.dump (състояние_на_играта, файл)
печат („Състоянието на играта е запазено успешно!“)
с изключение IOError:
печат („Грешка: Не може да се запази състоянието на играта.“)

# ...

# Заредете състоянието на играта
дефload_game_state(име на файл):
аконе os.path.exists (име_на_файл):
печат („Грешка: Запазеният файл не съществува.“)
връщанеНито един

опитвам:
с отворен (име_на_файл, 'rb') като файл:
game_state = pickle.load (файл)
печат („Състоянието на играта се зареди успешно!“)
връщане състояние_на_играта
с изключение (IOError, туршия. UnpicklingError):
печат („Грешка: Не може да се зареди състоянието на играта.“)
връщанеНито един

# ...

В горния код, преди да запазите състояние на игра, проверявате дали файлът за запис вече съществува, като използвате os.path.exists(). Ако това стане, ще поискате от плейъра потвърждение за презаписване на съществуващия файл за запис. Ако плейърът избере да не презаписва, операцията за запазване се отменя.

По същия начин, преди да заредите състояние на игра, вие проверявате дали файлът за запазване съществува, като използвате os.path.exists(). Ако не стане, информирате играча със съобщение за грешка.

Най-добри практики за система за запазване и зареждане

Когато внедрявате система за запазване и зареждане в PyGame или който и да е проект за разработка на игри, помислете за следните най-добри практики:

  • Използвайте добре дефинирана структура от данни, за да представите състоянието на играта и да го сериализирате с помощта на библиотека за сериализиране като туршия. Това ви позволява лесно да запазвате и зареждате цялото състояние на играта.
  • Създайте специална директория или папка за съхраняване на запазени файлове. Това помага за организирането на записаните файлове и предотвратява претрупването на основната директория на играта.
  • Внедрете обработка на грешки и осигурете информативни съобщения за грешки, за да помогнете при отстраняване на грешки и отстраняване на неизправности. Това помага на играчите да разберат всички проблеми, които могат да възникнат по време на операциите за запазване и зареждане.
  • Помислете за прилагане на множество слотове за запазване, за да позволите на играчите да имат множество запазвания на игри. Това дава на играчите гъвкавостта да изследват различни пътеки или да преиграват определени части от играта, без да презаписват напредъка си.

Направете игрите по-ангажиращи със системата за запазване и зареждане

Добавянето на функцията за запазване и зареждане може значително да подобри ангажираността и удоволствието от играта. Позволява на играчите да запазят напредъка си и да се върнат в играта, когато им е удобно. Освен това, той отваря възможности за създаване на сложни игрови светове, където изборите и действията на играча имат трайни последици.

Като внедрите система за запазване и зареждане, можете да дадете възможност на вашите играчи да имат по-завладяващо и удовлетворяващо игрово изживяване.