Condition switch ignorée

Fermé
denixxo - Modifié par denixxo le 13/01/2013 à 18:54
 Utilisateur anonyme - 18 janv. 2013 à 13:24
Bonjour :D ,
Voici mon problème :


void deplacerjoueur(int carte[][NBR_BLOCS_HAUTEUR], SDL_Rect *pos, int direction) 
{ 
    switch (direction) 
    { 
        case HAUT: 
          if(pos->y-1 < 0)// Si le joueur dépasse l'écran, on arrête 
          break; 
          if(carte[pos->x][pos->y-1] == PAROI)// S'il y a une paroi, on arrête 
          break; 
          // Si on veut pousser une caisse, il faut vérifier qu'il n'y a pas de mur derrière (ou une autre caisse, ou la limite du monde) 
          if((carte[pos->x][pos->y-1 == BALL]||carte[pos->x][pos->y-1] == BALL_OK)&&(pos->y-2<0||carte[pos->x][pos->y-2] == PAROI||carte[pos->x][pos->y-2] == BALL||carte[pos->x][pos->y-2] == BALL_OK)) 
          break; 
          // Si on arrive là, c'est qu'on peut déplacer le joueur ! 
          // On vérifie d'abord s'il y a une caisse à déplacer 
          deplacerCaisse(&carte[pos->x][pos->y - 1], &carte[pos->x][pos->y - 2]); 
          //On déplace le joueur !!! 
          pos->y --; 
          break; 

        case BAS: 
          if(pos->y+1 < 0)// Si le joueur dépasse l'écran, on arrête 
          break; 
          if(carte[pos->x][pos->y+1] == PAROI)// S'il y a une paroi, on arrête 
          break; 
          // Si on veut pousser une caisse, il faut vérifier qu'il n'y a pas de mur derrière (ou une autre caisse, ou la limite du monde) 
          if((carte[pos->x][pos->y+1 == BALL]||carte[pos->x][pos->y+1] == BALL_OK)&&(pos->y+2<0||carte[pos->x][pos->y+2] == PAROI||carte[pos->x][pos->y+2] == BALL||carte[pos->x][pos->y+2] == BALL_OK)) 
          break; 
          // Si on arrive là, c'est qu'on peut déplacer le joueur ! 
          // On vérifie d'abord s'il y a une caisse à déplacer 
          deplacerCaisse(&carte[pos->x][pos->y + 1], &carte[pos->x][pos->y + 2]); 
          //On déplace le joueur !!! 
          pos->y ++; 
          break; 

        case GAUCHE: 
          if(pos->x-1 < 0)// Si le joueur dépasse l'écran, on arrête 
          break; 
          if(carte[pos->x-1][pos->y] == PAROI)// S'il y a une paroi, on arrête 
          break; 
          // Si on veut pousser une caisse, il faut vérifier qu'il n'y a pas de mur derrière (ou une autre caisse, ou la limite du monde) 
          if((carte[pos->x-1][pos->y == BALL]||carte[pos->x-1][pos->y] == BALL_OK)&&(pos->y-2<0||carte[pos->x-2][pos->y] == PAROI||carte[pos->x-2][pos->y] == BALL||carte[pos->x-2][pos->y] == BALL_OK)) 
          break; 
          // Si on arrive là, c'est qu'on peut déplacer le joueur ! 
          // On vérifie d'abord s'il y a une caisse à déplacer 
          deplacerCaisse(&carte[pos->x - 1][pos->y], &carte[pos->x - 2][pos->y]); 
          //On déplace le joueur !!! 
          pos->x --; 
          break; 

        case DROITE: 
          if(pos->x+1 < 0)// Si le joueur dépasse l'écran, on arrête 
          break; 
          if(carte[pos->x+1][pos->y] == PAROI)// S'il y a une paroi, on arrête 
          break; 
          // Si on veut pousser une caisse, il faut vérifier qu'il n'y a pas de mur derrière (ou une autre caisse, ou la limite du monde) 
          if((carte[pos->x+1][pos->y == BALL]||carte[pos->x+1][pos->y] == BALL_OK)&&(pos->y+2<0||carte[pos->x+2][pos->y] == PAROI||carte[pos->x+2][pos->y] == BALL||carte[pos->x+2][pos->y] == BALL_OK)) 
          break; 
          // Si on arrive là, c'est qu'on peut déplacer le joueur ! 
          // On vérifie d'abord s'il y a une caisse à déplacer 
          deplacerCaisse(&carte[pos->x + 1][pos->y], &carte[pos->x + 2][pos->y]); 
          //On déplace le joueur !!! 
          pos->x ++; 
          break; 
    } 
}


Le switch est tout purement ignoré o_O'

Quelqu'un pourrait-il m'aider ^^ ?

,Bien cordialement

A voir également:

7 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
13 janv. 2013 à 19:33
Qu'est-ce que ça donne si tu affiches ceci (avant le switch) :

printf("H=%d, B=%d, G=%d, D=%d, direction=%d\n", HAUT, BAS, GAUCHE, DROITE, direction);
0
denixxo Messages postés 2 Date d'inscription dimanche 13 janvier 2013 Statut Membre Dernière intervention 14 janvier 2013
Modifié par denixxo le 13/01/2013 à 19:39
Je suis en SDL ^^ donc ça ne fonctionne pas le printf (du moins pas directement) mais j'ai énuméré de sorte à ce que Haut = 0, BAS = 1, GAUCHE = 2, DROITE = 3 ^^

Par stdout : H=0, B=1, G=2, D=3, direction=2
0
Up
0
Utilisateur anonyme
17 janv. 2013 à 22:15
Bonsoir

Si tu as direction =2 juste avant le switch, alors tu rentres certainement dans le cas GAUCHE.
Qu'est-ce qui te fait affirmer que le switch est ignoré ? Tu as fait du pas à pas ? Tu as mis un point d'arrêt immédiatement après GAUCHE ? Ou tu as seulement constaté que ça ne faisait pas ce que tu attendais ?

Au fait.. pas trop de problèmes avec tes [pos->x-2] et autres positions de caisse sans avoir vérifié que pos->x est bien supérieur ou égal à 2 ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour

j'ai mit un SDL_Delay avant et dans le switch, résultat : avant : ça fonctionne après : ça fonctionne pas ^^'

ensuite : ah oui c'est vrai merci de m'avoir fait remarquer cette erreur ^^'
0
Utilisateur anonyme
18 janv. 2013 à 13:16
À quel endroit EXACTEMENT (entre quelle ligne et quelle ligne) avais-tu mis ton SDL_DELAY ? Et pourquoi ne pas avoir mis un point d'arrêt plutôt ?
0
dans default:break après le dernier case et ensuite je ne sais pas ^^'
0
Si tu passes une bonne valeur à 'direction', le default n'est jamais exécuté : c'est normal que tu ne voies pas ton SDL_DELAY ! Et ça ne veut absolument pas dire que le switch est ignoré !
Utilise un point d'arrêt, sur l'instruction switch, puis avance en pas à pas : c'est le plus sûr moyen de voir ce qui se passe.
0