If dans un switch langage C

Résolu/Fermé
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 - 16 janv. 2021 à 12:59
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 - 16 janv. 2021 à 18:56
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 :

#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:

2 réponses

yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024 1 481
16 janv. 2021 à 13:18
bonjour,
pourquoi utilises-tu
--x
dans le if?
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1
16 janv. 2021 à 13:21
Pour dire au if de regarder sur la ligne juste au dessus du premier x ?
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1
16 janv. 2021 à 13:23
Enfin je crois que c'est ça que j'ai voulu faire en tout cas ????????
0
yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024 1 481 > CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023
16 janv. 2021 à 14:37
connais-tu la différence entre
--x
,
x--
et
x-1
?
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1 > yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024
16 janv. 2021 à 15:05
non je ne connais pas les différence entre les trois
0
yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024 1 481 > CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023
16 janv. 2021 à 15:07
je suggère que tu étudies cela.
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1
16 janv. 2021 à 17:54
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 ;)
0
yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024 1 481
16 janv. 2021 à 17:56
qu'as-tu programmé?
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1
16 janv. 2021 à 17:57
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;
0
yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024 1 481
16 janv. 2021 à 18:21
et tu as compris la différence entre --x, x-- et x-1?
0
CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023 1 > yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024
16 janv. 2021 à 18:23
oui j'ai compris entre --x et x-- mais pas x-1 entre --x
0
yg_be Messages postés 22916 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 2 juillet 2024 1 481 > CoDForlan Messages postés 44 Date d'inscription mercredi 17 juin 2020 Statut Membre Dernière intervention 21 juin 2023
16 janv. 2021 à 18:54
x-1
ne modifie pas x
0