Prawdopodobnie istnieje wiele sposobów, aby to zrobić, ale najprostszym, który zawsze znajdowałem i którego używałem zarówno osobiście, jak i zawodowo, jest stworzenie struktury zawierającej wszystkie wartości, które chcę zapisać.
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
}
Następnie po prostu zapisuję / fread dane do i z pliku przy użyciu podstawowych wartości we / wy pliku. InventoryCount to liczba struktur elementów zapisanych po głównej strukturze SaveGameData w pliku, więc wiem, ile z nich należy odczytać po pobraniu tych danych. Kluczem tutaj jest to, że gdy chcę zapisać coś nowego, chyba że jest to lista przedmiotów lub tym podobne, wszystko, co muszę zrobić, to dodać wartość do struktury gdzieś. Jeśli jest to lista elementów, będę musiał dodać przepustkę odczytu, jak już sugerowałem dla obiektów Item, licznik w nagłówku głównym, a następnie wpisy.
Ma to wadę polegającą na tym, że różne wersje pliku składowania są ze sobą niezgodne bez specjalnej obsługi (nawet jeśli są to tylko domyślne wartości dla każdego wpisu w głównej strukturze). Ale ogólnie sprawia to, że system można łatwo rozszerzyć, dodając nową wartość danych i wprowadzając wartość w razie potrzeby.
Ponownie, istnieje kilka sposobów, aby to zrobić, a to może prowadzić bardziej do C niż C ++, ale wykonało to zadanie!