Posté le 01/04/2014 23:14
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
Citer : Posté le 04/04/2014 21:57 | #
Tu aurais aussi pu utiliser memory...
Citer : Posté le 04/04/2014 21:58 | #
Ben... si tu m'explique comment ça fonctionne en détail parce que j'ai lu la doc et tout mais je ne sais même pas ce qu'est un handle ...
Ajouté le 04/04/2014 à 22:05 :
Enfin bref voila le code
Si le fichier n'existe pas, je le crée avec la valeur Record dedans (soit 0, car j'ai mis "unsigned int Record=0;" au début du programme)
Ensuite j'ai fait ça pour récupérer le nombre stocké dans le fichier (soit le record)
Et enfin, lors du test du nouveau record j'ai fait ça
Record=Score;
writeFile("2048RCR","sav",(unsigned char*) &Record,4);
}
Ensuite, le programme reviens au menu du jeu, si je fais une nouvelle partie (le programme refait le readFile), pas de problèmes, le record à bien était récupéré...
Mais si je quitte le programme et que je reviens ensuite, le record reviens à 0 ...
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)
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)
Citer : Posté le 04/04/2014 22:06 | #
T'es allé faire un tour sur le wiki ?
=> http://wiki.planet-casio.com/fr/Fxlib.h#Fonctions_de_manipulation_des_fichiers
Citer : Posté le 04/04/2014 22:07 | #
Le handle est un int qui permet au système de savoir quel fichier tu as ouvert, etc... c'est la variable qui permet de gérer l'utilisation des fonctions liées au fichier.
Et puis, quand même !
{
int handle;
memory_deletefile("Scores.txt");
handle = memory_openfile("Scores.txt",_OPENMODE_WRITE);
memory_writefile(handle,(void *)(&score),4);
memory_closefile(handle);
}
Citer : Posté le 04/04/2014 22:12 | #
Ok Dark Pour le wiki... J'ai presque rien compris
Et pour ton truc Lephénixnoir, c'est la fonction telle qu'elle aurait était avec memory.h mais, j'ai juste à mettre ça et ça fonctionne ?
Parce que Dodormeur ma montré un code pour créer un fichier si il n'existe pas (premier code de mon post précédent)
Et 2 autres code pour récupérer ou stocker un nombre dans le fichier créé, donc ça devrais marcher non ?
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)
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)
Citer : Posté le 04/04/2014 22:18 | #
-> Tu inclus le .c dans le projet
-> Tu inclus le .h au début du fichier
Et ça fonctionne !
// creer s'il n'existe pas
if(!memory_exists("\\\\fls0\\score")) memory_createfile("\\\\fls0\\score",10);
void Read(int *p)
{
int handle;
handle = memory_openfile("\\\\fls0\\scores",_OPENMODE_READ);
memory_readfile(handle,(void *)p,4,-1);
memory_closefile(handle);
}
Et je corrige le code précédent
{
int handle;
memory_deletefile("\\\\fls0\\Scores.txt");
memory_createfile("\\\\fls0\\Scores.txt",10);
handle = memory_openfile("\\\\fls0\\Scores.txt",_OPENMODE_WRITE);
memory_writefile(handle,(void *)(&score),4);
memory_closefile(handle);
}
Citer : Posté le 04/04/2014 22:26 | #
Hum, j'ai inclus le .c au projet et mis le .h dans les header mais il y a cette erreur
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)
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)
Citer : Posté le 04/04/2014 22:29 | #
Oui, dans le .h il y a la ligne "extern unsigned int key;"
Solution rapide: supprime le "extern".
Citer : Posté le 04/04/2014 22:30 | #
Ok ça bogue plus, maintenant je met tes bouts de code là ou il faut
Ajouté le 04/04/2014 à 22:31 :
Il faut mettre celui qui crée au même endroit que les déclaration de de variables ?
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)
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)
Citer : Posté le 04/04/2014 22:32 | #
Non non, il faut le mettre dans une fonction !
Je l'avais mis à côté pour l'exemple.
Citer : Posté le 04/04/2014 22:40 | #
Bon, ok pour la fonction... mais il me dit "C:\Users\Kirafi\Desktop\2048\Test1.c(30) : C2500 (E) Illegal token "if""
Le if de ta fonction
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)
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)
Citer : Posté le 04/04/2014 22:41 | #
{
if(!(memory_exists("Scores.txt")) memory_createfile("Scores.txt",10);
}
Et là ?
Citer : Posté le 04/04/2014 22:44 | #
Ok c'est bon, mais j'ai modifié un truc, tu avais oublié les "\\\\fls0\\"
Maintenant je mes l'autre bout de code et je teste.
Ajouté le 04/04/2014 à 22:48 :
Ok les fonction ne bogues plus, voila ce que j'ai mis, j'ai changé le score.txt par record.txt
{
if(!memory_exists("\\\\fls0\\record")) memory_createfile("\\\\fls0\\record",10);
}
void Read(int *p)
{
int handle;
handle = memory_openfile("\\\\fls0\\record",_OPENMODE_READ);
memory_readfile(handle,(void *)p,4,-1);
memory_closefile(handle);
}
void Save(int record)
{
int handle;
memory_deletefile("\\\\fls0\\record.txt");
memory_createfile("\\\\fls0\\record.txt",10);
handle = memory_openfile("\\\\fls0\\record.txt",_OPENMODE_WRITE);
memory_writefile(handle,(void *)(&record),4);
memory_closefile(handle);
}
Maintenant, pour appeler la fonction pour changer le Record, je fais ça ?
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)
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)
Citer : Posté le 04/04/2014 22:52 | #
Mais non, le main() c'était un exemple !
Tu mets ce code dans la fonction où tu veux qu'il soit appelé !
Du coup, pour sauver
et pour lire
Et n'oublie pas de corriger le Read, tu as oublié le ".txt".
Citer : Posté le 04/04/2014 22:57 | #
dans le if aussi il faut mettre record.txt ? et si ma variable à une majuscule au début, je modifie le Save(record); en Save(Record); (idem pour le read) ?
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)
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)
Citer : Posté le 04/04/2014 22:59 | #
la variable record, est ton int dans ton programme.
Soit elle est globale, soit elle n'est utilisée que par une fonction.
"Record.txt" est un nom comme un autre, le tout c'est qu'il soit indentique partout.
Citer : Posté le 04/04/2014 23:21 | #
ça fonctionne très bien, merci Lephénixnoir
Maintenant, pour enregistrer un tableau, je fais comment ?
Ajouté le 04/04/2014 à 23:36 :
Et une 2ème valeur ?
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)
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)
Citer : Posté le 05/04/2014 06:42 | #
Eh bien, tu les enregistres dans l'ordre, tu les lis dans le même ordre, et tu veille à ne pas changer les types de données.
Par exemple, tu veux enregistrer un int, un short et un float. Tu vas écrire
void Save(int i, short s, float f)
{
int handle;
if(memory_exists(FILEPATH)) memory_deletefile(FILEPATH);
memory_createfile(FILEPATH,20);
handle = memory_openfile(FILEPATH,_OPENMODE_WRITE);
memory_writefile(handle,(void *)(&i),sizeof(i));
memory_writefile(handle,(void *)(&s),sizeof(s));
memory_writefile(handle,(void *)(&f),sizeof(f));
memory_closefile(handle);
}
Alors, petites précisions sur ce code.
Pour éviter de répéter la chaîne d'adresse, je la mets dans un define, du coup ça évite les fautes de frappe, et ça permet de changer rapidement l'adresse du fichier si celle-ci ne te plaît plus. Ça ne ralentit pas l'exécution puisque les define sont directement remplacés dans le code.
J'en profite pour glisser la syntaxe d'écriture d'une variable en général.
Par contre ça ne fonctionne pas avec les tableaux.
La lecture se fait exactement dans le même sens:
{
int handle;
if(!memory_exists(FILEPATH)) return;
handle = memory_openfile(FILEPATH,_OPENMODE_READ);
memory_readfile(handle,(void *)i,sizeof(*i),-1);
memory_readfile(handle,(void *)s,sizeof(*s),-1);
memory_readfile(handle,(void *)f,sizeof(*f),-1);
memory_readfile(handle);
}
La syntaxe générale est la même, sauf que puisque l'on a des pointeurs, on n'utilise plus l'opérateur adresse dans le deuxième paramètre, par contre on utilise l'opérateur contenu dans le troisième.
Pour les tableaux c'est pareil, sauf que tu utilises 1 pointeur directement (même pour l'écriture), et tu écris non pas sur sizeof(tab), qui va te retourner la taille du pointeur, mais sur longueurTab * tailleDonnee.
Par exemple un tableau de 10 int sera écrit sur 40 octets.
Comme les éléments d'un tableau sont tous de même nature, on peut mettre longueurTab * sizeof(*tab), mais puisqu'il faut connaître la taille du tableau de toute manière, ça n'a que peu d'intérêt.
Les tableaux de char sont plus faciles à gérer, puisque strlen(str) ranvoie le nombre de caractères, et que sizeof(char)=1. On écrit donc seulement sur strlen(str). Attention, sizeof(str) renvoie la taille du pointeur, quelle que soit la longueur de la chaîne !
Citer : Posté le 06/04/2014 13:52 | #
Ok merci Lephénixnoir, pour le Record et le Score ça fonctionne parfaitement et en plus j'ai compris le code surtout (je n'aime pas trop faire copié-collé si je ne comprend pas mais là tu m'as bien expliqué )
Pour mon tableau ("Grille"), c'est un char, donc dans la fonction je rajoute ça ?
et pour le lire je rajoute ça ?
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)
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)
Citer : Posté le 06/04/2014 13:59 | #
Si tu as un char, tu mets sizeof(char) (ce qui équivaut à 1 octet).
En revanche si tu as un tableau de char, sizeof(tab) ne fonctionnera pas. Puisque tab est un pointeur, sizeof(tab) renvoie constamment la taille du pointeur, la taille d'un adresse mémoire.
Dans ce cas, tu mets sizeof(type)*nbElements. Tu ne peux pas utiliser strlen(tab) si tu ne fais que classer des nombres ; en effet, une chaîne de caractères est terminée au premier octet nul. Du coup, si un de tes nombres vaut zéro, ça plante.
De plus, si ta grille est un tableau de char, alors grille est un pointeur qui pointe sur le premier élément du tableau. Donc la syntaxe est
Et pour lire
Tout simplement, quelle que soit la taille de ton tableau.
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
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)
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)