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 » Problème addin
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Problème addin

Posté le 09/12/2013 13:45

voila, je suis en train de préparer quelques graphisme pour mon prochain jeu et il y a un problème. mon programme peut afficher des lignes mais dès que je mets un GetKeyWait, mon écran est blanc. Comment faire pour que les traits restent pendant que le GetKeyWait fonctionne?

PS, mon programme est en fichier joint

Fichier joint


Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 Suivante
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 11/04/2014 18:24 | #


code::Blocks me met un warnings
||=|34|warning: overflow in implicit constant conversion [-Woverflow]|


sur la ligne ecrit[0]=600&65280;

et il n'écrit rien dans la fichier
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

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


Oui, 65280 utilise le bit de poids fort.
Fais-moi le plaisir de passer en unsigned tous ces shorts.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 12/04/2014 09:56 | #


toujours le meme probleme, voici le code
    unsigned char ecrit[20]={0};
            ecrit[0]=600&65280;
            ecrit[1]=600&255;
            fprintf(ecriture,"%s",ecrit);
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

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


Suis-je bête
ecrit[0] = (600&62580)>>8;

Parce que du coup, ecrit[0] valait 0, ce qui arrêtait l'écriture !
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 12/04/2014 10:23 | #


mais je suis obligé de faire
fputc(ecrit[0],ecriture);
fputc(ecrit[1],ecriture);

car fprintf n'écrit pas quand ecrit[0]=0x00 donc fprintf ne marche pas quand la valeur a mettre en hexadecimal en dessous de 256
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

Citer : Posté le 12/04/2014 10:41 | #


Dans ce cas...
void writefile(void *s, int l, FILE *file)
{
  int i;
  for(i=0;i<l;i++) fpuct(*(s+i),file);
}


Je te laisse jeter un oeil à tout ça, je m'en vais jusqu'à demain soir.
Bon WE.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 12/04/2014 10:50 | #


dans le sdk casio, quand je lis le fichier je fais

while(monstre<104)
    {
        Bfile_ReadFile(recuphandle, &(stockage[0+monstre*15]), 2, curseur);
        curseur+=2;
        Bfile_ReadFile(recuphandle, &(stockage[1+monstre*15]), 30, curseur);
        curseur+=30;
        Bfile_ReadFile(recuphandle, &(stockage[12+monstre*15]), 2, curseur);
        curseur+=2;
        Bfile_ReadFile(recuphandle, &(stockage[13+monstre*15]), 2, curseur);
        curseur+=2;
        Bfile_ReadFile(recuphandle, &(stockage[14+monstre*15]), 1, curseur);
        curseur+=1;
        monstre++;
        ML_rectangle(12, 20, monstre + 11, 30, 1, ML_BLACK, ML_BLACK); // pour la barre de progression
        ML_display_vram();
    }


mais les (stockage[12+monstre*15]),(stockage[13+monstre*15]) et (stockage[14+monstre*15]) n'ont pas les bonnes valeurs

Ajouté le 13/04/2014 à 18:45 :
j'ai trouvé il faut déplacer les bits des valeurs int de 16bits (en faisant >>16)

        Bfile_ReadFile(recuphandle, &(stockage[0+monstre*15]), 2, curseur);
        stockage[0+monstre*15]=stockage[0+monstre*15]>>16;
        curseur+=2;
        Bfile_ReadFile(recuphandle, &(stockage[1+monstre*15]), 30, curseur);
        curseur+=30;
        Bfile_ReadFile(recuphandle, &(stockage[12+monstre*15]), 2, curseur);
        stockage[12+monstre*15]=stockage[12+monstre*15]>>16;
        curseur+=2;
        Bfile_ReadFile(recuphandle, &(stockage[13+monstre*15]), 2, curseur);
        stockage[13+monstre*15]=stockage[13+monstre*15]>>16;
        curseur+=2;
        Bfile_ReadFile(recuphandle, &(stockage[14+monstre*15]), 1, curseur);
        stockage[14+monstre*15]=stockage[14+monstre*15]>>16;
        curseur+=1;

mais ça marche que jusqua monstre=9. Si monstre>9, ça bug
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

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


Alors, au passage, &(tableau[x]), tu peux le remplacer par tableau+x, c'est bien plus lisible.
Le curseur, je ne vois pas pourquoi tu t'embêtes avec, puisque il suit automatiquement. Lorsque que tu lis 2 octets, si tu utilises une deuxième instruction de lecture après, il lira la suite. Pour ça, tu mets -1 en dernier argument.

stockage est un tableau, mais de quoi ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 13/04/2014 20:10 | #


Stockage est un tableau de int
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

Citer : Posté le 13/04/2014 21:07 | #


Je te conseille de prendre un tableau d'unsigned char, c'est plus facile pour mettre les octets un par un.
De plus, tu peux mettre
Bfile_ReadFile(handle,tableau,2,-1); // ATK
Bfile_ReadFile(handle,tableau+2,2,-1); // DEF
Bfile_ReadFile(handle,tableau+4,30,-1); // NOM
Bfile_ReadFile(handle,tableau+34,1,-1); // NIV

par exemple.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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


Mais pour lire comment je ferais?
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

Citer : Posté le 14/04/2014 11:18 | #


Pour afficher les données dans l'exemple ci-dessus:
void *ptr;
int i;

ptr = (short *)(tableau);
atk = *ptr;
ptr = (short *)(tableau+2);
def = *ptr;
ptr = (char *)(tableau+4);
for(i=0;i<30;i++) nom[i] = *(ptr+i);
ptr = (unsigned char *)(tableau+34);
niv = *ptr;

Du coup ça te prend deux instructions par donnée, mais ce n'est pas cher payé.
De plus, le problème de tes int c'est qu'ils prenaient 4 octets chacun alors que certaines données en faisaient 2 voire 1.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

Citer : Posté le 14/04/2014 18:34 | #


j'ai trouvé ce qui allait pas, il y a des 0x0D qui se sont mis je sais pas comment dans le fichier en hexadecimal, ce qui bugué la lecture
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

Citer : Posté le 14/04/2014 18:41 | #


0x0D = Carriage return = fin de ligne.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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


je me demande ou ces 0x0D on bien pu se mettre, dans le code c'est pas prévu

void writefile(unsigned char s[], int l, FILE *file)
{
    int i;
    for(i=0;i<l;i++) fputc(s[i],file);
}

int char2int(unsigned char arg[])
{
    int i = 0;
    int charconverti = 0;

    while(arg[i ])
    {
        charconverti = charconverti * 10 + (arg[i ] - '0');
        i++;
    }

    return charconverti;
}

int main()
{
    FILE* fichier=NULL,*ecriture=NULL;
    unsigned char recup[40]={0};
    int Maxmonstre=0,curseur=0,curseur2=0,caractere=0,mode=0,monstre=0;
    unsigned char ecrit[20]={0};
    printf("YuGiOh csv File Hex Converter \n\n");
    printf("Combien de monstres y a t-il? ");
    scanf("%d",&Maxmonstre);

    fichier=fopen("monstres.csv","r");  //on ouvre le fichier
    ecriture=fopen("codehexa.chf","w+");

    if(fichier!=NULL){
        printf("monstres.csv avec succes\n");
        if(ecriture!=NULL){
            printf("codehexa.csv avec succes\n");
            rewind(fichier);    //on met le curseur à 0
            do{
                do{
                    caractere=fgetc(fichier);
                    while(caractere!=';'){
                        caractere=fgetc(fichier);   //on lit le caractère
                    } //tant que ";" n'est pas lu

                    curseur2=ftell(fichier);    // on prend la position du curseur
                    fseek(fichier,-(curseur2-curseur),SEEK_CUR);   // on remet la curseur au début(au ";" précédent)
                    fgets(recup,curseur2-curseur,fichier);  // on lit ce qu'il y a entre les deux ";"
                    fseek(fichier,curseur2+1,SEEK_SET);   // on remet la curseur après le ";"
                    curseur=curseur2;
                    if(mode==0){
                        ecrit[0]=(monstre&65280)>>8;
                        ecrit[1]=(monstre&255);
                        writefile(ecrit,2,ecriture);
                    }
                    if(mode==1){
                        writefile(recup,30,ecriture);
                    }
                    if(mode==2){
                        ecrit[0]=(char2int(recup)&65280)>>8;
                        ecrit[1]=(char2int(recup)&255);
                        writefile(ecrit,2,ecriture);
                    }
                    if(mode==3){
                        ecrit[0]=(char2int(recup)&65280)>>8;
                        ecrit[1]=(char2int(recup)&255);
                        writefile(ecrit,2,ecriture);
                    }
                    if(mode==4){
                        fputc(char2int(recup),ecriture);
                        curseur+=3;
                        curseur2+=3;
                    }

                    printf("%s \n",recup); //on affiche la chaine
                    mode++;
                    memset(recup,0,40*sizeof(char));
                }while(mode!=5);
                monstre++;
                mode=0;
            }while(Maxmonstre!=monstre);

            printf("\nConversion reussi. Appuyer sur 0 puis Enter ");
            scanf("%d",&Maxmonstre);

            fclose(ecriture);    //on ferme le fichier
        }
        fclose(fichier);    //on ferme le fichier
    }
    return 0;
}


Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

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


Il y a des \n dans le fichier csv d'origine.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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


j'ai bien fait gaffe de les retirer en faisant curseur+3 quand je fini de lire la phrase

Ex:qxfe;azerxe;azxraere;xctryrtcg; \n
il ne lit normalement pas les 3 derniers caractères
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

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


Eh, mais une fin de ligne c'est "0A 0D".
"\n" n'est qu'une séquence d'échappement.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

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


C'est parce que \n est considéré comme un seul caractère. Quand tu l'écris il en fait deux mais il est interprété comme un retour à la ligne.
Lephenixnoir En ligne Administrateur Points: 24239 Défis: 170 Message

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


Sous Linux, "\n" = "0D".
Sous Windows, "\n" = "0A 0D".

D'où certains problèmes de compatibilité des fichiers textes.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Intelligide Hors ligne Membre de CreativeCalc Points: 49 Défis: 5 Message

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


j'ai regardé, mon programme me mets des 0x0D que devant des 0x0A il y a un léger souci là,
Précédente 1, 2, 3 ··· 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 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 69 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