Если ваша игра не очень короткая, полезно иметь возможность сохранять прогресс. Даже короткие игры могут выиграть от сохранения высоких результатов.
Добавление системы сохранения и загрузки в вашу игру может значительно улучшить игровой процесс. Это позволяет игрокам сохранять свой прогресс, возобновлять игровые сессии и экспериментировать с различными стратегиями, не теряя с трудом заработанных достижений.
Вы будете приятно удивлены тем, насколько просто добавить эту функцию в свою игру с помощью библиотеки Python Arcade.
Создайте простую игру
Начните с создания простая игра, в которой игрок может двигаться Лево и право.
Код, используемый в этой статье, доступен в этом Репозиторий GitHub и вы можете использовать его бесплатно по лицензии MIT.
Создайте новый файл с именем простая-game.py и добавьте приведенный ниже код:
Импортировать аркада
ЭКРАН_ШИРИНА = 800
ЭКРАН_ВЫСОТА = 600
PLAYER_SPEED = 5
синий = аркада.цвет. СИНИЙсортGameWindow(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
self.player_x = ширина // 2дефon_draw(себя):
аркада.start_render()
arcade.draw_rectangle_filled(self.game_state.player_x,
50, 50, 50, синий)дефобновлять(я, дельта_время):
проходитьдефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.player_x -= PLAYER_SPEED
Элиф ключ == аркада.ключ. ВЕРНО:
self.player_x += PLAYER_SPEEDдефосновной():
окно = GameWindow (SCREEN_WIDTH, SCREEN_HEIGHT)
аркада.run()
если __имя__ == '__основной__':
основной()
Код создает окно с синим прямоугольником, представляющим игрока. Игрок может перемещаться влево и вправо с помощью клавиш со стрелками влево и вправо.
Управление игровыми состояниями
Чтобы реализовать систему сохранения и загрузки, вам необходимо управлять различными состояниями игры. Состояние игры представляет собой текущее состояние игры, включая положение объектов, счет и другие важные данные. В этом примере сосредоточьтесь только на координате x игрока.
Для управления игровыми состояниями введите GameState класс, который инкапсулирует данные игры и предоставляет методы для их сохранения и загрузки. Вот код:
сортGameState:
деф__в этом__(себя):
self.player_x = 0
Сохранение игровых данных
Чтобы сохранить игровые данные, расширьте GameWindow class и добавьте метод для сохранения состояния игры, когда это необходимо. Используйте формат JSON для простоты. Вот код:
в сохранить игру метод, создать словарь Python содержащие соответствующие игровые данные. Затем сериализуйте его в файл JSON с именем сохранить.json.
Импортировать json
сортGameWindow(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
self.game_state = GameState()дефсохранить игру(себя):
данные = {
'игрок_х': self.game_state.player_x
}
с открыть('сохранить.json', 'ж') как файл:
json.dump (данные, файл)
распечатать (данные)дефon_draw(себя):
аркада.start_render()
arcade.draw_rectangle_filled(self.game_state.player_x,
50, 50, 50, синий)дефобновлять(я, дельта_время):
проходить
дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.game_state.player_x -= PLAYER_SPEED
Элиф ключ == аркада.ключ. ВЕРНО:
self.game_state.player_x += PLAYER_SPEED
Элиф ключ == аркада.ключ. С:
self.save_game()
Загрузка игровых данных
Чтобы загрузить игровые данные, расширьте GameWindow class дальше и добавьте метод для загрузки состояния игры. Создайте новый файл с именем загрузить-game.py и добавьте код со следующими обновлениями:
сортGameWindow(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
self.game_state = GameState()
self.load_game()дефзагрузить игру(себя):
пытаться:
с открыть('сохранить.json', 'р') как файл:
данные = json.load (файл)
self.game_state.player_x = данные['игрок_х']
кроме FileNotFoundError:
проходить
дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. Л:
self.load_game()
загрузить игру метод пытается открыть сохранить.json файл и получить данные игры. Затем он обновляет состояние игры с загруженными данными. Если файл не существует, вы можете просто проигнорировать исключение, оставив состояние игры по умолчанию.
Включая дополнительные функции
Вы можете добавить дополнительные функции для улучшения системы сохранения и загрузки игры.
Сохранение рекордов
Сохранение рекордов вместе с состоянием игры — обычная функция во многих играх. Ты можешь управлять счетами и сохранить высокий балл с помощью этой системы. Создайте новый файл с именем high-score.py и добавьте код со следующими обновлениями:
сортGameWindow(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
self.high_score = 0дефзагрузить игру(себя):
пытаться:
с открыть('сохранить.json', 'р') как файл:
данные = json.load (файл)
распечатать (данные)
self.player_x = данные.получить('игрок_х', сам.player_x)
self.high_score = data.get('рекорд', self.high_score)
кроме FileNotFoundError:
проходитьдефсохранить игру(себя):
данные = {
'игрок_х': self.player_x,
'рекорд': self.high_score
}
с открыть('сохранить.json', 'ж') как файл:
json.dump (данные, файл)
распечатать (данные)
дефon_key_press(я, ключ, модификаторы):
если ключ == аркада.ключ. ЛЕВЫЙ:
self.player_x -= PLAYER_SPEED
Элиф ключ == аркада.ключ. ВЕРНО:
self.player_x += PLAYER_SPEED
self.high_score += 1
Функция автосохранения
Чтобы обеспечить игрокам душевное спокойствие и предотвратить потерю прогресса, вы можете автоматически сохранять состояние игры через регулярные промежутки времени. Создайте новый файл с именем автосохранение.py и добавьте код со следующими обновлениями:
Импортировать время
сортGameWindow(аркада. Окно):
деф__в этом__(собственность, ширина, высота):
super().__init__(ширина, высота)
self.game_state = GameState()# Сохраняйте каждые 6 секунд
self.autosave_interval = 6
self.last_save_time = время.время()дефобновлять(я, дельта_время):
текущее_время = время.время()
time_diff = текущее_время - self.last_save_time
если time_diff >= self.autosave_interval:
self.save_game()
Распечатать("Сохранено")
self.last_save_time = текущее_время
В этом фрагменте кода обновлять Метод проверяет, прошел ли указанный интервал времени с момента последнего сохранения. Если это так, это вызывает сохранить игру метод GameWindow класс для автоматического сохранения состояния игры. Настроить автосохранение_интервал значение в соответствии с требованиями вашей игры.
Проверка игровых данных
Проверка загруженных игровых данных необходима для обеспечения их целостности и согласованности. Вы можете легко включить проверку данных в нашу систему сохранения и загрузки:
сортGameState:
деф__в этом__(себя):
self.player_x = 0дефсохранить состояние(себя):
если self.is_valid_state():
данные = {
'игрок_х': self.player_x
}с открыть('сохранить.json', 'ж') как файл:
json.dump (данные, файл)дефload_state(себя):
с открыть('сохранить.json', 'р') как файл:
данные = json.load (файл)если self.validate_loaded_data (данные):
self.player_x = данные['игрок_х']
еще:
Распечатать("Ошибка!")дефis_valid_state(себя):
# Выполняем логику проверки здесь
# Возвращаем True, если состояние корректно, иначе False
проходить
дефvalidate_loaded_data(я, данные):
# Выполнить проверку загруженных данных
# Возвращаем True, если данные верны, иначе False
проходить
Включив эти дополнительные функции в систему сохранения и загрузки, вы можете создать более универсальный и надежный игровой процесс. опыт, предлагая игрокам возможность сохранять несколько состояний игры, отслеживать рекорды, включать автосохранение и обеспечивать данные честность.
Лучшие практики для системы сохранения и загрузки
Внедрение системы сохранения и загрузки — важный аспект разработки игр. Чтобы обеспечить надежную и надежную систему, важно следовать рекомендациям. Вот несколько ключевых практик, которые следует учитывать:
Шифрование конфиденциальных данных
Если ваша игра содержит конфиденциальную информацию, такую как пароли, личные данные или покупки в приложении, очень важно зашифровать сохраненное состояние игры. Шифрование добавляет дополнительный уровень безопасности, защищая конфиденциальность игрока и предотвращая несанкционированный доступ к его данным. Используйте алгоритмы шифрования и библиотеки для защиты конфиденциальной информации.
Проверить загруженные данные
Перед загрузкой игровых данных важно проверить их, чтобы обеспечить их целостность и согласованность. Убедитесь, что загруженные данные соответствуют ожидаемому формату, структуре и ограничениям вашей игры.
Выполняйте проверки важных полей данных, чтобы избежать сбоев или мошенничества. Внедрите надежные механизмы проверки данных для обработки потенциальных ошибок или неожиданных данных.
Изящно обрабатывать ошибки
При работе с файловыми операциями ввода-вывода могут возникать ошибки. Крайне важно корректно обрабатывать эти ошибки и предоставлять игроку информативные сообщения об ошибках. Перехватывать и обрабатывать исключения, например FileNotFoundError или РазрешениеОррор, во время операций сохранения и загрузки.
Отображайте удобные сообщения об ошибках, чтобы направлять игроков и предотвращать разочарование. Кроме того, рассмотрите возможность ведения журнала ошибок, чтобы помочь диагностировать и устранять проблемы.
Протестируйте функцию сохранения и загрузки
Тщательно протестируйте функцию сохранения и загрузки вашей игры, чтобы убедиться в ее надежности и правильности. Создавайте тестовые случаи, охватывающие различные сценарии, такие как сохранение в различных состояниях игры, загрузка из действительных и недействительных файлов сохранения и тестирование пограничных случаев.
Убедитесь, что состояние игры правильно сохранено и загружено, и что происходит ожидаемое поведение. Среды автоматизированного тестирования могут помочь в создании комплексных наборов тестов.
Сделайте игры более увлекательными с помощью системы сохранения и загрузки
Добавление системы сохранения и загрузки может сделать игры более увлекательными, предоставляя игрокам ощущение непрерывности и прогресса. Игроки могут свободно экспериментировать, пробовать разные подходы и возвращаться в игру позже, не теряя своих достижений.
Эта функция также позволяет игрокам соревноваться с друзьями или бросать вызов самим себе, чтобы побить свои предыдущие рекорды, добавляя возможности повторного прохождения и долгосрочного участия в вашей игре.