J'essaie de trouver un moyen d'écrire un système de sauvegarde / chargement pour mon jeu en C ++. En ce moment, je fais tout cela en utilisant des drapeaux binaires. Quelqu'un a une idée sur la façon de procéder autrement? Cela ne me dérange pas d'utiliser le binaire, mais je veux connaître mes options. Je veux aussi quelque chose dans lequel il serait facile de vérifier si un seul événement est complet ou incomplet afin de décider de certaines choses (une grande partie du système d'objets dans ce jeu dépend de ce que le joueur a ou n'a pas fait) tout au long du jeu).
17
Réponses:
La sérialisation serait la voie à suivre, et en ce qui concerne la vérification de l'état, vous pourriez avoir une logique dans la méthode de désérialisation pour le faire.
la source
J'ai étudié un peu le code source de DOOM. Je vais vous dire comment ça se passe là-dedans.
D_DoomMain contient toutes les fonctions d'ouverture / sauvegarde / chargement, ainsi qu'un tas d'autres choses. Comme il est dit au début du fichier,
Fondamentalement, le fichier entier est plein de
M_CheckParm
s du début à la fin. C'est en cela que consiste le D_DoomLoop. C'est une boucle massive (quelque chose comme 1000-2000 lignes de long).Puisque votre question est «Comment puis-je écrire? Je vais juste coller quelques morceaux de code qui se réfèrent à gamesaves, de D_DoomMain:
voici les instructions où ce truc est utilisé, à la toute fin de la boucle.
Voici la fonction qui accède aux chaînes, que vous trouvez dispersées dans le code:
Vous avez également un fichier appelé p_savegame.c avec des éléments qui enregistreront toutes les données associées à l'utilisateur (quelles armes vous avez, où vous êtes à quel niveau, etc.).
Et enfin, vous avez le fichier qui charge les données de sauvegarde dans un scénario de jeu, sans doute le plus complexe de tous, car il charge également tout le reste. Celui-ci s'appelle p_setup.c et se trouve dans le même répertoire.
Cela a bien fonctionné pour moi de
cat
tous ces éléments dans un tampon de texte etpipe
ce textesendmail
à ma propre adresse e-mail. De cette façon, je peux le lire à des moments étranges de la journée et utiliser «trouver» lorsque je veux rechercher des choses comme «comment DOOM charge-t-il un jeu». Le code est bien commenté.la source
Vous pouvez sérialiser la classe ou les données dans un fichier plat, puis les relire lors du chargement.
la source
J'ai attribué +1 à la suggestion d'utiliser XML / JSON pour structurer les sauvegardes. De cette façon, vous êtes très prêt à effectuer les sauvegardes sur le "cloud". Ou du moins, vous aurez une structure que vous pourriez utiliser pour de futurs projets qui pourraient impliquer le Web. Tant que les fichiers ne sont pas stockés d'une manière trop facile à lire, ils devraient vous offrir de nombreux avantages. Comme les métriques! Hourra
la source