Próbuję znaleźć sposób, aby napisać system zapisu / ładowania dla mojej gry w C ++. W tej chwili robię to wszystko przy użyciu flag binarnych. Czy ktoś ma pojęcie, jak to zrobić w inny sposób? Nie mam nic przeciwko używaniu plików binarnych, ale chcę poznać moje opcje. Chcę również czegoś, w którym łatwo byłoby sprawdzić status jednego zdarzenia jako ukończonego lub niekompletnego w celu podjęcia pewnych decyzji (wiele systemów przedmiotów w tej grze zależy od tego, co gracz zrobił lub czego nie zrobił w trakcie gry).
17
Odpowiedzi:
Serializacja byłaby właściwym rozwiązaniem, a jeśli chodzi o sprawdzanie statusu, możesz mieć logikę w metodzie deserializacji.
źródło
Trochę przestudiowałem kod źródłowy DOOM. Powiem ci, jak się tam robi.
D_DoomMain zawiera wszystkie funkcje open / save / load, a także mnóstwo innych rzeczy. Jak napisano na początku pliku,
Zasadniczo cały plik jest pełen
M_CheckParm
od początku do końca. Z tego składa się D_DoomLoop. To jedna ogromna pętla (około 1000-2000 linii).Ponieważ twoje pytanie brzmi: „Jak mogę pisać?” Wkleję tylko fragmenty kodu odnoszące się do zapisów gier z D_DoomMain:
oto stwierdzenia, w których te rzeczy są używane, na samym końcu pętli.
Oto funkcja, która uzyskuje dostęp do ciągów znaków, które są rozproszone w całym kodzie:
Masz również plik o nazwie p_savegame.c z rzeczami, które zapiszą wszystkie dane związane z użytkownikiem (jaką masz broń, gdzie jesteś na jakim poziomie itp.).
I w końcu masz plik, który ładuje dane zapisu do scenariusza gry, prawdopodobnie najbardziej skomplikowany ze wszystkich, ponieważ ładuje także wszystko inne. Ten nazywa się p_setup.c i znajduje się w tym samym katalogu.
Dla mnie
cat
wszystko działało dobrze w buforze tekstowym ipipe
ten tekstsendmail
na mój własny adres e-mail. W ten sposób mogę go przeczytać w dziwnych momentach dnia i użyć „znajdź”, kiedy chcę szukać rzeczy takich jak „jak DOOM ładuje grę”. Kod jest dobrze skomentowany.źródło
Możesz serializować klasę lub dane do płaskiego pliku, a następnie odczytywać je ponownie podczas ładowania.
źródło
I +1: zredagowałem sugestię użycia XML / JSON do strukturyzowania zapisywanych gier. W ten sposób jesteś bardzo przygotowany do tego, aby zapisy były oparte na „chmurze”. A przynajmniej będziesz miał strukturę, której możesz użyć do przyszłych projektów, które mogą obejmować Internet. Tak długo, jak pliki nie są przechowywane w sposób zbyt łatwy do odczytania, powinny zapewniać wiele korzyści. Jak metryki! Brawo
źródło