Condition switch ignorée

denixxo -  
 Utilisateur anonyme -
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

7 réponses

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  2. denixxo Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
     
    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
  3. Utilisateur anonyme
     
    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
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. denixxo
     
    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
  6. Utilisateur anonyme
     
    À 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
  7. denixxo
     
    dans default:break après le dernier case et ensuite je ne sais pas ^^'
    0
    1. Utilisateur anonyme
       
      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