Posté le 09/12/2013 13:45
Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 245 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 23/01/2014 20:09 | #
Ou alors tu met une boucle et tu fait avancer le pointeur en fonction de cette boucle
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
merci a tout le monde pour son soutien
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 !Citer : Posté le 23/01/2014 20:10 | #
je pense que je vais mettre un boucle avec un sizeof(arg)
Citer : Posté le 23/01/2014 20:30 | #
Marchera pas : sizeof(arg) te donnera la taille du pointeur
Fait une boucle, par exemple, l'affichage d'une chaine se fait souvent de cette manière :
(
int i = 0;
while(str[ i])
(
afficherChar(str[ i]);
i++;
)
)
En effet, une chaine se finit toujours par un '\0' qui correspond à un 0 en mémoire
Citer : Posté le 23/01/2014 20:38 | #
Ah ok, donc je fais tourner la boucle tant que arg est différent de 0
Ajouté le 24/01/2014 à 17:39 :
{
int tailletab=0;
int charconverti=0;
int boucle=0;
int boucle2=0;
do{tailletab++;}while(arg[tailletab]);
boucle2=tailletab;
while(boucle!=tailletab){
charconverti+=(arg[boucle]-48)*pow(10,boucle2-1);
boucle++;
boucle2--;
}
return charconverti;
}
voici la fonction pour passer d'u char* à un int, par contre, le nombre à convertir doit faire moins de 4chiffres(donc il doit être en dessous de 9999) je sais pas où ça bug mais ça bug
Ajouté le 24/01/2014 à 18:47 :
j'ai 2 fonctions quasiment identiques
{
int recuphandle=0;
char searchmark[4]={0,0,0,0};
char searchvirgule[1]={0};
int curseur=0;
char savebuffer[30];
int savepos=0;
int saveID=0;
int autreX=11;
int i=0;
FONTCHARACTER PathName[]={'\\','\\','f','l','s','0','\\','M','O','N','S','T','R','E','S','.','c','s','v',0};
recuphandle=Bfile_OpenFile(PathName,_OPENMODE_READ);
Bdisp_AllClr_DDVRAM();
memset(stockage,0,sizeof(stockage));
PopUpWin(5);
ML_rectangle(11,20,115,30,1,ML_BLACK,ML_TRANSPARENT);
Bdisp_PutDisp_DD();
while(saveID!=104){
//on lit cherche [ID]
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
Bfile_ReadFile(recuphandle,searchvirgule,1,curseur);
curseur++;
if(strcmp(searchvirgule,";")==0){savepos =curseur+3;}
}while(strcmp(searchmark,"[ID]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit l'ID
saveID=char2int(savebuffer);
PrintV(10,10,saveID);
Bdisp_PutDisp_DD();
Sleep(2000);
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [NO]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[NO]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit le nom
for(i=0;i!=29;i++){stockage[i+(saveID)*105]=savebuffer[i];}
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [AT]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[AT]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit l'attaque
stockage[31+(saveID)*105]=char2int(savebuffer);
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [DE]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[DE]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit la defense
stockage[32+(saveID)*105]=char2int(savebuffer);
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [NI]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[NI]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit leniveau
stockage[33+(saveID)*105]=char2int(savebuffer);
autreX+=1;
ML_rectangle(11,20,autreX,30,1,ML_BLACK,ML_BLACK);
Bdisp_PutDisp_DD();
}
}
avec comme argument arg[105][34]
et
char searchmark[4]={0,0,0,0};
char searchvirgule[1]={0};
int curseur=0;
char savebuffer[30];
int savepos=0;
int stockage[105][34];
int saveID=0;
int autreX=11;
int i=0;
FONTCHARACTER PathName[]={'\\','\\','f','l','s','0','\\','M','O','N','S','T','R','E','S','.','c','s','v',0};
Bdisp_AllClr_DDVRAM();
recuphandle=Bfile_OpenFile(PathName,_OPENMODE_READ);
memset(stockage,0,sizeof(stockage));
if(recuphandle>=0){
PopUpWin(5);
ML_rectangle(11,20,115,30,1,ML_BLACK,ML_TRANSPARENT);
Bdisp_PutDisp_DD();
while(saveID!=104){
//on lit cherche [ID]
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
Bfile_ReadFile(recuphandle,searchvirgule,1,curseur);
curseur++;
if(strcmp(searchvirgule,";")==0){savepos =curseur+3;}
}while(strcmp(searchmark,"[ID]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit l'ID
saveID=char2int(savebuffer);
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [NO]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[NO]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit le nom
for(i=0;i!=29;i++){stockage[saveID-1][i]=savebuffer[i];}
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [AT]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[AT]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit l'attaque
stockage[saveID-1][31]=char2int(savebuffer);
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [DE]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[DE]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit la defense
stockage[saveID-1][32]=char2int(savebuffer);
memset(savebuffer,0,sizeof(savebuffer));
//on cherche [NI]
curseur +=4;
savepos =curseur;
do{
Bfile_ReadFile(recuphandle,searchmark,4,curseur);
curseur++;
}while(strcmp(searchmark,"[NI]") !=0);
Bfile_ReadFile(recuphandle,savebuffer,curseur-savepos-1,savepos);//on lit leniveau
stockage[saveID-1][33]=char2int(savebuffer);
autreX+=1;
ML_rectangle(11,20,autreX,30,1,ML_BLACK,ML_BLACK);
Bdisp_PutDisp_DD();
}
locate(1,1);
Print("succes");
for(i=0;i!=29;i++){savebuffer[i]=stockage[9][i];}
Bdisp_AllClr_DDVRAM();
PrintV(5,5,stockage[9][31]);
PrintV(5,15,stockage[9][32]);
PrintV(5,25,stockage[9][33]);
locate(1,6);
Print(savebuffer);
là, deuxième solution marche, la barre de progression est nickel, pas de prob, par contre la 1ere solution qui doit faire le même effet me donne 5111111107 comme 1ere ID alors que c'est 1 le premier ID du fichier, je suis compètement perdu
Citer : Posté le 24/01/2014 19:24 | #
Fait voir un exemple d'appel de la fonction, j'ai une idée d'où ca peut venir
Citer : Posté le 24/01/2014 19:29 | #
int buffer[105][34];
loadingbuffercarte(buffer);
Citer : Posté le 24/01/2014 20:50 | #
Ce que je ferai :
Fichier texte :
2;monstre 2;15;25;35
3;monstre 3;2;3;4
// ID;nom;att;def;niv
structure de la bdd de monstres :
monstres[ID][0] = ID
monstres[ID][1] -> monstres[ID][11] = nom;
monstres[ID][12] = attaque
monstres[ID][12] = défense
monstres[ID][12] = niveau
fonction d'initialisation :
{
int recuphandle = 0;
char *buffer = NULL;
char buffer2[40];
int type = 0;
int curseur = 0;
int curseur2 = 0;
int tailleFichier;
int monstre = 0;
FONTCHARACTER PathName[]={'\\','\\','f','l','s','0','\\','M','O','N','S','T','R','E','S','.','c','s','v',0};
recuphandle = Bfile_OpenFile(PathName,_OPENMODE_READ);
ML_clear_vram();
PopUpWin(5);
ML_rectangle(11,20,115,30,1,ML_BLACK,ML_TRANSPARENT);
ML_display_vram();
tailleFichier = Bfile_GetFileSize(recuphandle); // on récupère la taille du fichier
buffer = malloc(tailleFichier); // on copie le fichier dans le buffer
Bfile_ReadFile(recuphandle, buffer, tailleFichier, 0);
while(curseur < tailleFichier)
{
if(buffer[curseur] == ';' || buffer[curseur] == '\n') // si on tombe sur un ; ou un retour à la ligne
{
memcpy(buffer2, &buffer[curseur2], (curseur - curseur2) * sizeof(char)); // on copie ce qu'il y a entre deux points virgules
switch(mode)
{
case 0 : // si on est sur l'ID
stockage[monstre][0] = char2int(buffer2); // on copie la valeur au bon endroit
break;
case 1 : // si on est sur le nom
memcpy(&(stockage[monstre][1]), buffer2, 40 * sizeof(char)); // on copie le nom dans le tableau
break;
case 3 : // si on est sur l'attaque
stockage[monstre][12] = char2int(buffer2); // on copie la valeur au bon endroit
break;
case 4 : // si on est sur la défense
stockage[monstre][13] = char2int(buffer2); // on copie la valeur au bon endroit
break;
case 5 : // si on est sur le niveau
stockage[monstre][14] = char2int(buffer2); // on copie la valeur au bon endroit
break;
}
memset(buffer2, 0, 40 * sizeof(char)); // on réinitialise le buffer2
curseur2 = curseur + 1; // et la position du dernier curseur
mode++;
if(mode > 5) mode = 0; // on change le type de donnée
}
if(buffer[curseur] == '\n') monstre++; // on change de monstre
ML_rectangle(11, 20, monstre + 11, 30, 1, ML_BLACK, ML_BLACK); // pour la barre de progression
ML_display_vram();
}
free(buffer); // on libère la mémoire
locate(1,1);
Print("succes");
}
comment l'appeler :
loadingbuffercarte(monstres);
J'ai pas testé, mais ça devrait marcher (si j'ai pas oublié un ; quelque part). Au pire, regarde les commentaires, il doit y en avoir presque un par ligne
Citer : Posté le 25/01/2014 09:57 | #
Okay, j'ai compris même s'il y a quelques erreurs (par ex: tu n'as pas déclaré int mode=0; ou tu as mis attaque,defense et niveau dans la même case)
Citer : Posté le 25/01/2014 10:21 | #
Si t'as compris, c'est le principal
Citer : Posté le 25/01/2014 10:29 | #
et pour la fonction char2int? je sais ou il est le problème
Citer : Posté le 25/01/2014 10:33 | #
Teste ça :
{
int i = 0;
int charconverti = 0;
while(arg[i ])
{
charconverti = charconverti * 10 + (arg[i ] - '0');
i++;
}
return charconverti;
}
Ajouté le 25/01/2014 à 10:35 :
Au passage, dans la fonction que j'ai faite dans mon pavé, met les buffer en unsigned char, ça évitera des potentiels problèmes de compilation.
Citer : Posté le 25/01/2014 10:47 | #
heu, mon compilo me dit
pour la ligne
avec unsigned char* buffer=NULL;
Citer : Posté le 25/01/2014 11:02 | #
Chelou ça...
Essaye de faire unsigned char *buffer; on sais jamais...
et buffer = (void*)malloc(tailleFichier);
Citer : Posté le 25/01/2014 11:30 | #
ça marche pas!! la barre de progression reste bloqué et y a rien qui se passe, j'ai mis des breakpoints et tout ce qui a dans if(buffer[curseur] == ';' || buffer[curseur] == '\n') ne se lancent pas.
Tu est sur qu'on peut faire buffer[curseur]? parce que à l'initialisation, c'est juste un pointeur unsigned char *buffer; ,pas un tableau
Citer : Posté le 25/01/2014 11:42 | #
Oui, j'en suis sur.
En gros, faire
// est égal à
*(buffer + curseur) = 0;
Et le malloc fait comme si on créait un méga tableau de char.
En gros, quand tu fait
// ce qui se passe dans le processeur :
char *tableau = malloc(10 * sizeof(unsigned char)
C'est la base des tableaux (et des pointeurs)
Vérifie que tu as bien bien des espaces entre les * et sizeof()
Citer : Posté le 25/01/2014 11:45 | #
buffer = (void*)malloc(tailleFichier); // on copie le fichier dans le buffer
il y a pas de * ni de sizeof(). :huh:
Citer : Posté le 25/01/2014 11:48 | #
Ben il n'y en pas besoin... le sizeof permet d'avoir la taille d'un tableau, mais tu t'en fout, tu as déjà la taille que tu veux avec tailleFichier, et * ne sert que pour les pointeur, et je suppose que buffer en est un.
J'avais déjà eu le coup du pointeur qui bugue avec malloc et NULL, je sais plus trop comment j'avais résolu, je vais regarder
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
merci a tout le monde pour son soutien
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 !Citer : Posté le 25/01/2014 11:53 | #
Mais alors où est le problème? j'ai pensais que c'était if(buffer[curseur] == ';' || buffer[curseur] == '\n')
j'ai donc fait:
mais mon compilo veut pas C:\Users\Yoann\Documents\CASIO\fx-9860G SDK\yugioh plateau\systemdeux.c(476) : C2201 (E) Cannot convert parameter "1"
C:\Users\Yoann\Documents\CASIO\fx-9860G SDK\yugioh plateau\systemdeux.c(476) : C2201 (E) Cannot convert parameter "1"
Citer : Posté le 25/01/2014 11:55 | #
Caste le ";" en char*, c'est peut-etre ca
if(strcmp(buffer[curseur],(char*)";")==0 || strcmp(buffer[curseur],(char*)"\n")==0)
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
merci a tout le monde pour son soutien
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 !Citer : Posté le 25/01/2014 12:00 | #
non, c'est buffer[curseur] qui déconne. même en faisant if(strcmp(buffer[curseur],(char*)";")==0 || strcmp(buffer[curseur],(char*)"\n")==0) y a rien qui change
Citer : Posté le 25/01/2014 12:01 | #
Déjà pour un caractère, il faut mettre des 'a' et non "a" :
'a' = 0x61
"a" = pointeur sur un tableau {'a', '\0'}