#include #include #include #include #include #define PIONSJAUNE 34 #define PIONSROUGE 20 #define PIONSNOIR 10 #define POINTPLATEAUTOT 104 // /!\ Il faut que PIONSJAUNE < PIONSROUGE < PIONSNOIR et PIONSJAUNE + PIONSROUGE + PIONSNOIR = 64 #define POINTPIONSJAUNE 1 #define POINTPIONSROUGE 2 #define POINTPIONSNOIR 3 #define POINTPLATOT 104 #define clearconsole() system("cls") //sous linux : printf("\033[H\033[2J") void Color(int couleurDuTexte,int couleurDeFond); void affichage (char tableau[8][8], int *NbTour, int *PionsJauneJoueur1, int *PionsRougeJoueur1, int *PionsNoirJoueur1, int *PionsJauneJoueur2, int *PionsRougeJoueur2, int *PionsNoirJoueur2); int nombreAlea (int Min, int Max); void initialisation (char tableau[8][8]); void trouverPosition (char tableau[8][8], int *PositionX, int *PositionY); void clean(char *chaine); void jouer(); int main (int argc, char * const argv[]) { int play=0; printf("Voulez-vous joueur √† L'attrape-sous ? (oui = 1 /non = 0)"); scanf("%d",&play); if(play==1) jouer(); return 0; } void jouer() { // variables char plateau[8][8]; int PositionXJoueur1 =0; int PositionYJoueur1 =0; int PositionXJoueur2 =0; int PositionYJoueur2 =0; int NbTour = 0; int PionsJauneJoueur1 =0; int PionsRougeJoueur1 =0; int PionsNoirJoueur1 =0; int PionsJauneJoueur2 =0; int PionsRougeJoueur2 =0; int PionsNoirJoueur2 =0; int noplay=0; int savoirJouer=0, PosX =0, PosY =0, deltaX =0, deltaY =0; char ch,piontprit='U'; //code srand((unsigned)time(NULL)); initialisation(plateau); // d√©but de partie, le J1 retire un pion jaune do{ affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Joueur1, veuillez choisir le pion jaune a retirer (B2, A1, E3...) : "); trouverPosition(plateau,&PositionXJoueur1,&PositionYJoueur1); }while(plateau[PositionYJoueur1][PositionXJoueur1] != 'J'); PionsJauneJoueur1++; plateau[PositionYJoueur1][PositionXJoueur1] = ' '; // d√©but de partie, le J2 retire un pion jaune do{ affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Joueur2, veuillez choisir le pion jaune a retirer (B2, A1, E3...) : "); trouverPosition(plateau,&PositionXJoueur2,&PositionYJoueur2); }while(plateau[PositionYJoueur2][PositionXJoueur2] != 'J'); PionsJauneJoueur2++; plateau[PositionYJoueur2][PositionXJoueur2] = ' '; // on affiche le plateau affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); // BOUCLE DE JEU do { NbTour++; noplay=0; // J2 JOUE // J1 choisis son pion jaune de d√©part do{ affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Joueur1, veuillez choisir le pion jaune √† utiliser (B2, A1, E3...) : "); trouverPosition(plateau,&PositionXJoueur1,&PositionYJoueur1); }while(plateau[PositionYJoueur1][PositionXJoueur1] != 'J'); plateau[PositionYJoueur1][PositionXJoueur1] = '1'; // J1 joue while(1){ savoirJouer=0; PosX =0; PosY =0; deltaX =0; deltaY =0; piontprit='U'; affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Joueur1, pouvez-vous jouer ?(0 = non /1 = oui) : "); scanf("%d",&savoirJouer); if(savoirJouer!=1) { break; } do{ affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Joueur1, veuillez choisir la case libre derriere le pion a sauter sous la forme\nB2, E8, C3, .. Tapez votre position actuelle si vous ne pouvez pas jouer: "); trouverPosition(plateau,&PosX,&PosY); if((PosX == PositionXJoueur1)&&(PosY == PositionYJoueur1)) break; ch= plateau[PosY][PosX]; if(ch == ' '){ deltaX = PosX-PositionXJoueur1; deltaY = PosY-PositionYJoueur1; if(deltaY== -2 && deltaX == -2){ piontprit = plateau[PositionYJoueur1-1][PositionXJoueur1-1]; plateau[PositionYJoueur1-1][PositionXJoueur1-1] = ' '; } else if(deltaY== 2 && deltaX == 2){ piontprit = plateau[PositionYJoueur1+1][PositionXJoueur1+1]; plateau[PositionYJoueur1+1][PositionXJoueur1+1] = ' '; } else if(deltaY== -2 && deltaX == 2){ piontprit = plateau[PositionYJoueur1-1][PositionXJoueur1+1]; plateau[PositionYJoueur1-1][PositionXJoueur1+1] = ' '; } else if(deltaY== 2 && deltaX == -2){ piontprit = plateau[PositionYJoueur1+1][PositionXJoueur1-1]; plateau[PositionYJoueur1+1][PositionXJoueur1-1] = ' '; } else if(deltaX== -2 && deltaY ==0){ piontprit = plateau[PositionYJoueur1][PositionXJoueur1-1]; plateau[PositionYJoueur1][PositionXJoueur1-1] = ' '; } else if(deltaX== 2 && deltaY ==0){ piontprit = plateau[PositionYJoueur1][PositionXJoueur1+1]; plateau[PositionYJoueur1][PositionXJoueur1+1] = ' '; } else if(deltaY== -2 && deltaX ==0){ piontprit = plateau[PositionYJoueur1-1][PositionXJoueur1]; plateau[PositionYJoueur1-1][PositionXJoueur1] = ' '; } else if(deltaY== 2 && deltaX ==0){ piontprit = plateau[PositionYJoueur1+1][PositionXJoueur1]; plateau[PositionYJoueur1+1][PositionXJoueur1] = ' '; } } }while((piontprit!='J') && (piontprit!='R') && (piontprit!='N')); if(piontprit=='J') PionsJauneJoueur1++; if(piontprit=='R') PionsRougeJoueur1++; if(piontprit=='N') PionsNoirJoueur1++; plateau[PosY][PosX] = '1'; plateau[PositionYJoueur1][PositionXJoueur1] = ' '; PositionYJoueur1 = PosY; PositionXJoueur1 = PosX; } plateau[PositionYJoueur1][PositionXJoueur1] = 'J'; //J2 JOUE // J2 choisis son pion jaune de d√©part do{ affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Joueur2, veuillez choisir le pion jaune √† utiliser (B2, A1, E3...) : "); trouverPosition(plateau,&PositionXJoueur2,&PositionYJoueur2); }while(plateau[PositionYJoueur2][PositionXJoueur2] != 'J'); plateau[PositionYJoueur2][PositionXJoueur2] = '2'; // J2 joue while(1){ affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); savoirJouer=0; PosX =0; PosY =0; deltaX =0; deltaY =0; piontprit='U'; printf("Joueur2, pouvez-vous jouer ?(0 = non /1 = oui) : "); scanf("%d",&savoirJouer); if(savoirJouer!=1) { break; } do{ affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Joueur2, veuillez choisir la case libre derriere le pion a sauter sous la forme\nB2, E8, C3, .. Tapez votre position actuelle si vous ne pouvez pas jouer: "); trouverPosition(plateau,&PosX,&PosY); if((PosX == PositionXJoueur2)&&(PosY == PositionYJoueur2)) break; ch= plateau[PosY][PosX]; if(ch == ' '){ deltaX = PosX-PositionXJoueur2; deltaY = PosY-PositionYJoueur2; if(deltaY== -2 && deltaX == -2){ piontprit = plateau[PositionYJoueur2-1][PositionXJoueur2-1]; plateau[PositionYJoueur2-1][PositionXJoueur2-1] = ' '; } else if(deltaY== 2 && deltaX == 2){ piontprit = plateau[PositionYJoueur2+1][PositionXJoueur2+1]; plateau[PositionYJoueur2+1][PositionXJoueur2+1] = ' '; } else if(deltaY== -2 && deltaX == 2){ piontprit = plateau[PositionYJoueur2-1][PositionXJoueur2+1]; plateau[PositionYJoueur2-1][PositionXJoueur2+1] = ' '; } else if(deltaY== 2 && deltaX == -2){ piontprit = plateau[PositionYJoueur2+1][PositionXJoueur2-1]; plateau[PositionYJoueur2+1][PositionXJoueur2-1] = ' '; } else if(deltaX== -2 && deltaY ==0){ piontprit = plateau[PositionYJoueur2][PositionXJoueur2-1]; plateau[PositionYJoueur2][PositionXJoueur2-1] = ' '; } else if(deltaX== 2 && deltaY ==0){ piontprit = plateau[PositionYJoueur2][PositionXJoueur2+1]; plateau[PositionYJoueur2][PositionXJoueur2+1] = ' '; } else if(deltaY== -2 && deltaX ==0){ piontprit = plateau[PositionYJoueur2-1][PositionXJoueur2]; plateau[PositionYJoueur2-1][PositionXJoueur2] = ' '; } else if(deltaY== 2 && deltaX ==0){ piontprit = plateau[PositionYJoueur2+1][PositionXJoueur2]; plateau[PositionYJoueur2+1][PositionXJoueur2] = ' '; } } }while((piontprit!='J') && (piontprit!='R') && (piontprit!='N')); if(piontprit=='J') PionsJauneJoueur2++; if(piontprit=='R') PionsRougeJoueur2++; if(piontprit=='N') PionsNoirJoueur2++; plateau[PosY][PosX] = '2'; plateau[PositionYJoueur2][PositionXJoueur2] = ' '; PositionYJoueur2 = PosY; PositionXJoueur2 = PosX; } plateau[PositionYJoueur2][PositionXJoueur2] = 'J'; affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); printf("Stopper la partie et d√©clar√© un vainqueur ? (1 = oui / 0 = non) :"); scanf("%d",&noplay); if(noplay==1) { clearconsole(); affichage(plateau,&NbTour,&PionsJauneJoueur1, &PionsRougeJoueur1, &PionsNoirJoueur1, &PionsJauneJoueur2, &PionsRougeJoueur2, &PionsNoirJoueur2); if(PionsJauneJoueur1+PionsRougeJoueur1*2+PionsNoirJoueur1*3 > PionsJauneJoueur2+PionsRougeJoueur2*2+PionsNoirJoueur2*3) { printf("Joueur 1 remporte la partie !"); break; } else if(PionsJauneJoueur1+PionsRougeJoueur1*2+PionsNoirJoueur1*3 < PionsJauneJoueur2+PionsRougeJoueur2*2+PionsNoirJoueur2*3) { printf("Joueur 2 remporte la partie !"); break; } else { printf("Match nul !"); break; } } }while(1); } void trouverPosition (char tableau[8][8], int *PositionX, int *PositionY) { char coup[100]; do { fgets(coup, sizeof(coup), stdin); clean(coup); *PositionX = coup[0] - 'A'; *PositionY = coup[1] - '1'; //printf("\n\n%d\n%d\n\n",*PositionX,*PositionY); }while((*PositionY < 0 || *PositionY > 8) || (*PositionX < 0 || *PositionX > 8) ); } void clean(char *chaine) { char *i = strchr(chaine, '\n'); if(*i == 1) { *i = 0; } } void initialisation (char tableau[8][8]) { int i,j; int pj = PIONSJAUNE; int pr = PIONSROUGE; int pn = PIONSNOIR; char c; for(i=0;i!=8;i++){ for(j=0;j!=8;j++){ while(1) { int rand = nombreAlea(0,64); if(rand <= PIONSJAUNE && pj >=1){ c = 'J'; pj--; break; } if(rand > PIONSJAUNE && rand <= PIONSROUGE+PIONSJAUNE && pr >=1){ c= 'R'; pr--; break; } if(rand > PIONSROUGE+PIONSJAUNE && pn >=1){ c= 'N'; pn--; break; } } tableau[i][j] = c; } } } void affichage (char tableau[8][8], int *NbTour, int *Pion1J, int *Pion1R, int *Pion1N, int *Pion2J, int *Pion2R, int *Pion2N) { // ‡ mettre au dÈbut de la fonction afficher int i,j,k,numero = 0; int PionJPlat = PIONSJAUNE - *Pion2J - *Pion1J; int PionRPlat = PIONSROUGE - *Pion2R - *Pion1R; int PionNPlat = PIONSNOIR - *Pion2N - *Pion1N; int Point1Tot = *Pion1N * POINTPIONSNOIR + *Pion1R * POINTPIONSROUGE + *Pion1J * POINTPIONSJAUNE; int Point2Tot = *Pion2N * POINTPIONSNOIR + *Pion2R * POINTPIONSROUGE + *Pion2J * POINTPIONSJAUNE; int PointPlatTot = POINTPLATOT - Point1Tot - Point2Tot; clearconsole(); // ‡ mettre au dÈbut de la fonction afficher for(i=1; i<18;i++){ if (i==1) { printf("tour N%.2ld | A | B | C | D | E | F | G | H | \n",*NbTour); } if (i==2) { printf(" --+---+---+---+---+---+---+---+---+ \n"); } if (i==3) { printf(" | J1 | J2 | Plateau 1|"); } if (i==4) { printf(" --+----+----+----- --+---+---+---+---+---+---+---+---+ \n"); } if (i==5) { printf(" Ja | %.2ld | %.2ld | %.2ld 2|",*Pion1J, *Pion2J, PionJPlat); } if (i==6) { printf(" --+----+----+----- --+---+---+---+---+---+---+---+---+ \n"); } if (i==7) { printf(" Ro | %.2ld | %.2ld | %.2ld 3|", *Pion1R, *Pion2R, PionRPlat); } if (i==8) { printf(" --+----+----+----- --+---+---+---+---+---+---+---+---+ \n"); } if (i==9) { printf(" No | %.2ld | %.2ld | %.2ld 4|", *Pion1N, *Pion2N, PionNPlat); } if (i==10) { printf( " --+----+----+----- --+---+---+---+---+---+---+---+---+ \n",*NbTour); } if (i==11) { printf(" pt | %.2ld | %.2ld | %.3ld 5|",Point1Tot, Point2Tot , PointPlatTot); } if (i==12) { printf(" --+---+---+---+---+---+---+---+---+ \n"); } if (i==13) { printf(" Ja = Jaune = 1 point 6|"); } if (i==14) { printf(" Ro = Rouge = 2 points --+---+---+---+---+---+---+---+---+ \n"); } if (i==15) { printf(" No = Noir = 3 points 7|"); } if (i==16) { printf(" Pt = Points --+---+---+---+---+---+---+---+---+ \n"); } if (i==17) { printf(" J = Joueur 8|"); } if( (i >= 3) && (i%2 ==1)) { for(j=0; j<8;j++){ numero = ((i-1)/2)-1; // fond bleu if (k==0) { if(tableau[numero][j] == 'J'){ //Color(14,1); printf(" %c",tableau[numero][j]); printf(" |"); } if(tableau[numero][j] == 'R'){ //Color(12,1); printf(" %c",tableau[numero][j]); printf(" |"); } if(tableau[numero][j] == 'N'){ //Color(0,1); printf(" %c |",tableau[numero][j]); } if(tableau[numero][j] == '1'){ //Color(5,1); printf(" %c |",tableau[numero][j]); } if(tableau[numero][j] == '2'){ Color(5,1); printf(" %c |",tableau[numero][j]); } k++; continue; } //fond bleu clair if(k==1) { if(tableau[numero][j] == 'J'){ Color(14,3); printf(" %c |",tableau[numero][j]); } if(tableau[numero][j] == 'R'){ Color(12,3); printf(" %c |",tableau[numero][j]); } if(tableau[numero][j] == 'N'){ Color(0,3); printf(" %c |",tableau[numero][j]); } if(tableau[numero][j] == '1'){ Color(5,3); printf(" %c |",tableau[numero][j]); } if(tableau[numero][j] == '2'){ Color(5,3); printf(" %c |",tableau[numero][j]); } k--; continue; } } if (j==7) printf("\n"); } if(k==0){ k++; break; } if(k==1){ k--; break; } } } } int nombreAlea (int Min, int Max){ return ((rand() % (int)(((Max) + 1) - (Min))) + (Min)); } void Color(int couleurDuTexte,int couleurDeFond) // fonction d'affichage de couleurs { HANDLE H=GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(H,couleurDeFond*16+couleurDuTexte); }