Python - рекомендуемый способ показать файлы сохранения игры пользователю - PullRequest
0 голосов
/ 21 марта 2019

Поиск в Интернете, я нашел много учебников для сохранения / загрузки данных программы в / из файлов. Тем не менее, я уже знаю это (я использую Python pickle для сериализации / десериализации объектов).

Мой вопрос: как файлы должны отображаться пользователям? Особенно, если имеется несколько файлов, Я хочу отображать сводную информацию из каждого файла сохранения , чтобы пользователь мог выбрать, какой файл загрузить.

Некоторые варианты, которые я рассматриваю, следующие:

  1. Загрузка всех сохраненных файлов, отображение информации о ключах.

    Это самое простое решение, но я продолжаю думать, что должен быть лучший способ?

  2. Сохранить метаданные сохраняемых файлов в другом файле.

    Прочтите этот файл, чтобы отобразить ключевую информацию о каждом файле сохранения.

    У меня вопрос: нужно ли беспокоиться о согласованности / целостности этого метафайла и реальных файлов сохранения? Например, если операция сохранения успешно обновляет файл сохранения игры, но игра вылетает до того, как метафайл может быть обновлен, данные будут повреждены.

  3. Поместить метаданные в имя файла

    Может работать, когда в метаданных всего несколько полей. Но разве это хорошая идея?

  4. Поместить метаданные в качестве информации заголовка в файл

    Затем прочитайте только часть заголовка для отображения. Однако я не знаю, как реализовать это, используя pickle

Я не создаю слишком большую игру, но я все еще надеюсь реализовать подход наилучшей практики. Поэтому я ищу простое глупое решение, не слишком сложное, но все же, надеюсь, чище / не так глупо, как вариант 1 выше.

1 Ответ

0 голосов
/ 21 марта 2019

Спасибо Michael Butscher и Steve за предложения! Я думаю, что это будет работать очень хорошо для моего случая.

  1. Каждый файл сохранения будет иметь сопровождающий файл метаданных, например, save023.dat и save023.meta

  2. Для обеспечения согласованности между парами сначала выполняются операции записи во временный файл save023.dat.temp

  3. В случае успеха обновите метафайл save023.meta

  4. Наконец, после успешного выполнения шага 3 переименуйте save023.dat.temp в save023.dat

  5. В любом случае, если метафайл отсутствует, или если программа обнаружит, что существует файл .temp, она повторно сгенерирует файл .meta (а затем переименует файл .temp, если применимо)

...