Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » [C][SDK](résolu)Garder des valeurs après extinction de calto
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

[C][SDK](résolu)Garder des valeurs après extinction de calto

Posté le 01/04/2014 23:14

Bonsoir (ou bonjour ).
Voila ma question : En C, comment conserver les valeurs de certaines variables/tableaux après que l'on ai quitté le programme pour faire un système se record par exemple, ou encore, sauvegarder une partie sur un jeu et le quitter, puis quand on rejoue, on peut reprendre notre sauvegarde
Il me semble que tout ça se fait en manipulant des fichiers mais je ne comprend pas du tout les doc ...
Je crois que ça concerne aussi l'ADD-IN Memory de Lephénixnoir... Mais là encore j'ai lu et j'ai pas tout compris...


Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 14:15 | #


Ok, c'est plus simple que ce que je pensais , et ça va pas boguer avec les bouts de code que tu m'as mis, car mon tableau contiendra des des 0
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 14:22 | #


De manière générale, je te conseille (par convention) de toujours mettre les nombres dans des ints (4 octets), ou si vraiment tu veux gagner de la place, dans des shorts (2 octets).
Mais de toute manière, n'utilise jamais de char, plutôt des unsigned char (même taille, 1 octet), à moins que tu aies des valeurs négatives.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 06/04/2014 14:28 | #


Pour une variable simple, met en effet des int, même si t'as une petite valeur (on est pas à 3 octets de RAM près).
Par contre, dès que t'as des tableaux (texte, tilemap, etc), préfère les (unsigned) char.
A la rigueur, les short peuvent servir à économiser de la place, mais pour quelques variables, c'est très peu utile
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 14:52 | #


Ouai, c'est ce que je fais maintenant, mais ma question c'est : Pour un tableau ("Grille[4][4]") de char, je fais ça ?
memory_writefile(handle,(void *)Grille,sizeof(*Grille)*16);

memory_readfile(handle,(void *)Grille,sizeof(*Grille)*16,-1);

iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 15:12 | #


C'est plus délicat.
Avec un tableau à une dimension, les données se suivent, donc tu peux faire ça.
Avec un tableau à deux dimensions (et notamment les tableaux de pointeurs), rien ne te garantit que les données se suivront.

Du coup, je te conseille d'y aller ligne par ligne
int i;
for(i=0;i<4;i++)
  memory_writefile(handle,(void *)Grille[i],sizeof(**Grille)*4);


Comme un tableau à deux dimensions est un tableau de tableaux, alors c'est un tableau de pointeurs. Donc *Grille renvoie le tableau Grille[0], qui est lui-même un pointeur. Il faut donc utiliser **Grille.
Pour lire, c'est comme d'habitude, mais toujours dans le même ordre.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 06/04/2014 15:13 | #


Oui, c'est juste le -1 que j'aurais remplacé par 0.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 15:13 | #


On se contredit
Il faut bien mettre -1 (position actuelle du handle), et pas 0 (début du fichier).
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 06/04/2014 15:17 | #


Il correspond à quoi déjà le dernier argument ?
Après tout, c'est ta lib, pas la mienne
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 15:18 | #


Ces arguments sont les même que pour Bfile.
Le dernier correspond à la position dans le fichier.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 06/04/2014 15:19 | #


Ben oui, donc pour tout récupérer, faut mettre 0. (position du premier élément à récupérer)
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 15:27 | #


voila, ça donne ça, mais il reste un truc dont je ne suis pas sur
void Read(int *Record, int *Score, [u]Je met quoi pour lire le tableau ?[/u]){        //Truc qui sers pour la lecture de fichiers
    int handle;
    handle = memory_openfile(FILEPATH,_OPENMODE_READ);
    memory_readfile(handle,(void *)Record,4,-1);
    memory_readfile(handle,(void *)Score,4,-1);
        [u]Je m'est quoi pour lire le tableau du coup ?[/u]
    memory_closefile(handle);
    }

void Save(int Record, int Score, [u]Je m'est quoi pour appeller[/u]){    //Truc qui sers pour la sauvegarde de fichiers
    int handle;
    memory_deletefile(FILEPATH);
    memory_createfile(FILEPATH,[u]Je m'est quoi ?[/u]);
    handle = memory_openfile(FILEPATH,_OPENMODE_WRITE);
    memory_writefile(handle,(void *)(&Record),sizeof(Record));
    memory_writefile(handle,(void *)(&Score),sizeof(Score));
    int i;
    for(i=0;i<4;i++)
        memory_writefile(handle,(void *)Grille[i],sizeof(**Grille)*4);
    memory_closefile(handle);
    }

iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 15:28 | #


Mais non, les données dont on parle ne sont pas forcément à l'index 0 !
Si la lecture se fait en plusieurs fois, il faut laisser -1.
Et puis de toute manière, le compteur est initialisé à 0.

Ajouté le 06/04/2014 à 15:32 :
Pour lire le tableau à deux dimensions, tu modifies le protoype et tu mets unsigned char ** en paramètre.
Dans l'ouverture de ta fonction, tu mets char **Grille.
Pour lire le tableau
int i;
for(i=0;i<4;i++)
  memory_readfile(handle,(void *)Grille[i],4,-1);

où 4 est le nombre d'éléments par ligne * la taille de ces éléments.

Dans le createfile, après FILEPATH, tu mets la taille du fichier (assez grande pour contenir toutes les données).

Et quelle est la question pour le Save ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 15:36 | #


En gros, je met quoi dans
void Save(int Record, int Score, [u]à cet endroit, pour avoir la Grille[4][4][/u]

idem avec le Read
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 15:39 | #


Je l'ai mais, tu ne l'as juste pas vu
void Save(int Record, int Score, type **Grille)

En remplaçent bien sûr "type" par le type de ton tableau.
Et n'oublie pas de modifier le prototype.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 15:50 | #


Ok j'ai mis ça, c'est bon ? parce que j'ai pas d'erreur de compilation mais lorsque je teste avec l'émulateur, je clique sur l'icone du jeu dans le menu et le SDK m'ouvre une fenêtre avec "Execution has stopped due to an error!, Exeption blocked reset"
Code
C'est bon ?
Pour la fonction
void Read(int *Record, int *Score, char **Grille){        //Truc qui sers pour la lecture de fichiers
    int i;
    int handle;
    handle = memory_openfile(FILEPATH,_OPENMODE_READ);
    memory_readfile(handle,(void *)Record,4,-1);
    memory_readfile(handle,(void *)Score,4,-1);
    for(i=0;i<4;i++)
        memory_readfile(handle,(void *)Grille[i],4,-1);
    memory_closefile(handle);
    }

void Save(int Record, int Score, char **Grille){    //Truc qui sers pour la sauvegarde de fichiers
    int i;
    int handle;
    memory_deletefile(FILEPATH);
    memory_createfile(FILEPATH,100);
    handle = memory_openfile(FILEPATH,_OPENMODE_WRITE);
    memory_writefile(handle,(void *)(&Record),sizeof(Record));
    memory_writefile(handle,(void *)(&Score),sizeof(Score));
    for(i=0;i<4;i++)
        memory_writefile(handle,(void *)Grille[i],sizeof(**Grille)*4);
    memory_closefile(handle);
    }

Pour la création du fichier
if(!memory_exists(FILEPATH)){        //Crée un fichier lors de la première utilisation du jeu
    memory_createfile(FILEPATH,100);
    Save(Record,Score,Grille);
    }

Pour sauvegarder/lire
Save(Record, Score,Grille);        //Stocke les données dans un fichier
Read(&Record,&Score,&Grille);        //Extrait les informations du fichier


iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 15:56 | #


Tu as écrit &Grille.
Or Grille est un tableau à deux dimensions, donc de type char **.
&Grille est un pointeur sur Grille, soit de type char *** !
Lorsque tu passes un tableau, puisqu'il s'agit d'un pointeur, tu as forcément un passage par adresse. Laisse donc
Read(&Record,&Score,Grille);

Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 16:05 | #


Ok, la compilation fonctionne mais il y à toujours la fenêtre d'erreur bizarre qui s'ouvre :huh:
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 16:15 | #


Je pense que c'est dans la fonction Read.
Mets son appel en commentaire, et dis-moi si l'erreur est toujours présente.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 16:19 | #


Non, toujours cette fenêtre
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)
Lephenixnoir En ligne Administrateur Points: 24569 Défis: 170 Message

Citer : Posté le 06/04/2014 16:22 | #


J'ai toujours du mal avec les tableaux à deux dimensions en paramètre, désolé ^^'
Modifie le prototype et la fonction de Save, en changeant **Grille en Grille[4][4].
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 06/04/2014 16:25 | #


Pas de bug de compilation mais toujours la fenêtre
iPod
Pour des parties rapides
Jusqu'où pourras-tu aller dans ce jeu "partie rapide" qu'est Dextris (élu Jeu Du Mois)
Pourras-tu survivre plus de 20 secondes dans ce fameux tunnel appelé Graviton
Rebondis entre les murs en évitant les piques dans SpikeBird
Pourras-tu éviter de te faire écraser dans FallBlocs (élu Jeu Du Mois)
Autres
Franchement ils valent le coups
Deviens l'amiral de la marine dans SeaRush (jeu concours) (élu Jeu Du Mois)
La version 2048 tactile amélioré au plus haut point : 2048 Delux !
Pars à la recherche des morceaux d'étoile dans Lumyce (élu Jeu Du Mois)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 62 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd