Étant donné que la traduction ne vient pas, je me suis permis de lancer le truc pour que ça reparte voyez-vous. On va donc démarrer ce chapitre sur la sauvegarde qui est mon premier et qui, j’espère, vous conviendra.

Jour 21 - Sauvegarde et Chargement avec FAT


Nous allons donc utiliser les fonctions basiques de sauvegarde et chargement qui je pense, du moins je l’espère, devraient suffire pour vos jeux. Comme vous vous en doutez, je m’inspire de la version de Gemisis du wiki Anglais donc vous risquez de retrouver en gros la même chose dans cette version française qui je l’espère sera assez compréhensible ;)

Initialisation de FAT


Initialiser FAT afin de pouvoir sauvegarder et charger est plutôt aisé. Il suffit, après avoir initialisé palib de placer fatInitDefault(); qui va initialiser le système. Notez que fatInitDefault(); est une fonction qui ne fait pas partie de la librairie palib. Voici l’exemple du wiki anglais qui fonctionne, mais ne fait rien.
//Includes
#include <PA9.h>
#include <fat.h>
//main
int main()
{
        PA_Init();    // PA Init...
        PA_InitVBL();	// VBL Init...
 
	fatInitDefault();
 
	while(1)
	{
		PA_WaitForVBL();
	}
	return 0;
}

Nous allons voir comment se servir de FAT dans les paragraphes suivants.

Ecrire le fichier de sauvegarde

Nous allons en premier lieu voir comment enregistrer les données dans un fichier.

Créer la structure de sauvegarde

D’abord vous devez créer la structure pour sauvegarder les données. Elle contiendra tout ce que vous allez sauver dans le fichier. La structure de l’exemple utilise bool et int mais les autres devraient fonctionner également.

typedef struct
{
  bool character;
  int level;
}save_struct;
 
save_struct save_data;
 

Là pas vraiment de difficultés, on a créé une structure qui nous permettra de sauvegarder le personnage et son niveau.

Ecrire les données dans un fichier

Maintenant, nous allons écrire la structure dans un fichier pour l’utiliser. Pour ça, il nous faut avoir défini notre structure et initialisé FAT. Je vous invite à étudier l’exemple ci-dessous :

//Includes
#include <PA9.h>
#include <fat.h>
 
//Structure de sauvegarde
typedef struct
{
	bool character;
	int level;
}save_struct;
 
//Fichier de sauvegarde
save_struct save_data;
 
//main
int main()
{
	PA_Init();    // PA Init...
	PA_InitVBL();	// VBL Init...
 
	//FAT initialization
	fatInitDefault();
 
	//Valeurs des données de sauvegarde
	save_data.character = true;
	save_data.level = 2;
 
	//WB écrit et créé.  On l'utilise pour écrire et créer le fichier de sauvegarde
	FILE* save_file = fopen("save_file.save", "wb");
 
	//Enregistrer save_data sur save_file ne pas oublier '&' pour save_data
	fwrite(&save_data, 1, sizeof(save_data), save_file);
 
	//Ferme le fichier
	fclose(save_file);
 
	while(1)
	{
		PA_WaitForVBL();
	}
	return 0;
}

D’abord, on initialise les valeurs:

	save_data.character = true;
	save_data.level = 2;

Ensuite on ouvre le fichier sur lequel on souhaite enregistrer:

	//WB trunacates write and create.  This will be used to create and write to the save file
	FILE* save_file = fopen("save_file.save", "wb");

‘wb’ peut être remplacé par d’autres valeurs (depuis Cplusplus.com) :

Effet
rb Ouvrez un fichier pour la lecture. Le fichier doit exister.
wb Créer un fichier vide pour l’écriture. Si un fichier du même nom existe déjà de son contenu est effacé et le dossier est traité comme un nouveau fichier vide.
ab Ajouter à un fichier. Les opérations de rédaction ajouter des données à la fin du fichier. Le fichier est créé s’il n’existe pas.
rb + Ouvrez un fichier de mise à jour de la lecture et l’écriture. Le fichier doit exister.
wb + Créer un fichier vide pour la lecture et l’écriture. Si un fichier du même nom existe déjà de son contenu est effacé et le dossier est traité comme un nouveau fichier vide.
ab + Ouvrez un fichier pour la lecture et l’ajout. Toutes les opérations d’écriture sont effectuées à la fin du fichier, la protection du contenu précédent d’être écrasé. Vous pouvez repositionner (fseek, rewind), le pointeur à l’intérieur de n’importe où dans le fichier pour la lecture, en écriture, mais se déplace de nouveau à la fin de fichier. Le fichier est créé s’il n’existe pas.

Après quoi on enregistre les données dessus avec fwrite:

	//Write save_data to save_file don't forget the & for save_data
	fwrite(&save_data, 1, sizeof(save_data), save_file);

Et pour finir, on ferme le fichier:

	//Close the file
	fclose(save_file);

Et cela devrait marcher.

Lire les données sauvées

Lire le fichier de sauvegarde est plus ou moins la même chose que le créer, sauf que nous allons charger les valeurs dans la structure. Notez que les valeurs de la structure doivent être identiques à celles que vous chargez.

La seule chose que vous devez changer est fwrite, à la place duquel vous utiliserez fread. Cela remplacera votre structure par celle chargée.

Conclusion

Cette page a été réalisée par Sheeft en tant que traduction de la page originale de Gemesis qui spécifie quelques dernières choses :

  1. Le code des sauvegardes est en binaire donc c’est plutôt difficile à lire sans un éditeur héxadécimal.
  2. Ce code a été écrit en vitesse donc il est possible que certaines choses ne fonctionnent pas correctement.

Vos remarques et questions sont à adresser à son adresse courriel GEMISIS@live.com

En espérant vous avoir aidé avec cette petite traduction ;)

 
day21.txt · Dernière modification: 07/06/2009 02:09 par 82.244.124.241
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki