É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.
//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.
Nous allons en premier lieu voir comment enregistrer les données dans un fichier.
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.
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 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.
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 :
Vos remarques et questions sont à adresser à son adresse courriel GEMISIS@live.com
En espérant vous avoir aidé avec cette petite traduction ;)