Condition switch ignorée
denixxo
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour :D ,
Voici mon problème :
Le switch est tout purement ignoré o_O'
Quelqu'un pourrait-il m'aider ^^ ?
,Bien cordialement
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:
- Condition switch ignorée
- Excel cellule couleur si condition texte - Guide
- Android switch - Accueil - Android
- Smart switch pc - Télécharger - Divers Bureautique
- Switch off - Télécharger - Divers Utilitaires
- Logiciel switch - Télécharger - Conversion & Extraction
7 réponses
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);
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
Par stdout : H=0, B=1, G=2, D=3, direction=2
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 ?
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 ?
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 ^^'
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 ^^'
À 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 ?
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.
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.