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...


1, 2, 3, 4, 5 Suivante
Tenmatx Hors ligne Membre Points: 996 Défis: 2 Message

Citer : Posté le 01/04/2014 23:22 | #


Cadeau !
Cadeau !
int writeFile(unsigned char* name,unsigned char* extension,unsigned char* source,int taille)
{
FONTCHARACTER filename[20]={'\\','\\','f','l','s','0','\\'};
int a = 0;
int handle;
do
{
filename[7+a]=name[a];
a++;
}while(name[a] != 0 && a<7);
filename[7+a] = '.';
filename[8+a] = extension[0];
filename[9+a] = extension[1];
filename[10+a] = extension[2];
filename[11+a] = 0;

Bfile_DeleteFile(filename);
Bfile_CreateFile(filename,taille);
handle = Bfile_OpenFile(filename,_OPENMODE_WRITE);
if(handle>-1)
{
Bfile_WriteFile(handle,source,taille);
Bfile_CloseFile(handle);
return 1;
}
return 0;
}

int readFile(unsigned char* name,unsigned char* extension,unsigned char* reception)
{
int taille;
FONTCHARACTER filename[20]={'\\','\\','f','l','s','0','\\'};
int handle;
int a = 0;
do
{
filename[7+a]=name[a];
a++;
}while(name[a] != 0 && a<7);
filename[7+a] = '.';
filename[8+a] = extension[0];
filename[9+a] = extension[1];
filename[10+a] = extension[2];
filename[11+a] = 0;


handle = Bfile_OpenFile(filename,_OPENMODE_READ);

if(handle<0)return 0;
taille = Bfile_GetFileSize(handle);
if(handle>-1)
{
Bfile_ReadFile(handle,reception,taille,0);

Bfile_CloseFile(handle);
return 1;
}
return 0;
}


C'est exactement ce qu'on m'a répondu quand j'ai posé cette question :).
writeFile pour sauvegarder, readFile pour récupérer la sauvegarde.

Exemple :
writeFile("JumpEv","sav",sauvegarde,80); /* 80 est la taille de la sauvegarde, car ici j'ai sauvegardé un tableau d'int de 20 valeurs (4*20=80) */
readFile("JumpEv","sav",sauvegarde); /* "JumpEv "est le nom de la sauvegarde, "sav" est l'extension que j'ai choisi (tu peux mettre n'importe quoi, par exemple "nul" ) et "sauvegarde" est le nom du tableau que je sauvegarde dans la première fonction, et le tableau dans lequel je récupère la sauvegarde dans la deuxième fonction */.
Mes programmes de maths
Mes programmes de maths

Toutes les formules de Première S.
Toutes les formules de Terminale S.
Un programme de calculs.
Mes meilleurs jeux
Mes meilleurs jeux

Jeu gagnant des 48h CPC n°12

Mon site de discussion pour ados : http://entre-ados.net/ (a brûlé dans l'incendie d'OVH)
Mon éditeur de cours en ligne et plateforme de partage : http://wordline.xyz (a succombé à la concurrence de Google Drive...)
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 01/04/2014 23:25 | #


Est-ce que les pointeurs on un rapport ?

Ajouté le 01/04/2014 à 23:35 :
Et comment je fais pour savoir si le fichier existe ?
En gros, l'équivalent de l'astuce des listes de Btl
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)
Smashmaster Hors ligne Ancien modérateur Points: 4561 Défis: 253 Message

Citer : Posté le 01/04/2014 23:42 | #


Si la fonction Bfile_OpenFile() retourne un nombre négatif alors le fichier n'existe pas ;).


handle = Bfile_OpenFile(filename,_OPENMODE_WRITE);
if(handle>-1)
{
     [green]//Le fichier existe[/green]    
     Bfile_WriteFile(handle,source,taille);
     Bfile_CloseFile(handle);
}


Tenmatx Hors ligne Membre Points: 996 Défis: 2 Message

Citer : Posté le 02/04/2014 12:31 | #


Si le fichier n'existe pas, tu récupèrera un tableau vide (rempli de 0).

Les pointeurs ce sont en fait les tableaux.

Dans un prototype ou une déclaration de fonction, écrire char* tableau ou char tableau[] revient exactement au même .
Mes programmes de maths
Mes programmes de maths

Toutes les formules de Première S.
Toutes les formules de Terminale S.
Un programme de calculs.
Mes meilleurs jeux
Mes meilleurs jeux

Jeu gagnant des 48h CPC n°12

Mon site de discussion pour ados : http://entre-ados.net/ (a brûlé dans l'incendie d'OVH)
Mon éditeur de cours en ligne et plateforme de partage : http://wordline.xyz (a succombé à la concurrence de Google Drive...)
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 02/04/2014 12:49 | #


Je ne peux pas tester tout de suite, mais je crois que

unsigned char tab[] = "chaine";

est correct alors que
unsigned char *tab = "chaine";

renvoie une erreur du type "Illegal pointer assignment".
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 02/04/2014 13:04 | #


Lors d'une déclaration, il y a une grosse différence : le tableau demande une zone de mémoire qu'il peut utiliser, et son nom est considéré comme un pointeur sur le début de cette zone. Le pointeur ne demandera pas de zone de mémoire, et lors de son initialisation peut pointer sur n'importe quoi.
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 02/04/2014 13:43 | #


Tenmatx a écrit :
Les pointeurs ce sont en fait les tableaux.

Heu, je crois que des explications sur les pointeurs s'imposent.

La mémoire de la calculette est en fait comme un immense hôtel. Il y a autant de chambres que de mémoire disponible (en octets). On va dire qu'il y en a 1 500 000, soit 1,5Mo.
Chaque chambre a un numéro, qui va de 0 à 1 499 999. Dans chaque chambre, on peut mettre une valeur qui va de 0 à 255.

Le pointeur, c'est l'adresse de la chambre, la variable c'est le contenu de la chambre.
Voici un code expliqué de ce qui se passe lors de son exécution.

int variable = 0; // on réserve une chambre de la taille d'un int (soit 4 chambres côte à côte), et on la rempli avec 0
unsigned char caractere = 'A'; // on réserve une chambre de la taille d'un char (1 chambre), et on la rempli avec la valeur ASCII de 'A' (0x41)
int* pointeur = NULL; // on réserve une chambre qui contiendra le numéro d'une autre chambre, mais pour le moment elle ne pointe nulle part (NULL)
int tableau[4]; // on réserve 4 chambres à la suite. "tableau" est donc un pointeur (qui contient l'adresse de la première chambre qu'on a réservé)
unsigned char texte[] = "Hello World"; // on réserve 12 chambres que l'on remplit avec les valeur de la chaine de caractères. "texte" est un pointeur qui pointe sur la première chambre

pointeur = &variable; // on met le numéro (avec &) de la chambre "variable" dans "pointeur"
*pointeur = 1; // on rempli la chambre sur laquelle pointe "pointeur" (avec *) avec 1

*(tableau + 3) = 1; // on rempli la chambre qui se situe 3 cases après la première du tableau avec 1
tableau[3] = 2; // mais comme les programmeurs sont des feignants, ce code équivaut à celui ci-dessus


J'espère que c'est plus clair, les pointeurs sont vraiment important dès que vous voulez faire quelque chose de plus élaboré qu'un Pong... N'hésitez pas à aller voir le tuto du SdZ, il est très bien fait.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Tenmatx Hors ligne Membre Points: 996 Défis: 2 Message

Citer : Posté le 02/04/2014 13:55 | #


En fait je me suis peut-être mal exprimé... merci Dark Storm, mais ça je le savais.

Ce que je voulais dire c'est que si on met tableau[] ou *tableau dans un prototype, on peut dans les deux cas envoyer un tableau à la fonction. C'était juste pour expliquer à Kirafi pourquoi dans readFile et writeFile il y a * et pas [].
Mes programmes de maths
Mes programmes de maths

Toutes les formules de Première S.
Toutes les formules de Terminale S.
Un programme de calculs.
Mes meilleurs jeux
Mes meilleurs jeux

Jeu gagnant des 48h CPC n°12

Mon site de discussion pour ados : http://entre-ados.net/ (a brûlé dans l'incendie d'OVH)
Mon éditeur de cours en ligne et plateforme de partage : http://wordline.xyz (a succombé à la concurrence de Google Drive...)
Dark storm En ligne Labélisateur Points: 11631 Défis: 176 Message

Citer : Posté le 02/04/2014 14:09 | #


Dans ce cas, oui
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 02/04/2014 21:19 | #


Mais puisque la fonction demande un char, comment faire pour sauvegarder un score plus imposant que 255 ?
Dans mon premier add-in le score est géré avec un char, donc ce cas de figure, bien qu'improbable, me tracasse
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 02/04/2014 21:21 | #


La fonction demande un unsigned char *, c.a.d une chaîne de caractères, non ?

Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 02/04/2014 21:33 | #


Elle demande un tableau d'octet, pas forcement une chaine de caractere.
tu peux faire
writeFile(nom,ext,(unsigned char*) tableauInt,4*TailleTableau);
si tu as un tableau d'int, sinon je pense que cela marche pour une valeur :
writeFile(nom,ext,(unsigned char*) (&int),4);

Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 02/04/2014 21:33 | #


Oui, où alors un pointeur.
Parce que tu crois que je suis obligé de convertir mon int en chaîne de caractères pour pouvoir l'enregistrer ?
Lephenixnoir Hors ligne Administrateur Points: 24145 Défis: 170 Message

Citer : Posté le 02/04/2014 21:36 | #


La fonction demande un unsigned char *.
L'adresse de ton int est un int *, donc le compilateur renvoie un warning "Invalid Argument".
Du coup, on caste en unsigned char *.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 02/04/2014 21:37 | #


ou sinon, tu réduis avec une division
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 02/04/2014 21:53 | #


Apparemment, mon message est passer inaperçu

Elle demande un tableau d'octet, pas forcement une chaine de caractère. (mais pour demander un tableau d'octet, c'est aussi des unsigned char)
tu peux faire
writeFile(nom,ext,(unsigned char*) tableauInt,4*TailleTableau);
si tu as un tableau d'int, sinon je pense que cela marche pour une valeur :
writeFile(nom,ext,(unsigned char*) (&int),4);
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 03/04/2014 20:42 | #


Wahou ! Je me reconnecte 1 jour plus tard et voici une avalanche de réponses
Ok merci pour l'explication des pointeurs DarkStorm
Et donc pour pouvoir sauvegarder un Record (un int), il faut stocker le nombre dans un fichier, de cette manière ?
writeFile(Record,sav,(unsigned char*) tableauInt,4*TailleTableau);

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)
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 03/04/2014 20:44 | #


Ca c'est pour sauvegarder un tableau d'int.
Pour sauvegarder un unique int, utilise ceci :

writeFile(Record,sav,(unsigned char*) &tableauInt,4);

Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
Kirafi Hors ligne Membre Points: 2180 Défis: 10 Message

Citer : Posté le 03/04/2014 20:48 | #


Ok merci Dodormeur , j'essaye tout de suite et je met aussi le truc de Smash pour savoir si le fichier existe... Heu... Mais comment je récupère la valeur au fait

Ajouté le 03/04/2014 à 20:52 :
Bon, en fait, j'ai un peu compris les grande lignes mais concrètement, pour créer un fichier j'ai pas tout compris
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)
Dodormeur Hors ligne Ancien rédacteur Points: 3965 Défis: 84 Message

Citer : Posté le 03/04/2014 21:04 | #


en fait, writefile te renvoie 1 si tout c'est bien passé, et 0 si le fichier n'existe pas. Si la lecture a réussie, tableauInt contiendra le contenu du fichier
Pokemon !!!!!! => pokemon stadium/battle

mes meilleurs jeux
Cliquer pour enrouler
un jeu avec des niveaux de gris mais compatible SH4 (mais en monochrome pour les SH4) => bomberman
envie de plonger dans la mer pour ramasser des tresors? => ballon sea
envie de sauver l'univers dans un jeu avec une longue durée de vie? => saviors of the future
un add-in addictif avec plein de secret et de trophées => evasion survival
un shmup bien dur et sadique => saviors 2

projets
Cliquer pour enrouler

pokemon
Cliquer pour enrouler



encodage des données de combat (sprite, attaques et nom)
   100%

systeme de combat
   100%

encodage des données de pokemon (niveau d'apprentisage et evolution)
   100%


moteur de la carte
   50%

level design
   1%

finition de pokemon jade
   42%

merci a tout le monde pour son soutien


projets que je soutiens
Cliquer pour enrouler
minecraft de limachi
zelda prizm de smashmaster (en esperant qu'il puisse le finir)
les tests de marmotti
un RPG de dark storm (dont je connais le nom, mais pas vous ) Arcuz !
1, 2, 3, 4, 5 Suivante

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 74 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