Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » Problèmes SDK divers et variés
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Problèmes SDK divers et variés

Posté le 26/10/2013 11:00

Salut j'ai fait un petit programme mais je comprends pas pourquoi la fonction Print ne veut pas afficher la chaine que je lui demande ...

Le code
Cliquer pour enrouler
#include "fxlib.h"
#include "stdio.h"

unsigned int key;
int caractere, caractere2;
char chaine[21];
char ident[21];
char domaine[30];
char mdp[30];
char destinataire[40];
char sujet[30];
char corps[50];


int AddIn_main(int isAppli, unsigned short OptionNum){
    Bdisp_AllClr_DDVRAM();
    demmarage();
    identif();
    
    return 1;
}

demmarage(){
    int key;
    Bdisp_AllClr_DDVRAM();
    PrintMini(80,58,"Version 1.0",0);
    Bdisp_DrawLineVRAM(10,10,10,50);
    Bdisp_DrawLineVRAM(10,50,117,50);
    Bdisp_DrawLineVRAM(117,50,117,10);
    Bdisp_DrawLineVRAM(10,10,117,10);
    Bdisp_DrawLineVRAM(10,10,63,25);
    Bdisp_DrawLineVRAM(117,10,63,25);
    locate(7,5);
    Print("Messagerie");
    do{
        GetKey(&key);
    } while(key != 30004);
    
    Bdisp_AllClr_DDVRAM();
}

identif(){
    Bdisp_AllClr_DDVRAM();
    locate(1,1);
    Print("Identifiant:");
    locate(1,2);
    Print("+------------------+");
    locate(1,3);
    Print("|                  |");
    locate(1,4);
    Print("+------------------+");
    remplichaine();
    
    caractere2=0;
    do{
        caractere2++;
        ident[caractere2] = chaine[caractere2];
    } while(caractere2+1 != caractere);
    ========================== > ICI < ========
    locate(2,3);
    Print(ident);
    do{
        GetKey(&key);
    } while(key != 30004);
    
}

remplichaine(){
    caractere=0;
    do{
        caractere++;
    ======================= > ET ICI < ========
        locate(2,3);
        Print(chaine);
        GetKey(&key);
        //==========Conversion==========
        if (key==48)key= 71;
        if (key==46)key= 61;
        if (key==15)key= 51;
        if (key==135)key= 41;
        if (key==30004)key= 31;
        if (key==49)key= 72;
        if (key==50)key= 62;
        if (key==51)key= 52;
        if (key==137)key= 42;
        if (key==153)key= 32;
        if (key==52)key= 73;
        if (key==53)key= 63;
        if (key==54)key= 53;
        if (key==169)key= 43;
        if (key==185)key= 33;
        if (key==55)key= 74;
        if (key==56)key= 64;
        if (key==57)key= 54;
        if (key==30025)key= 44;
        if (key==30015)key= 34;
        if (key==187)key= 75;
        if (key==30046)key= 65;
        if (key==40)key= 55;
        if (key==41)key= 45;
        if (key==44)key= 35;
        if (key==14)key= 25;
        if (key==30001)key= 76;
        if (key==149)key= 66;
        if (key==133)key= 56;
        if (key==129)key= 46;
        if (key==130)key= 36;
        if (key==131)key= 26;
        if (key==30007)key= 77;
        if (key==205)key= 67;
        if (key==168)key= 57;
        if (key==30002)key= 47;
        if (key==30023)key= 37;
        if (key==30021)key= 27;
        if (key==30006)key= 78;
        if (key==30008)key= 68;
        if (key==30016)key= 58;
        if (key==30020)key= 38;
        if (key==30018)key= 28;
        if (key==30009)key= 79;
        if (key==30010)key= 69;
        if (key==30011)key= 59;
        if (key==30012)key= 49;
        if (key==30013)key= 39;
        if (key==30014)key= 29;
        //==============================
        if(key==31)caractere=19;
        if(key==76)chaine[caractere]='a';
        if(key==66)chaine[caractere]='b';
        if(key==56)chaine[caractere]='c';
        if(key==46)chaine[caractere]='d';
        if(key==36)chaine[caractere]='e';
        if(key==26)chaine[caractere]='f';
        if(key==75)chaine[caractere]='g';
        if(key==65)chaine[caractere]='h';
        if(key==55)chaine[caractere]='i';
        if(key==45)chaine[caractere]='j';
        if(key==35)chaine[caractere]='k';
        if(key==25)chaine[caractere]='l';
        if(key==74)chaine[caractere]='m';
        if(key==64)chaine[caractere]='n';
        if(key==54)chaine[caractere]='o';
        if(key==73)chaine[caractere]='p';
        if(key==63)chaine[caractere]='q';
        if(key==53)chaine[caractere]='r';
        if(key==43)chaine[caractere]='s';
        if(key==33)chaine[caractere]='t';
        if(key==72)chaine[caractere]='u';
        if(key==62)chaine[caractere]='v';
        if(key==52)chaine[caractere]='w';
        if(key==42)chaine[caractere]='x';
        if(key==32)chaine[caractere]='y';
        if(key==71)chaine[caractere]='z';
        if(key==61)chaine[caractere]='.';
        if(key==57)chaine[caractere]='@';
    } while(caractere!=19);
    
    if(key==31)chaine[caractere]='\0';
    if(key!=31)chaine[caractere+1]='\0';
}


#pragma section _BR_Size
unsigned long BR_Size;
#pragma section
#pragma section _TOP
int InitializeSystem(int isAppli, unsigned short OptionNum){return INIT_ADDIN_APPLICATION(isAppli, OptionNum);}
#pragma section


la chaine ident fait 21 caracteres


Précédente 1, 2, 3 ··· 10 ··· 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 Suivante
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/02/2015 13:03 | #


Bon alors, une fois n'est pas coutume, j'ai surement une erreur du meme type lors de la liberation de la memoire...
J'ai le SE ou un reboot au moment de liberer (le texte n'apparait pas).
#include "fxlib.h"
#include "fight.h"
#include "draw.h"
#include "memory.h"
#include "MonochromeLib.h"
#include "key.h"

#include <stdlib.h>
#include <stdio.h>

void Fight_start() //-- ok
{
    Map map;
    Player *players = NULL;
    int nbrPlayers = -1;
    int i, j;
    
    char debug[50];
    
    // Load
    Fight_worldLoad(&map, &players, &nbrPlayers);
    
    // Draw
    ML_clear_vram();
    Draw_mapFight(map);
    
    // Get down players
    Fight_playerDown(map, players, nbrPlayers);
    
    // Play
    Fight_play(map, players, nbrPlayers);
    
    Fight_quit(&map, &players);
    
    Sleep(250);
}

void Fight_worldLoad(Map *map, Player **players, int *nbrPlayers) //-- ok
{
    int mapId;
    int difficulty, mapMode;
    
    Fight_readOptions(&difficulty, &mapMode);
    
    if(mapMode)
        mapId = mapMode;
    else
        mapId = (rand()%Fight_nbrOfMap())+1;
    
    Fight_mapLoad(mapId, map);
    *nbrPlayers = Fight_playerLoad(mapId, players);
}

int Fight_mapLoad(int id, Map *map) //-- ok for fixed size (16*8)
{
    char fileName[50];
    int handle;
    int i, j;
    
    sprintf(fileName, "\\\\fls0\\SNOWF\\ff%d.map", id);
    
    if(!memory_exists(fileName))
    {
        ML_clear_vram();
        Draw_printText("Error loading map.\nFile missing:", 20);
        Draw_textCenter(fileName, 40);
        ML_display_vram();
        Sleep(5000);
        return -1;
    }
    
    map->lenght = 16;
    map->height = 8;
    
    map->tiles = calloc(map->height,sizeof(char *));
    for(i=0; i<map->height; i++)
    {
        map->tiles[i] = calloc(map->lenght,sizeof(char));
        
        handle = memory_openfile(fileName, _OPENMODE_READ);
        memory_readfile(handle, (void *)map->tiles[i], (map->lenght)*sizeof(char), (map->lenght)*sizeof(char)*i);
        memory_closefile(handle);
    }
    return 1;
}

int Fight_playerLoad(int id, Player **players) //-- ok LePhe<3
{
    char fileName[50];
    int nbrPlayers = -1;
    int handle;
    int i, j;
    
    sprintf(fileName, "\\\\fls0\\SNOWF\\ff%d.pla", id);
    
    if(!memory_exists(fileName))
    {
        ML_clear_vram();
        Draw_printText("Error loading player.\nFile missing:", 20);
        Draw_textCenter(fileName, 40);
        ML_display_vram();
        Sleep(5000);
        return -1;
    }
    
    handle = memory_openfile(fileName, _OPENMODE_READ);
    
    memory_readfile(handle, (void *)&nbrPlayers, sizeof(int), -1);
    *players = calloc(nbrPlayers, sizeof(Player));
    for(i=0; i<nbrPlayers; i++)
    {
        (*players)[i].life = 100;
        (*players)[i].team = i%2;
        memory_readfile(handle, (void *)(*players)[i].pos, 2*sizeof(int), -1);
    }
    
    memory_closefile(handle);
    return nbrPlayers;
}

void Fight_quit(Map *map, Player **players) //-- ok
{
    int i;
    
    for(i=0; i<map->height; i++)
        free(map->tiles[i]);
    free(map->tiles);
    free(players);
    
    ML_clear_vram();
    PrintMini(0, 0, "Free() Done", 0);
    ML_display_vram();
    Sleep(5000);
}

Donc tout se passe bien jusqu'a ce que je revienne dans Fight_start() apres Fight_play()...
Lephenixnoir Hors ligne Administrateur Points: 21329 Défis: 149 Message

Citer : Posté le 13/02/2015 13:14 | #


Juste pour ton information personnelle, la longueur ça s'écrit « length ».
Sinon, évite d'utiliser des key_down() à tout bout de champ et sers-toi de GetKey() quand c'est possible, tu économises de la puissance et de la batterie.

Ta libération de players peut utiliser une copie du pointeur, là ce qu'on veut c'est l'adresse des données pas celle de la variable. Au lieu de libérer les données à l'adresse players, là tu libères players (i.e la variable au lieu des données sur lesquelles elle pointe). Change ton argument.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/02/2015 13:20 | #


C'est la fatigue ...:whistle:
Oui mais le probleme avec GetKey c'est que si tu appuis sur MENU, ca te libere pas la memoire si ?
Lephenixnoir Hors ligne Administrateur Points: 21329 Défis: 149 Message

Citer : Posté le 13/02/2015 13:21 | #


Faut utiliser SetQuitHandler() qui te permet d'appeler une fonction quand l'application est quittée. Cette fonction n'étant appelée que lorsque la nouvelle application démarre, si l'utilisateur retourne dans ton add-in en passant par le menu la fonction n'est pas appelée donc les données ne sont pas libérées.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/02/2015 13:24 | #


Oui mais du coup, si il quitte avant que la mémoire soit allouée (par exemple dans les menus), le free() ne frira rien du tout

Ajouté le 13/02/2015 à 13:28 :
Ok j'ai rien dit, je pensait que free() plantait si son argument était null.
Sinon j'ai pas bien compris ce que tu m'as dit, faut que je fasse ca:
Fight_quit(&map, players);

void Fight_quit(Map *map, Player *players) //-- ok
{
    int i;
    
    for(i=0; i<map->height; i++)
        free(map->tiles[i]);
    free(map->tiles);
    free(players);
    
    ML_clear_vram();
    PrintMini(0, 0, "Free() Done", 0);
    ML_display_vram();
    Sleep(5000);
}

Lephenixnoir Hors ligne Administrateur Points: 21329 Défis: 149 Message

Citer : Posté le 13/02/2015 13:55 | #


Oui, et tu envoies players et non &players à la fonction.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/02/2015 14:01 | #


Alors du coup, l'erreur est du a quelque chose avant l'appel a Fight_quit() qui fait planter les SH4...

Ajouté le 13/02/2015 à 14:24 :
Je suis confus...
Je comprends pas en quoi un return peut me faire planter ... Et pourtant, en y allant pas a pas c'est tout ce que je trouve.
void Fight_play(Map map, Player *players, int nbrPlayers) //-- test it ! -- problem jump -- problem ball + ground
{
    int turn = -1;
    int distMade, i, jump;
    Snowball ball;
    char buffer[50];
    
    int handle;
    char names[2][21] = {0};
    
    // Load names
    // Player 1
    handle = memory_openfile("\\\\fls0\\SNOWF\\name.txt", _OPENMODE_READ);
    memory_readfile(handle, (void *)names[0], 20*sizeof(char), 0);
    memory_closefile(handle);
    // Player 2
    ML_clear_vram();
    sprintf(buffer, "\nHey guys,\nbefore starting the battle, what's your name dear guest of %s ?", names[0]);
    Draw_printText(buffer, 25);
    PrintMini(10, 50, "GUEST: ", 0);
    InputString(names[1], 19, 40, 50);
    ML_clear_vram();
    sprintf(buffer, "Nice to meet you %s !\nBe careful, %s is a pro player at SBF...", names[1], names[0]);
    Draw_printText(buffer, 25);
    Draw_textCenter("Press [ExE]", 50);
    ML_display_vram();
    while(!key_down(K_EXE))
        Sleep(100);
    while(key_down(K_EXE));
    
    // Draw map
    ML_clear_vram();
    Draw_mapFight(map);
    SaveDisp(2);
    
    // Engine
    while(1)
    {
        turn = (turn+1)%nbrPlayers;
        
        if(players[turn].life > 0)
        {
            
            RestoreDisp(2);
            Draw_playersFight(players, nbrPlayers);
            ML_rectangle(30, 28, 98, 37, 1, ML_CHECKER, ML_WHITE);
            ML_rectangle(29, 27, 99, 38, 1, ML_BLACK, ML_TRANSPARENT);
            sprintf(buffer, "%s turn", names[players[turn].team]);
            Draw_textCenter(buffer, 30);
            ML_display_vram();
            while(!key_down(K_EXE))
                Sleep(100);
            while(key_down(K_EXE));
    
            // MOVE
            distMade = 0;
            jump = 0;
            do
            {
                // Draw
                RestoreDisp(2);
                Draw_selectedPlayer(players[turn], MAX_DEP-distMade);
                if(!jump)
                    Fight_playerDown(map, players, nbrPlayers);
                else
                    Draw_playersFight(players, nbrPlayers);
                ML_display_vram();
                
                // Keys
                // Goto shoot
                if(key_down(K_EXE) && !jump || players[turn].life<=0)
                {
                    while(key_down(K_EXE));
                    break;
                }
                // Quit
                if(key_down(K_EXIT))
                {
                    while(key_down(K_EXIT));
                    return;
                }
                // Left
                if(key_down(K_LEFT)  &&  players[turn].pos[0] > 0  &&  map.tiles[(int)((players[turn].pos[1])/8)][(int)((players[turn].pos[0])/8)] == 0)
                {
                    distMade++;
                    players[turn].pos[0]--;
                }
                // Right
                if(key_down(K_RIGHT)  &&  (int)((players[turn].pos[0]+8)/8) < map.length   &&  map.tiles[(int)((players[turn].pos[1])/8)][(int)((players[turn].pos[0]+6)/8)] == 0)
                {
                    distMade++;
                    players[turn].pos[0]++;
                }
                // Up
                if(jump)
                {
                    jump--;
                    if(players[turn].pos[1] > 1)
                    {
                        if(map.tiles[(int)((players[turn].pos[1]-8)/8)][(int)((players[turn].pos[0])/8)] == 0)
                            players[turn].pos[1]--;
                    }
                }
                else if(key_down(K_UP)  &&  map.tiles[(int)((players[turn].pos[1]-8)/8)][(int)((players[turn].pos[0])/8)] == 0)
                {
                    jump = 10;
                }
                
                Sleep(100);
            }while(distMade < MAX_DEP);
            
            if(players[turn].life > 0)
            {
                RestoreDisp(2);
                Draw_selectedPlayer(players[turn], MAX_DEP-distMade);
                Fight_playerDown(map, players, nbrPlayers);
                
                // SHOOT
                SaveDisp(1);
                ball.pos[0] = (float)players[turn].pos[0] + (players[turn].pos[0]>64 ? -1. : 7.);
                ball.pos[1] = (float)players[turn].pos[1] + 4.;
                ball.speed[0] = (players[turn].pos[0]>64 ? -1. : 1.);
                ball.speed[1] = -1.5;
                do
                {
                    // Draw
                    RestoreDisp(1);
                    Draw_traject(ball);
                    ML_display_vram();
                    
                    // Keys
                    if(key_down(K_EXIT))
                    {
                        while(key_down(K_EXIT));
                        return;
                    }
                    if(key_down(K_LEFT) && ball.speed[0] > -MAX_SPEED)
                    {
                        ball.speed[0] -= .05;
                        if(ball.speed[0] < 0.)
                            ball.pos[0] = (float)players[turn].pos[0] - 1.;
                    }
                    if(key_down(K_RIGHT) && ball.speed[0] < MAX_SPEED)
                    {
                        ball.speed[0] += .05;
                        if(ball.speed[0] > 0.)
                            ball.pos[0] = (float)players[turn].pos[0] + 7.;
                    }
                    if(key_down(K_UP) && ball.speed[1] > -MAX_SPEED)
                    {
                        ball.speed[1] -= .05;
                    }
                    if(key_down(K_DOWN) && ball.speed[1] < MAX_SPEED)
                    {
                        ball.speed[1] += .05;
                    }
                    if(key_down(K_EXE))
                    {
                        while(key_down(K_EXE));
                        break;
                    }
                    
                    Sleep(50);
                }while(1);
                    
                ball.flying = 1;
                do
                {
                    // Draw
                    RestoreDisp(1);
                    ML_point((int)(ball.pos[0]+.5), (int)(ball.pos[1]+.5), 3, ML_BLACK);
                    ML_display_vram();
                    
                    // Ball position
                    ball.pos[0] += ball.speed[0]/2.;
                    ball.pos[1] += ball.speed[1]/2.;
                    ball.speed[1] += .05;
                    
                    // Quit
                    if(key_down(K_EXIT))
                    {
                        while(key_down(K_EXIT));
                        return;
                    }
                    
                    // Player collision
                    for(i=0; i<nbrPlayers; i++)
                    {
                        if( ball.pos[0]+1.>=(float)players[i].pos[0] && ball.pos[0]-1.<=(float)players[i].pos[0]+5.  &&  ball.pos[1]+1.>=(float)players[i].pos[1] && ball.pos[1]-1.<=(float)players[i].pos[1]+8.)
                        {
                            if(ball.pos[1]+1.>=(float)players[i].pos[1]+3.)
                                players[i].life -= 35; // Bodyshoot
                            else
                                players[i].life -= 70; // Headshoot
                            
                            if(players[i].life < 0)
                                players[i].life = 0;
                            ball.flying = 0;
                        }
                    }
                    
                    // Ground collision
                    if((int)((ball.pos[0] + 1.)/8.) > map.length   ||  ((ball.pos[0] - 1.)/8.) < 0.  ||  map.tiles[(int)((ball.pos[1] + (ball.speed[0]>0. ? 1. : -1.))/8.)][(int)((ball.pos[0] + (ball.speed[0]>0. ? 1. : -1.))/8.)] != 0)
                        ball.flying = 0;
                    
                    Sleep(BALL_SPEED);
                }while(ball.flying);
            }
        }
        
        if(Fight_checkPlayers(players, nbrPlayers))
            break;
    }
    
    // End of game
    ML_clear_vram();
    Draw_mapFight(map);
    Draw_playersFight(players, nbrPlayers);
    
    ML_rectangle(30, 28, 98, 37, 1, ML_CHECKER, ML_WHITE);
    ML_rectangle(29, 27, 99, 38, 1, ML_BLACK, ML_TRANSPARENT);
    sprintf(buffer, "%s wins !", names[Fight_checkPlayers(players, nbrPlayers)-1]);
    Draw_textCenter(buffer, 30);
    ML_display_vram();
    while(!key_down(K_EXE))
        Sleep(100);
    while(key_down(K_EXE));
}

N'importe ou que je mette un return dans ma fonction, elle plante sur SH4 mais pas sur SH3 ...
Ca m'enerfe
Lephenixnoir Hors ligne Administrateur Points: 21329 Défis: 149 Message

Citer : Posté le 13/02/2015 14:38 | #


Theprog a écrit :
Je comprends pas en quoi un return peut me faire planter ...

On appelle couramment ça des effets de bords... si tu enlèves une instruction, par exemple un printf(), le code fonctionne mais si tu le laisses ça bugge.
Et pourtant ce n'est pas cette instruction qui est la cause du bug. Le problème se trouve ailleurs... c'est très long à debugger parce que même quand on croit avoir cerné le problème on est souvent tombé à côté...

Normalement quand on code proprement, de manière structurée, clean, etc. au possible on n'en a pas. Enfin c'est surtout théorique, j'en ai moi-même eu des bien énervants parce que je libérais un pointeur au mauvais moment.

Donc le plus simple c'est de reparcourir tout le code à la recherche d'effets non voulus, ou, mieux, de le réécrire... mais c'est plus long (n'empêche que je le fais souvent :P ).
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 13/02/2015 16:47 | #


Ha oui ca doit etre ca ...
Apres 20h de recodage intensif, TProg est de retour:
C'est bon ca marche, ce satané SDK est vraiment pourrit, c'est surement lui qui a tout fait bugger et certainement pas moi

En realité, TProg a trouvé son erreur au bout de 3 minutes:
char buffer[50];
sprintf(buffer, "\nHey guys,\nbefore starting the battle, what's your name dear guest of %s ?", names[0]);

Que je suis con ...


Ajouté le 17/02/2015 à 01:01 :
Bonsoir,
J'ai un "freeze" avec ce code et GetKey():
void AGBS_MenuJeu()
{
    // SPRITES
    const unsigned char fond[]={
        
        0x0,0x0,0x0,0x0,0x0,0x78,0x0,0x0,
    };
    const unsigned char oeuf[]={
        0x6,0x0,
        0x1f,0x80,
    };
    
    unsigned int key;
    int x, y;
    
    x = 64;
    y = 32;
    
    do
    {
        // AFFICHAGE
        ML_clear_vram();
        ML_bmp_or(fond, 0, 0, 128, 64);
        ML_bmp_or(oeuf, x-6, y-7, 12, 14);
        ML_display_vram();
        
        // Gauche
        if(key_down(K_LEFT) && x>6)
            x--;
        // Droite
        if(key_down(K_RIGHT) && x<122)
            x++;
        // Haut
        if(key_down(K_UP) && y>7)
            y--;
        // Bas
        if(key_down(K_DOWN) && y<57)
            y++;
        // Retour
        if(key_down(K_EXIT))
        {
            while(key_down(K_EXIT))
                Sleep(100);
            return;
        }
        // Exe
        if(key_down(K_EXE))
        {
            while(key_down(K_EXE))
                Sleep(100);
            
            if(x>5 && y>4  &&  x<36 && y<35)
                return;
            if(x>28 && y>33  &&  x<59 && y<64)
                AGBS_Monde1();
            if(x>54 && y>1  &&  x<85 && y<32)
                AGBS_Monde2();
            if(x>88 && y>15  &&  x<119 && y<46)
                AGBS_Monde3();
        }
        Sleep(15);
    }while(1);
}

void AGBS_Monde1()
{
    // SPRITES
    const unsigned char fond[]={
        0x0,0x0,0x0,0x0,
    };
    const unsigned char pointeur[]={
        0x0,0x0,0x0,0x0,
    };
    const unsigned char cadena[]={
        0xff,
    };

    unsigned int key = 0;
    int xPointeur, nbr;
    
    xPointeur = 0;
    
    do
    {
        // AFFICHAGE
        ML_clear_vram();
        ML_bmp_or_cl(fond, -7*xPointeur, 0, 191, 64);
        ML_bmp_or_cl(pointeur, xPointeur*12+1, -3, 16, 18);
        for(nbr = data[1]; nbr<8; nbr++)
            ML_bmp_xor_cl(cadena, 43+19*nbr-7*xPointeur, 23, 8, 7);
        
        
        // GESTION DES TOUCHES
        GetKey(&key);
        
        switch(key)
        {
            case KEY_CTRL_EXIT:
                if(xPointeur != 0)
                    xPointeur = 0;
                else
                    return;
                break;
            case KEY_CTRL_LEFT:
                if(xPointeur>0)
                    xPointeur--;
                break;
            case KEY_CTRL_RIGHT:
                if(xPointeur<data[1]+1)
                    xPointeur++;
                break;
            case KEY_CTRL_EXE:
                while(key_down(K_EXE))
                    Sleep(100);
                if(xPointeur)
                    level(1, xPointeur-1);
                else
                    return;
        }
    }while(1);
}

Je m'explique, lorque je passe de AGBS_MenuJeu() a AGBS_Monde1(), j'arrive dans Monde1. Le fond s'affiche, avec les breakpoint, je vois que le programme s'arrete au GetKey() et donc rentre dedans. Le soucis c'est qu'a se moment la, je peux appuyer sur toutes les touches rien ne se passe sauf avec la touche EXE...
Et le comble c'est qu'en lancant Monde1 sans passer par MenuJeu, tout se passe bien...
Bref je comprend pas.
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 17/02/2015 02:29 | #


Si je puis me permettre, Je me demande encore si qui que ce soit comprend le SDK...
Enfin, bon.... Je te propose d'essayer en passant d'une façon alternée... il doit pas apprécier le menu pour une raison ou une autre...
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Dark storm Hors ligne Labélisateur Points: 11549 Défis: 176 Message

Citer : Posté le 17/02/2015 10:10 | #


J'ai pas jeté un coup d'œil suffisant pour trouver l'origine du problème, mais j'insiste : virez moi les 50 lignes de sprites dans vos code ! Mettez la déclaration, mais 3 valeurs dans le tableau suffisent...

Ajouté le 17/02/2015 à 10:10 :
Ça devient illisible, tu m'étonne qu'on trouve pas les problèmes
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 17/02/2015 10:21 | #


Ou alors faites comme moi : mettez tout sur une seule ligne !

Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 17/02/2015 10:40 | #


Desole j'ai pas l'habitude vu qu'avec Notepad++ ils sont cachés ...
J'ai edité
Dark storm Hors ligne Labélisateur Points: 11549 Défis: 176 Message

Citer : Posté le 17/02/2015 12:45 | #


Sinon, c'est pas un problème de touche en mémoire ? Je sais que sur MS2, si on joue en appuyant sur EXE, lors de la mise en pause ça quitte tout de suite car la touche EXE est dans le buffer du GetKey.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 17/02/2015 13:45 | #


Ca correspondrait a ca...
Mais du coup comment faut faire pour l'eviter ?
Dark storm Hors ligne Labélisateur Points: 11549 Défis: 176 Message

Citer : Posté le 17/02/2015 15:18 | #


Utiliser le syscall KBD_PutKey
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 15/03/2015 16:29 | #


J'ai un problème : tout d'abord, j'ai lancé casionj.g1w et ca plantait direct (alors qu'il voulait bien ouvrir tout mes autres .g1w ...) j'ai donc ouvert un autre projet pour copier le g1w et le mettre a la place de celui qui marchait pas, et a présent le SDK accepte enfin de l'ouvrir sans planter ! Or il m'indique quelques erreurs qui n'en sont pas mais osef. le problème est qu'il ne veut pas l'émuler, bien que je compile 2 sec avant : No build project could be find in the file et si quelqu'un a déjà eu ce problème ca m'interresse car la je suis obligé de passer par prendre le g1a compilé et le mettre dans le fichier SDCard d'un autre jeu pour enfin l'émuler

Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Lephenixnoir Hors ligne Administrateur Points: 21329 Défis: 149 Message

Citer : Posté le 15/03/2015 16:41 | #


Reconfigure le projet, t'as fait des conneries tout le long >_<
Darkysun Hors ligne Membre Points: 1747 Défis: 52 Message

Citer : Posté le 15/03/2015 16:47 | #


Alors c'est super bizarre... j'ai fait project-> EDIT et la je vais dans paths j'ai vu qu'il indiquait pour sources SRC un fichier qui n'existait pas du coup j'ai changé le path et la ca marche je n'ai rien compris
Si je ne réponds pas à un post depuis trop longtemps : envoyez-moi un message pour me le rappeler !




Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 22/03/2015 21:45 | #


Une fois n'est pas coutume, j'ai encore un bordel avec mes tableaux de structures...
Voici le code:
// Dans le main.c
Block *blocks = NULL;
Variable *variables = NULL;

// Dnas le .h
typedef struct
{
    char name[11];
    char type[11];
    double value;
} Variable;

// Dans edit.c
extern Block *blocks;
static int nbrVariables;
extern Variable *variables;

void edit_Algo(AlgoCaract algoCaract)
{
    Menu menu = BASE;
    int i, posCursor;
    int stop = 0;
    unsigned int key;
    
    char debug[200] = {0};
    
    // Load blocks
    edit_loadBlocks(algoCaract);
    
    // Init var
    nbrVariables = 0;
    for(i=0; i<algoCaract.nbrBlocks && blocks[i].type == VAR_NEW; i++)
        nbrVariables++;
    variables = calloc(nbrVariables, sizeof(Variable));
    for(i=0; i<nbrVariables; i++)
    {
        strcpy(variables[i].name, blocks[i].args[0]);
        strcpy(variables[i].type, blocks[i].args[1]);
        variables[i].value = 0.;
    }
    
    // Princip
    posCursor = 0;
    do
    {
        ML_clear_vram();
        PrintXY(0, 0, "======        ======", 0);
        PrintXY(36, 0, algoCaract.name, 0);
        Draw_FKeys(menu);
        edit_drawAlgo(algoCaract.nbrBlocks, posCursor);
        
        sprintf(debug, "%d %p", nbrVariables, variables);
        PrintMini(0, 0, debug, 0);
        
        for(i=0; i<nbrVariables; i++)
        {
            sprintf(debug, "var %d: %s, %s", i, variables[i].name, variables[i].type);
            PrintMini(0, 6*(i+1), debug, 0);
        }
        
        GetKey(&key);
        
        // Blabla de l'affichage et des touches avec appel a edit_addBlock_Var()
        
    }while(!stop);
    
    // Save
    edit_saveBlocks(algoCaract);
    
    // Free
    free(blocks);
    free(variables);
}

void edit_addBlock_Var(Block *block, TypeBlock type)
{
    unsigned int key;
    int cursor = 0;
    char name[10] = {0};
    char buffer[100] = {0};
    const char arrows[2][3] = {{0xE6, 0x9A, 0}, {0xE6, 0x9B, 0}};
    
    ML_clear_vram();
    
    if(type == VAR_NEW)
    {
        do
        {
            ML_clear_vram();
            PrintXY(0, 0, (const unsigned char*)"Nouvelle variable:", 0);
            PrintXY(0, 16, (const unsigned char*)"Nom de la variable", 0);
            PrintXY(0, 24, (const unsigned char*)"[        ]", 0);
            if(cursor<8)
                PrintXY(6*(cursor+1), 24, (const unsigned char*)"_", 0);
            PrintXY(6, 24, (unsigned char*)name, 0);
            
            GetKey(&key);
            
            if((key >= 'A' && key <= 'Z')  &&  cursor<8)
            {
                name[cursor] = key;
                cursor++;
            }
            if(key == KEY_CTRL_DEL  &&  cursor > 0)
            {
                PrintXY(6, 24, (const unsigned char*)"        ", 0);
                cursor--;
                name[cursor] = 0;
            }
        }while(key != KEY_CTRL_EXE  ||  cursor == 0);
        
        nbrVariables++;
        
        strcpy(block->args[0], name);
        strcpy(block->args[1], "NOMBRE");
        
        variables = realloc(variables, (nbrVariables+1)*sizeof(Variable));
        strcpy(variables[nbrVariables-1].name, name);
        strcpy(variables[nbrVariables-1].type, "NOMBRE");
        
        // DEBUG
        sprintf(buffer, "var %d: %s, %s", nbrVariables-1, variables[nbrVariables-1].name, variables[nbrVariables-1].type);
        PrintMini(0, 0, buffer, 0);
        ML_display_vram();
        Sleep(2500);
    }
    else if(type == VAR_READ)
    {
        do
        {
            ML_clear_vram();
            PrintXY(0, 0, (const unsigned char*)"Lire variable:", 0);
            PrintXY(0, 16, (const unsigned char*)"Nom de la variable", 0);
            PrintXY(18, 24, (const unsigned char*)"[        ]", 0);
            PrintXY(24, 24, (unsigned char*)variables[cursor].name, 0);
            if(cursor>0)
                PrintXY(6, 24, arrows[0], 0);
            if(cursor<nbrVariables-1)
                PrintXY(84, 24, arrows[1], 0);
            
            GetKey(&key);
            
            if(key == KEY_CTRL_LEFT  &&  cursor>0)
                cursor--;
            if(key == KEY_CTRL_RIGHT  &&  cursor<nbrVariables-1)
                cursor++;
        }while(key != KEY_CTRL_EXE);
        
        strcpy(block->args[0], variables[cursor].name);
    }
}

Donc le probleme est relatif a mon tableau de Variable.
En fait dans la fonction edit_addBlock_Var(), le debug m'affiche ce que j'ai rentré juste au dessus (normal me direz-vous).
Mais une fois de retour dans la boucle principale, le debug m'affiche que les premieres cases sont vides... Bref j'y comprend niet alors si quelqu'un trouve mon erreur
Lephenixnoir Hors ligne Administrateur Points: 21329 Défis: 149 Message

Citer : Posté le 23/03/2015 18:41 | #


char debug[200] = {0};

Ça sert à rien ça, tu sais ? Ça n'initialise que la première case.

Je trouve ton code pas clair, tu peux pas séparer l'interface et les contrôleurs ? C'est un peu le bordel dans ton affaire...
Précédente 1, 2, 3 ··· 10 ··· 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 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 v42 © créé par Neuronix et Muelsaco 2004 - 2022 | Il y a 49 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