If dans un switch langage C
Résolu
CoDForlan
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
CoDForlan Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
CoDForlan Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
En ce moment je code une sorte de mini jeu si on peut l'appeler comme ça et je rencontre un problème qui est le suivant :
La première sortie :
Le code avec un if rajouter à la ligne 64 :
La seconde sortie :
Le problème c'est que quand je rajoute le if qui devrait faire que si il y a le caractère # sur la ligne du dessus il ne veut plus faire monter le grand X.
Avez vous une solution, je suis aussi désolé si je n'ai pas bien expliqué mon problème.
Merci d'avance CoDForlan ;)
En ce moment je code une sorte de mini jeu si on peut l'appeler comme ça et je rencontre un problème qui est le suivant :
#include <stdio.h> #include <stdlib.h> #include <string.h> //[RAPPEL DE COMPILATION](pour Mingw en C) : gcc main.c -o prog int main(int argc, char const *argv[]){ int x=0,y=0; int nbMoov=100; int orientation=5; int nbLines=13,nbCollumns=27; char MAP[13][27]={{0},{0},{0,0,0,0,0,0,0,0,0,0,0,0,0,'#'},{0},{0},{0},{0,0,0,0,0,0,0,0,0,0,0,0,0,'X'},{0},{0},{0},{0},{0},{0},}; system("clear"); //lecture puis écriture de la carte du fichier mapX à la chaine MAP /* FILE *map1=NULL; map1=fopen("map1", "r"); fgets(MAP[0], 352, map1); fclose(map1); */ do{ //début du première affichage de la carte ==> printf("\n\n"); for (x=0;x<nbLines;++x){ for (y=0;y<nbCollumns;++y){ if (MAP[x][y]=='X') { MAP[x][y]='X'; } else if(MAP[x][y]=='#'){ MAP[x][y]='#'; } else{ MAP[x][y]='/'; } printf("%c",MAP[x][y]); } printf("\n"); } x=0,y=0; printf("\n\n"); //début du première affichage de la carte ==> //début du deuxième affichage de la carte ==> printf("il vous reste %d mouvements\n",nbMoov); printf("Les mouvements sont :\n _\n |\n 8\n <- 4 5 6 ->\n 2\n |\n _\n"); scanf("%d",&orientation); for (x=0;x<nbLines;++x){ for (y=0;y<nbCollumns;++y){ if (MAP[x][y]=='X'){ switch(orientation){ case 8: MAP[x][y]=0; MAP[--x][y]='X'; break; case 2: MAP[x][y]=0; MAP[++x][y]='X'; break; case 4: MAP[x][y]=0; MAP[x][--y]='X'; break; case 6: MAP[x][y]=0; MAP[x][++y]='X'; break; default: MAP[x][y]='X'; break; } } } } x=0,y=0; //fin du deuxième affichage de la carte ==> system("clear"); nbMoov=nbMoov-1; }while(nbMoov>0); return 0; }
La première sortie :
///////////////////////////
///////////////////////////
/////////////#/////////////
///////////////////////////
///////////////////////////
///////////////////////////
/////////////X/////////////
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
il vous reste 100 mouvements
Les mouvements sont :
_
|
8
<- 4 5 6 ->
2
|
_
Le code avec un if rajouter à la ligne 64 :
#include <stdio.h> #include <stdlib.h> #include <string.h> //[RAPPEL DE COMPILATION](pour Mingw en C) : gcc main.c -o prog int main(int argc, char const *argv[]){ int x=0,y=0; int nbMoov=100; int orientation=5; int nbLines=13,nbCollumns=27; char MAP[13][27]={{0},{0},{0,0,0,0,0,0,0,0,0,0,0,0,0,'#'},{0},{0},{0},{0,0,0,0,0,0,0,0,0,0,0,0,0,'X'},{0},{0},{0},{0},{0},{0},}; system("clear"); //lecture puis écriture de la carte du fichier mapX à la chaine MAP /* FILE *map1=NULL; map1=fopen("map1", "r"); fgets(MAP[0], 352, map1); fclose(map1); */ do{ //début du première affichage de la carte ==> printf("\n\n"); for (x=0;x<nbLines;++x){ for (y=0;y<nbCollumns;++y){ if (MAP[x][y]=='X') { MAP[x][y]='X'; } else if(MAP[x][y]=='#'){ MAP[x][y]='#'; } else{ MAP[x][y]='/'; } printf("%c",MAP[x][y]); } printf("\n"); } x=0,y=0; printf("\n\n"); //début du première affichage de la carte ==> //début du deuxième affichage de la carte ==> printf("il vous reste %d mouvements\n",nbMoov); printf("Les mouvements sont :\n _\n |\n 8\n <- 4 5 6 ->\n 2\n |\n _\n"); scanf("%d",&orientation); for (x=0;x<nbLines;++x){ for (y=0;y<nbCollumns;++y){ if (MAP[x][y]=='X'){ switch(orientation){ case 8: if(MAP[--x][y]!='#'){ MAP[x][y]=0; MAP[--x][y]='X'; } break; case 2: MAP[x][y]=0; MAP[++x][y]='X'; break; case 4: MAP[x][y]=0; MAP[x][--y]='X'; break; case 6: MAP[x][y]=0; MAP[x][++y]='X'; break; default: MAP[x][y]='X'; break; } } } } x=0,y=0; //fin du deuxième affichage de la carte ==> system("clear"); nbMoov=nbMoov-1; }while(nbMoov>0); return 0; }
La seconde sortie :
///////////////////////////
///////////////////////////
/////////////#/////////////
///////////////////////////
///////////////////////////
///////////////////////////
/////////////X/////////////
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
il vous reste 100 mouvements
Les mouvements sont :
_
|
8
<- 4 5 6 ->
2
|
_
Le problème c'est que quand je rajoute le if qui devrait faire que si il y a le caractère # sur la ligne du dessus il ne veut plus faire monter le grand X.
Avez vous une solution, je suis aussi désolé si je n'ai pas bien expliqué mon problème.
Merci d'avance CoDForlan ;)
A voir également:
- If dans un switch langage C
- Langage ascii - Guide
- Android switch - Accueil - Android
- Langage binaire - Guide
- Smart switch pc - Télécharger - Divers Bureautique
- Switch off - Télécharger - Divers Utilitaires
2 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
pourquoi utilises-tu
pourquoi utilises-tu
--xdans le if?
CoDForlan
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
1
Pour dire au if de regarder sur la ligne juste au dessus du premier x ?
CoDForlan
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
1
Enfin je crois que c'est ça que j'ai voulu faire en tout cas ????????
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
1 584
>
CoDForlan
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
connais-tu la différence entre
, et ?
CoDForlan
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
1
>
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
non je ne connais pas les différence entre les trois
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
1 584
>
CoDForlan
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
je suggère que tu étudies cela.
ok c'est bon j'ai réussi merci pour ton aide et j'ai aussi compris les différence entre les versions préfixe et suffixe.
Je ne comprend par contre tjs pas la dif entre ++x et x+1.
Merci ;)
Je ne comprend par contre tjs pas la dif entre ++x et x+1.
Merci ;)
J'ai fais ça à la place et ça fonctionne
for (x=0;x<nbLines;++x){ for (y=0;y<nbCollumns;++y){ if (MAP[x][y]=='X'){ switch(orientation){ case 8: if(MAP[x-1][y]!='#'){ MAP[x][y]=0; MAP[--x][y]='X'; } MAP[x][y]='X'; break; case 2: if(MAP[x+1][y]!='#'){ MAP[x][y]=0; MAP[++x][y]='X'; } MAP[x][y]='X'; break; case 4: if(MAP[x][y-1]!='#'){ MAP[x][y]=0; MAP[x][--y]='X'; } MAP[x][y]='X'; break; case 6: if(MAP[x][y+1]!='#'){ MAP[x][y]=0; MAP[x][++y]='X'; } MAP[x][y]='X'; break; default: MAP[x][y]='X'; break; } } } } x=0,y=0;