#include #include /*JEU BLOCKOUT*/ void situationInitiale(int xc2, int yc2, int xp2, int yp2, int xc3, int yc3, int xp3, int yp3){//plateau de jeu //x et y indique les abscisse et ordonnee ; c et p indique les cible ou pion ; 2 et 3 indique le pion a deplacer (selon le menu) //tableau de 8 cases de hauteur et de 10 cases de longueur pour un plateau de 6*8 cases (espace libre "dans les murs" //les bords du plateau et les murs interieurs sont representes par le caractere '*', les pions (carres) par des caracteres alpha minuscule ('a') et les cibles (ronds) par des caracteres alpha majuscule ('A'). char plateau[8][10] ; int i, j; for (i=0;i<8;++i){ for(j=0;j<10;++j){ if(i==0 ||i==7 || j==0 || j== 9 ||(i==3 && j==5)|| (i==3 && j==7) || (i==4 && j==5) ||(i==5 && j==8)){//mur plateau[i][j] = '*'; printf("%c",(plateau[i][j])); }else{ if(i == xc2 && j == yc2){//cible2 plateau[i][j] = 'X'; printf("%c",(plateau[i][j])); }else{ if(i == xp2 && j == yp2){//pion2 plateau[i][j] = 'x'; printf("%c",(plateau[i][j])); }else{ if(i == xc3 && j == yc3){//cible3 plateau[i][j] = 'O'; printf("%c",(plateau[i][j])); }else{ if(i == xp3 && j == yp3){//pion3 plateau[i][j] = 'o'; printf("%c",(plateau[i][j])); }else{ plateau[i][j] = ' ';//cases vides printf("%c",(plateau[i][j])); } } } } } } printf("\n"); } printf("\n"); } void menu1(){//menu des choix printf("\nindiquer le carre a deplacer (2 pour x, 3 pour o)\npour recommencer cette partie, tapez 1\npour sortir du jeu, tapez 0\n"); } int resultatMenu1(){//saisie resultat menu2 int rep1; printf("choix : "); scanf("%d",&rep1); scanf("%*[^\n]s"); getchar(); return rep1; } void menu2(){//menu des deplacements printf("\npour monter, tapez 8\npour descendre, tapez 2\npour aller a  gauche, tapez 4\npour aller a  droite, tapez 6\n"); } int resultatMenu2(){//saisie resultat menu2 printf("choix : "); int rep2; scanf("%d", &rep2); scanf("%*[^\n]s"); getchar(); return rep2; } void menu3(){ //menu de configuration gagnante printf("\nVOUS AVEZ GAGNE\npour recommencer la partie, tapez 1\npour sortir du jeu, tapez 0\n"); } int test(int xp, int yp, int xc, int yc){//est ce que la case suivante dans le déplacement est libre = n'est pas un mur int res = 0; if(xp==0 || xp==7 || yp==0 || yp== 9 ||(xp==3 && yp==5)|| (xp==3 && yp==7) || (xp==4 && yp==5) || (xp==5 && yp==8)){ //meme conditionnelle que pour le plateau de jeu pour placer les murs res = 1; }else{ if(xp == xc && yp == yc){ res = 2; menu3(); } } return res; } void deplacementPion2(int xc2, int yc2, int xp2, int yp2, int xc3, int yc3, int xp3, int yp3){ menu2(); int res2; int erreur;//sert de booleen pour savoir si la direction choisie est valide erreur = 1; while (erreur == 1){ res2 = resultatMenu2(); switch(res2){ case 2 : printf("bas\n"); while(test(xp2+1, yp2, xc2, yc2) == 0){ xp2 = xp2+1; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage en fin de deplacement erreur = 0; break; case 4 : printf("gauche\n"); while (test(xp2, yp2-1, xc2, yc2) == 0){ yp2 = yp2 -1; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage en fin de deplacement erreur = 0; break; case 6 : printf("droite\n"); while (test(xp2, yp2+1, xc2, yc2) == 0){ yp2 = yp2 +1; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage en fin de deplacement erreur = 0; break; case 8 : printf("haut\n"); while (test(xp2-1, yp2, xc2, yc2) == 0){ xp2 =xp2 -1; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage en fin de deplacement erreur = 0; break; default : printf("direction inconnue\n"); menu2(); } } } void deplacementPion3(int xc2, int yc2, int xp2, int yp2, int xc3, int yc3, int xp3, int yp3){ menu2(); int res2; int erreur;//sert de booleen pour savoir si la direction choisie est valide erreur = 1; while (erreur == 1){ res2 = resultatMenu2(); switch(res2){ case 2 : printf("bas\n"); while(test(xp3+1, yp3, xc3, yc3) == 0){ xp3 = xp3+1; situationInitiale(xc2, yc2, xp2, yp2 ,xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc, yc, xp, yp);//affichage en fin de deplacement erreur = 0; break; case 4 : printf("gauche\n"); while (test(xp3, yp3-1, xc3, yc3) == 0){ yp3 = yp3 -1; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc, yc, xp, yp);//affichage en fin de deplacement erreur = 0; break; case 6 : printf("droite\n"); while (test(xp3, yp3+1, xc3, yc3) == 0){ yp3 = yp3 +1; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc, yc, xp, yp);//affichage en fin de deplacement erreur = 0; break; case 8 : printf("haut\n"); while (test(xp3-1, yp3, xc3, yc3) == 0){ xp3 =xp3 -1; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3);//affichage a chaque deplacement } //situationInitiale(xc, yc, xp, yp);//affichage en fin de deplacement erreur = 0; break; default : //nouvelle saisie si la direction est inconnue printf("direction inconnue\n"); menu2(); } } } int main(){ //lancement du programme int res1; char quitter; int xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3; res1 = 1; xc2 = 4; yc2 = 6; xp2 = 3; yp2 = 3; xc3 = 4; yc3 = 8; xp3 = 5; yp3 = 4; situationInitiale(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3); while(res1 == 1){ menu1(); res1 = resultatMenu1(); //traitement choix if(res1 == 0){ printf("fin du jeu \n");//on quitte le programme } if(res1 == 1){//reinitialisation du plateau printf("recommencer partie\n"); } if(res1 == 2){//deplacement du pion x printf("deplacement du pion x\n"); deplacementPion2(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3); res1 = 1; } if(res1 == 3){//deplacement du pion o printf("deplacement du pion o\n"); deplacementPion3(xc2, yc2, xp2, yp2, xc3, yc3, xp3, yp3); res1 = 1; } } }