Bonjour à tous !
Dans le cadre du jeu que je suis en train de développer (ZooShell), je me pose pas mal de questions sur la manière de mettre en place un système de sauvegarde.
Dans la première version, je stockais l’état du zoo dans un bête fichier XML. C’est bien, c’est propre et c’est surtout lisible et modifiable par n’importe qui… Même s’il n’y a pas de notion de compétition dans le jeu, je ne trouve pas ça top.
Une autre solution qui serait facile à mettre en place serait de générer le-dit XML puis de convertir son contenu en Base64. Ok, ce n’est pas immédiatement lisible mais dès qu’un joueur a compris le principe, on retombe dans les travers de la première solution.
J’ai bien une dernière solution : chiffrer le fichier de sauvegarde. Mais dans ce cas, où sauvegarder la clé ? Sachant qu’il s’agit d’un jeu 100% hors-ligne.
Ces questions en amènent une autre. Une fois que le jeu sera distribué, je souhaite continuer à le mettre à jour. Par exemple (je caricature), les animaux pourraient à la sortie du jeu n’avoir qu’un nom, puis trois mois plus tard gagner un âge. Dans ce cas, les données stockées vont évoluer. Je me demande donc comment rendre compatible une sauvegarde d’une ancienne version avec la version actuelle du jeu.
Dans l’exemple précédent, il faut que le jeu soit capable de charger un animal pour lequel la notion d’âge n’apparaît pas du tout dans la sauvegarde. Je vois deux process pour traiter ce cas :
- le côté facultatif de l’âge est traité directement dans la fonction de chargement de la sauvegarde, un truc du style :
1 2 3 4 5 | if (age == null){ animal.age = 0; } else { animal.age = age; } |
- ou un petit programme appelé avant la fonction de chargement et qui transforme l’ancienne sauvegarde en sauvegarde au format actuel ?
La seconde solution me plaît bien car elle permet de ne pas faire porter la complexité et la lourdeur de la gestion des anciens formats de sauvegarde par la fonction de chargement. Mais je suppose qu’elle a des inconvénients que je ne vois pas pour l’instant ?
De manière générale, si quelqu’un a de la documentation sur le sujet, je suis preneuse. Je n’ai pas trouvé grand chose sur Internet, au-delà des "Sauvegarde dans un fichier texte !" et des "Mais est-ce que tu sais déjà ce que tu veux sauvegarder comme infos ?".
Line