Я пытаюсь найти способ написать систему сохранения / загрузки для моей игры на C ++. На данный момент я делаю все это с использованием бинарных флагов. Кто-нибудь понял, как это сделать по-другому? Я не возражаю против использования двоичного кода, но я хочу знать свои варианты. Я также хочу кое-что, в чем было бы легко проверить статус только одного события, являющегося завершенным или неполным, чтобы решить определенные вещи (большая часть системы предметов в этой игре зависит от того, что игрок сделал или не сделал на протяжении всей игры).
17
Ответы:
Сериализация была бы способом, и что касается проверки статуса, у вас могла бы быть логика в методе десериализации, чтобы сделать это.
источник
Я немного изучил исходный код DOOM. Я расскажу вам, как это делается там.
D_DoomMain содержит все функции открытия / сохранения / загрузки, а также множество других вещей. Как говорится в начале файла,
По сути, весь файл полон
M_CheckParm
s от начала до конца. Вот из чего состоит D_DoomLoop. Это один массивный цикл (что-то вроде 1000-2000 строк).Так как ваш вопрос «Как я могу написать?» Я просто собираюсь вставить некоторые фрагменты кода, относящиеся к игровому листу, из D_DoomMain:
Вот операторы, в которых этот материал используется, в самом конце цикла.
Вот функция, которая обращается к строкам, разбросанным по всему коду:
У вас также есть файл p_savegame.c, в котором хранятся все данные, связанные с пользователем (какое у вас оружие, где вы находитесь, на каком уровне и т. Д.).
И, наконец, у вас есть файл, который загружает данные сохраненных игр в игровой сценарий, возможно, самый сложный из всех, потому что он также загружает все остальное. Это называется p_setup.c и находится в том же каталоге.
Для меня
cat
это хорошо сработало, когда все это было в текстовом буфере, аpipe
этот текст -sendmail
на мой собственный адрес электронной почты. Таким образом, я могу читать его в нечетные моменты дня и использовать «найти», когда хочу найти что-то вроде «как DOOM загружает игру». Код хорошо прокомментирован.источник
Вы можете сериализовать класс или данные в плоский файл, а затем прочитать его обратно при загрузке.
источник
Я +1: предложил использовать XML / JSON для структурирования сохраненных игр. Таким образом, вы очень готовы сделать сейвы на «облачной» основе. Или, по крайней мере, у вас будет структура, которую вы можете использовать для будущих проектов, которые могут включать в себя сеть. Пока файлы не хранятся так, чтобы их было слишком легко читать, они должны дать вам массу преимуществ. Нравится метрики! Ура
источник