Вероятно, существует множество способов сделать это, но самый простой, который я всегда находил и использовал как лично, так и профессионально, - это создать структуру, содержащую все значения, которые я хочу сохранить.
struct SaveGameData
{
int characterLevel; // Any straight up values from the player
int inventoryCount; // Number of items the player has on them or stored or what not
int[STAT_COUNT] statistics; // This is usually a constant size (I am tracking X number of stats)
// etc
}
struct Item
{
int itemTypeId;
int Durability; // also used as a 'uses' count for potions and the like
int strength; // damage of a weapon, protection of armor, effectiveness of a potion
// etc
}
Затем я просто записываю / копирую данные в файл и из файла, используя базовые значения файлового ввода-вывода. InventoryCount - это число структур Item, которые сохраняются после основной структуры SaveGameData в файле, поэтому я знаю, сколько из них нужно прочитать после извлечения этих данных. Ключевым моментом здесь является то, что когда я хочу сохранить что-то новое, кроме списка элементов или чего-либо подобного, все, что мне когда-либо нужно, это добавить значение в структуру some where. Если это список элементов, тогда мне нужно будет добавить проход чтения, как я уже подразумевал, для объектов Item, счетчик в главном заголовке и затем записи.
Это имеет обратную сторону - делает разные версии файла сохранения несовместимыми друг с другом без специальной обработки (даже если это просто значения по умолчанию для каждой записи в основной структуре). Но в целом это позволяет легко расширять систему, просто добавляя новое значение данных и добавляя в него значение при необходимости.
Опять же, есть несколько способов сделать это, и это может привести к C, а не к C ++, но это уже сделано!