Muhtemelen bunu yapmanın çok fazla yolu vardır, ancak hem kişisel hem de profesyonel olarak daima bulup kullandığım en basit şey, kaydedilmesini istediğim tüm değerleri içeren bir yapı oluşturmaktır.
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
}
Daha sonra sadece temel Dosya GÇ değerlerini kullanarak bir dosyaya veri girip fwrite / fread. İnventoryCount, dosyadaki ana SaveGameData yapısından sonra kaydedilen Öğe yapılarının sayısıdır, bu yüzden bu verilerin alınmasından sonra kaçının okunacağını biliyorum. Buradaki anahtar, yeni bir şey kaydetmek istediğimde, bir öğe listesi veya benzeri olmadıkça yapmam gereken tek şey, bazı yerlere yapıya değer katmak. Eğer bu bir öğe listesi ise, daha önce Eşya nesneleri için ima ettiğim gibi, ana başlıktaki bir sayaç ve ardından girişler gibi bir okuma geçişi eklemek zorunda kalacağım.
Bu, bir kaydetme dosyasının farklı sürümlerini, özel işlemesi dışında birbiriyle uyumlu hale getirmenin dezavantajı vardır (ana yapıdaki her giriş için yalnızca varsayılan değerler olsa bile). Ancak genel olarak bu, sistemin yeni bir veri değeri ekleyerek ve gerektiğinde ona bir değer koyarak kolayca genişletilmesini sağlar.
Yine, bunu yapmanın epeyce bir yolu ve bu durum C ++ 'a C ++' dan daha fazla yol açabilir, ancak işi tamamladı!