W jaki sposób są przechowywane informacje w grach

0

Zastanawiam się w jaki sposób są przechowywane dane w grach. Mamy grę np gothic II zdobywam miecz wilczy kieł klikam save i potem mogę wgrać grę. Jak to właściwie jest przechowywane? Są chyba takie gry w których "zapis" odbywa się o plik tekstowy który przechowuje na naszym komputerze ile mamy czego. Umówmy się jednak że jest to b proste do obejścia. Są dwie możliwości które przychodzą i do głowy a wśród nich jedna trochę się rozgałęzia. Może gra ma jakąś bazę danych? Czy to relacyjną SQL czy jakąś NO SQL albo baza danych to tak naprawdę np plik jsonowy który przechowuje pewne informacje. Inna możliwość to że gra w jakiś dla mnie magiczny sposób zapisuje po prostu dane w postaci 0 i 1. Podobnie jak podczas procesu kompilacji programu dostajesz program który wie że Twoja zmienna a wynosi 3. Jeśli umożliwisz zmianę a to moższ podczas działania zmienić wartość np na 9 ale jak włączysz znowu masz 3. Chyba że program by jakos zapisał się i następnie dokonał linkowania i kompilacji. Czy save to taki jakby podprogram który jest użytkowany przez inne podprogramy gry?

Jak jest to rozwiązywane jak to wygląda?

1

To są po prostu pliki binarne. Nie wiem, czy stosuje się do tego bazy w stylu SQLite. Ja bym to zrobił w pliku binarnym. Teoretycznie niemożliwe, żeby użytkownik taki plik sobie wyedytował tak, jak chce (w praktyce wymaga to dość sporo zachodu), a dodatkowo jest szybki w zapisie i odczycie. Niektóre gry (nie wiem, może wszystkie komercyjne) zapisują taki plik przyrostowo. Tzn. zapisują tylko to, co się zmieniło od ostatniego zapisu, co dodatkowo skraca czas zapisu takiego pliku.

1

Czy save to taki jakby podprogram który jest użytkowany przez inne podprogramy gry?

Zwykle nie ma takiej potrzeby, żeby tworzyć aż cały podprogram (armata na muchę). Zapisuje się po prostu stan gry, dane obiektów gry, informacje o postępach w grze (np. numer planszy) itp. Czyli zapisuje się zwykle same dane, a nie kod wykonywalny.

Z tym, że każda gra będzie to inaczej zapisywać, inne dane, w zależności od potrzeb.

Może gra ma jakąś bazę danych? Czy to relacyjną SQL czy jakąś NO SQL albo baza danych to tak naprawdę np plik jsonowy który przechowuje pewne informacje.

Przypuszczam, że w wiekszości przypadków będą te dane zapisywane w plikach na dysku (polecam przeszukanie katalogu z grą, czy swojego katalogu domowego w którym zapisywane są dane o aplikacjach), ale nikt nie broni twórcy gier odwołanie się do bazy danych (np. przeglądarkowe gry multiplayer zapewne będą zapisywały dane na serwerze w bazie danych).

naprawdę np plik jsonowy

To zależy od gry. Nikt nie broni korzystać z formatu JSON, ale to tylko jeden z formatów (przy czym JSON, czy np. XML to formaty tekstowe, a poza tym aplikacja może zapisywać w formatach binarnych, które jak otworzysz w notatniku taki plik, to zobaczysz tylko krzaczki).

W ogóle warto się zaopatrzyć w jakiś Hex Edytor, jak chce się coś takiego edytować.

3

W grze działającej lokalnie, twórcy nie zależy jakoś specjalnie na utrudnieniu modyfikacji save'a. Jak gracz chce sobie zepsuć rozgrywkę to poszuka jakichś cheatów. Najważniejsze, żeby "normalnym" użytkownikom gra działała jak należy. Bo w końcu gra ma bawić człowieka, który ją nabył ;) Twórcy gry nie czują żadnego żalu jeśli ktoś w zaciszu domowym oszukuje ich grę. Gorzej jest z grami rankingowymi (online), bo tam jak ktoś sobie podkręci wynik, to może zniechęcić innych graczy do gry. I wtedy gra traci użytkowników i twórca nie zarobi na reklamach itp. Więc należy trzymać pewien poziom bezpieczeństwa i weryfikacji danych otrzymywanych przez serwer.

Ja w swojej małej grze namiętnie korzystam z serializacji klasy do pliku binarnego (Unity 3D - C#). Tam zapisuję, które poziomy/przedmioty zostały już odblokowane + jakieś tam statystyki + preferencje (wybór języka, głośność itp.). Do statycznego obiektu tej serializowanej klasy mam dostęp globalny i żeby zapisać wszelkie zmiany dokonane na tym obiekcie, w odpowiednich momentach serializuję go do pliku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1