Créer des sauvegardes (programmation C)

Fermé
titocross Messages postés 2 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 14 mars 2011 - 13 mars 2011 à 19:21
.N Messages postés 25 Date d'inscription samedi 12 mars 2011 Statut Membre Dernière intervention 17 mars 2011 - 16 mars 2011 à 01:42
Bonjour tout le monde.
Je suis actuellement en train de créer un jeu de plate-forme (très basique : j'ai commencé la programmation il n'y a pas longtemps). J'ai a peu près tout fini sauf le système pour sauvegarder.
je voudrais que si le joueur arrête de jouer a un niveau quand il reprendra le jeu il pourra choisir de revenir a ce même niveau mais je n'ai aucune idée de la façon de faire (sauf si je laisse toujours le choix de niveau au joueur mais je préfèrerai éviter).
Si quelqu'un connait un endroit ou je pourrais apprendre comment faire merci de me l'indiquer.



A voir également:

3 réponses

.N Messages postés 25 Date d'inscription samedi 12 mars 2011 Statut Membre Dernière intervention 17 mars 2011 562
Modifié par .N le 17/03/2011 à 02:12
Très simple, en fait, il s'agit juste de stocker la valeur du niveau dans un fichier. Si tu souhaites implémenter ton jeu de plateforme pour qu'il créer le fichier en question dans le répertoire personnel de l'utilisateur, il faut :
-Sous Windows : créer ton fichier dans un répertoire dédié à ton jeu (que tu créer s'il n'existe pas), dans le répertoire par défaut des fichiers relatifs aux différents programmes et spécifique à l'utilisateur actif. On trouve ce répertoire dans : C:\Nom de l'utilisateur\AppData\Roaming.
Tu peux récupérer celui-ci avec la variable d'environnement %APPDATA%.
-Sous Linux : créer ton fichier dans un répertoire dédié à ton jeu (que tu créer s'il n'existe pas), dans le répertoire personnel de l'utilisateur. On trouve ce répertoire dans : home/Nom de l'utilisateur.
Tu peux récupérer celui-ci avec la variable d'environnement $HOME.
Le répertoire de ton jeu devrait préférablement être précédé d'un ".", pour être un «fichier caché».



Pour récupérer une variable d'environnement sous un système quelconque, il faut utiliser la fonction de la librairie standard «getenv( const char * name )» (http://www.cplusplus.com/reference/cstdlib/getenv/

Pour manipuler des fichiers, il faut utiliser les fonctions :

FILE * fopen ( const char * filename, const char * mode );
int fclose ( FILE * stream );

int fputc ( int character, FILE * stream );
int fgetc ( FILE * stream );

ou encore

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );
size_t fwrite ( const void * ptr, size_t size, size_t count, FILE * stream );

Si tu es vraiment très très débutant, tu peux trouver un bon tutoriel sur le «Site du Zéro» (https://openclassrooms.com/fr/ à propos des bases de base du C : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c et des bases de base de la manipulation de fichier : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/16421-lire-et-ecrire-dans-des-fichiers
2
titocross Messages postés 2 Date d'inscription dimanche 13 mars 2011 Statut Membre Dernière intervention 14 mars 2011
14 mars 2011 à 20:00
merci de ta réponse je vais essayer dans la semaine quand j'aurais le temps.
En gros si j'ai bien compris il suffit de créer un fichier dans lequel on stockera une sorte de code qui correspond a tel ou tel autre niveau ou autre option. Si ce n'ai pas sa merci de m'éclairer.
j'ai appris avec le tutoriel que tu as envoyer mais je crois que j'ai zaapé le chapitre sur écrire et lire dans des fichiers merci de l'avoir envoyer je ne pensais pas avoir raté de chapitre donc je n'étais même pas retourné sur se site^^.
0
.N Messages postés 25 Date d'inscription samedi 12 mars 2011 Statut Membre Dernière intervention 17 mars 2011 562
Modifié par .N le 16/03/2011 à 01:43
Si tu veux un exemple de comment sauvegarder un type unsigned long :
#include <stdlib.h> 
#include <stdio.h> 

int ulong_save(const char* filename, unsigned long value) 
{ 
    FILE * f = fopen(filename, "wb"); 
    if (!f) return -1; 

    unsigned char bytes[4] = 
    { 
        (value >> 24) & 0xFF, 
        (value >> 16) & 0xFF, 
        (value >> 8) & 0xFF, 
        (value >> 0) & 0xFF 
    }; 

    fwrite(bytes, sizeof(char), 4, f); 
    fclose(f); 
    return 0; 
} 

int ulong_read(const char* filename, unsigned long *value) 
{ 
    FILE * f = fopen(filename, "rb"); 
    if (!f) return -1; 

    unsigned char bytes[4]; 
    fread(bytes, sizeof(char), 4, f); 

    *value = 0; 
    *value |= bytes[0] << 24; 
    *value |= bytes[1] << 16; 
    *value |= bytes[2] << 8; 
    *value |= bytes[3] << 0; 

    fclose(f); 
    return 0; 
} 

int main() 
{ 
    unsigned long a; 
    ulong_save("abc.bin", 1234); 
    ulong_read("abc.bin", &a); 
    printf("a = %ld\n", a); 
    return 0; 
} 



Tu n'a qu'à prendre ces fonctions, et les utiliser pour sauvegarder tes niveaux.
0