Как реализовано сохранение игры, чтобы разработчик мог избежать создания божественного класса / объекта?

Вчера, когда я играл в видеоигру, внезапно встал вопрос, как реализован механизм сохранения игры?

Главным образом, сохранение требует всех данных игры. В этом случае не должен ли программист создавать объект бога, который имеет ссылку на КАЖДЫЙ отдельный фрагмент игровых данных?

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

1 ответ

Решение

Вам следует иметь в виду, что вам нужно хранить только те данные, которые имеют значение. Например, это может включать в себя содержимое инвентаря (возможно, список идентификаторов и количеств), положение игрока и ключевые квестовые биты (вы уже получили зачарованный сельдерей из запрещенного холодильника?). Это может быть реализовано с помощью чего-то вроде шаблона Memento, хотя на практике это обычно просто структура (или эквивалент), которая сериализуется на диск.

Вам не нужно сохранять все состояние мира, так как загрузчик уровней обычно заботится о размещении предметов / сущностей в мире. Если вы посмотрите внимательно, вы заметите, что восстановление сохранения не обязательно восстанавливает точное состояние всего в мире - только важные биты. Это своего рода психологический хак, который часто используют в играх.

Некоторые другие соображения относительно файлов сохранения могут включать в себя хэш или контрольную сумму для обнаружения подделки файла сохранения или хранения начальных значений, которые ГСВ во время выполнения будет использовать для создания той же серии событий / объектов после загрузки игры.

По сути, вам не нужно спасать каждый кусочек мирового состояния - только те части, о которых игрок может заботиться:-)

Другие вопросы по тегам