Напевно, існує велика кількість способів зробити це, але найпростіший, який я завжди знаходив і використовував як особисто, так і професійно, - це створити структуру, яка містить усі значення, які я хочу зберегти.
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
}
Потім я просто переписую / завантажую дані до та з файлу, використовуючи основні значення файлу IO. InvenCount - це кількість структур елементів, які зберігаються після основної структури SaveGameData у файлі, тому я знаю, скільки з них прочитати після отримання цих даних. Ключовим тут є те, що коли я хочу зберегти щось нове, якщо не є його перелік предметів тощо, все, що мені довелося зробити, - це додати значення структурі десь. Якщо його список елементів, то мені доведеться додати пропуск для читання, як я вже мав на увазі для об'єктів Item, лічильник у головному заголовку, а потім записи.
Це має і недолік зробити різні версії файлу збереження несумісними один з одним із спеціальними обробками (навіть якщо це лише значення за замовчуванням для кожного запису в основній структурі). Але в цілому це дозволяє легко розширювати систему, лише додаючи нове значення даних і додаючи до нього значення при необхідності.
Знову ж таки, досить багато способів зробити це, і це може призвести більше до C, ніж до C ++, але це зробило роботу!