Créer des sauvegardes (programmation C)

titocross Messages postés 2 Statut Membre -  
.N Messages postés 27 Statut Membre -
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 27 Statut Membre 576
 
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 Statut Membre
 
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 27 Statut Membre 576
 
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