rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <windows.h>
#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);
}