Puissance 4

Contenu du snippet

IL s'agit d'un puissance 4 aux règles un peu différentes que j'ai fait avec DEV C++.(Il est possible de supprimer des pions lorsque le pion joué et un de vos autres pion encadrent trois pions de l'adversaire)

Source / Exemple :


# include <stdio.h>

//règle du jeu
void regle(char t[8][8])
{int i,j;
printf("\nLe but du jeu est d'alligner 4 pions identiques\n dans n'importe quelle direction.\nLe joueur 1 a le pion O et le joueur 2 le pion X.\n");
for (i=0;i<8;i++)
        {for (j=0;j<8;j++)
        	t[i][j]='.';
        }
system("pause");        
printf("Exemple:\n");
t[7][2]='O';
t[6][3]='O';
t[5][4]='O';
t[4][5]='O';
t[7][3]='X';
t[7][4]='X';
t[7][5]='X';
t[6][4]='X';
t[6][5]='O';
t[5][5]='X';
affichage(t);
printf("Dans ce cas le joueur 1 gagne.\n");
system("pause");
printf("\nLorsque le pion que vous jouez encadre 3 pions adverses\nces 3 pions diparaissent.\n");
system("pause");
for (i=0;i<8;i++)
        {for (j=0;j<8;j++)
        	t[i][j]='.';
        }
t[7][2]='O';
t[7][3]='X';
t[7][4]='X';
t[7][5]='X';
t[7][6]='O';
t[6][3]='O';
t[6][4]='O';
t[6][5]='O';
t[7][7]='X';
affichage(t);
printf("Le dernier pion joue est le O de la colonne 7.\nLes X en colonne 4, 5 et 6 vont alors disparaitre");
printf("\nLa grille devient alors :");
system("pause");
t[7][2]='O';
t[7][3]='O';
t[7][4]='O';
t[7][5]='O';
t[7][6]='O';
t[6][3]='.';
t[6][4]='.';
t[6][5]='.';
t[7][7]='X';
affichage(t);
printf("Grace a la supression 4 O sont allignes :le joueur 1 a gagne!\n");
system("pause");
printf("\n\nATTENTION: la partie va commence...\n");
system("pause");

}

/*AFFICHAGE du plateau de jeu*/

void affichage(char t[8][8])
{
int i,j;

printf("\n\n\n");

for (i=0;i<8;i++)
        {printf("                    ");
        for (j=0;j<8;j++)
                printf("   %c",t[i][j]);
        putchar('\n');
        putchar('\n');
        }
printf("                       1   2   3   4   5   6   7   8 \n");
}

/*POSITIONNEMENT des pions sur la grille de jeu*/

void placement(char t[8][8],int indiceC[8],int *pj,int *pcol,char a[100],char b[100])
{int c=9;
int col;
while (c>8 || c<1 || indiceC[c-1]<0)
        {if (*pj==1)
        	printf("\n%s entrez le numero de la colonne dans laquelle vous souhaitez jouer : ",a);
       	else
       		printf("\n%s entrez le numero de la colonne dans laquelle vous souhaitez jouer : ",b);
        scanf("%d",&c);
	        }

  • pcol=c-1;
if (*pj==1) {t[indiceC[*pcol]][*pcol]='O'; indiceC[*pcol]=indiceC[*pcol]-1;
  • pj=2;
} else {t[indiceC[*pcol]][*pcol]='X'; indiceC[*pcol]=indiceC[*pcol]-1;
  • pj=1;
} } /*DECALAGE*/ void decalagedroite(char t[8][8],int indiceC[8],int *pcol) {int c,i; /*indices de boucle*/ for(c=*pcol+1;c<=*pcol+3;c++) {i=0; while (indiceC[*pcol]+i>=0) {t[indiceC[*pcol]+i+1][c]=t[indiceC[*pcol]+i][c]; i=i-1; } t[0][c]='.'; indiceC[c]=indiceC[c]+1; } } void decalagegauche(char t[8][8],int indiceC[8],int *pcol) {int c,i; /*indices de boucle*/ for(c=*pcol-1;c>=*pcol-3;c--) {i=0; while (indiceC[*pcol]+i>=0) {t[indiceC[*pcol]+i+1][c]=t[indiceC[*pcol]+i][c]; i=i-1; } t[0][c]='.'; indiceC[c]=indiceC[c]+1; } } void decalagevertical(char t[8][8],int indiceC[8],int *pcol) { t[indiceC[*pcol]+4][*pcol]=t[indiceC[*pcol]+1][*pcol]; t[indiceC[*pcol]+3][*pcol]='.'; t[indiceC[*pcol]+2][*pcol]='.'; t[indiceC[*pcol]+1][*pcol]='.'; indiceC[*pcol]=indiceC[*pcol]+3; } void decalagediagodroitebas(char t[8][8],int indiceC[8],int *pcol) {int c,i,j=2; /*indices de boucle*/ for(c=*pcol+1;c<=*pcol+3;c++) {i=0; while (indiceC[*pcol]+i>=0) {t[indiceC[*pcol]+i+j][c]=t[indiceC[*pcol]+i+j-1][c]; i=i-1; } t[0][c]='.'; j=j+1; indiceC[c]=indiceC[c]+1; } } void decalagediagogauchebas(char t[8][8],int indiceC[8],int *pcol) {int c,i,j=2; /*indices de boucle*/ for(c=*pcol-1;c>=*pcol-3;c--) {i=0; while (indiceC[*pcol]+i>=0) {t[indiceC[*pcol]+i+j][c]=t[indiceC[*pcol]+i+j-1][c]; i=i-1; } t[0][c]='.'; j=j+1; indiceC[c]=indiceC[c]+1; } } void decalagediagodroitehaut(char t[8][8],int indiceC[8],int *pcol) {int c,i,j=0; /*indices de boucle*/ for(c=*pcol+1;c<=*pcol+3;c++) {i=0; while (indiceC[*pcol]+i>=0) {t[indiceC[*pcol]+i+j][c]=t[indiceC[*pcol]+i+j-1][c]; i=i-1; } t[0][c]='.'; j=j-1; indiceC[c]=indiceC[c]+1; } } void decalagediagogauchehaut(char t[8][8],int indiceC[8],int *pcol) {int c,i,j=0; /*indices de boucle*/ for(c=*pcol-1;c>=*pcol-3;c--) {i=0; while (indiceC[*pcol]+i>=0) {t[indiceC[*pcol]+i+j][c]=t[indiceC[*pcol]+i+j-1][c]; i=i-1; } t[0][c]='.'; j=j-1; indiceC[c]=indiceC[c]+1; } } /*TEST SUPPRESSION*/ int testsup(char t[8][8],int indiceC[8],int col) {int m=0,k; /*TEST pour la ligne à droite*/ if ((t[indiceC[col]+1][col+1]!='.') && (col<=3) && (t[indiceC[col]+1][col]!=t[indiceC[col]+1][col+1]) && (t[indiceC[col]+1][col+1]==t[indiceC[col]+1][col+2]) && (t[indiceC[col]+1][col+1]==t[indiceC[col]+1][col+3]) && (t[indiceC[col]+1][col]==t[indiceC[col]+1][col+4])) {decalagedroite(t,indiceC,&col); m=1; } /*TEST pour la ligne à gauche*/ if (t[indiceC[col]+1][col-1]!='.' && col>=4 && t[indiceC[col]+1][col]!=t[indiceC[col]+1][col-1] && t[indiceC[col]+1][col-1]==t[indiceC[col]+1][col-2] && t[indiceC[col]+1][col-1]==t[indiceC[col]+1][col-3] && t[indiceC[col]+1][col]==t[indiceC[col]+1][col-4]) {decalagegauche(t,indiceC,&col); m=1; } /*TEST pour la diagonale en bas à droite*/ if (col<=3 && indiceC[col]<=3 && t[indiceC[col]+2][col+1]!='.' && t[indiceC[col]+1][col]!=t[indiceC[col]+2][col+1] && t[indiceC[col]+2][col+1]==t[indiceC[col]+3][col+2] && t[indiceC[col]+2][col+1]==t[indiceC[col]+4][col+3] && t[indiceC[col]+1][col]==t[indiceC[col]+5][col+4]) {decalagediagodroitebas(t,indiceC,&col); m=1; } /*TEST pour la diagonale en bas à gauche*/ if (col>=4 && indiceC[col]<=3 && t[indiceC[col]+2][col-1]!='.' && t[indiceC[col]+1][col]!=t[indiceC[col]+2][col-1] && t[indiceC[col]+2][col-1]==t[indiceC[col]+3][col-2] && t[indiceC[col]+2][col-1]==t[indiceC[col]+4][col-3] && t[indiceC[col]+1][col]==t[indiceC[col]+5][col-4]) {decalagediagogauchebas(t,indiceC,&col); m=1; } /*TEST pour la diagonale en haut à droite*/ if (col<=3 && indiceC[col]>=4 && t[indiceC[col]][col+1]!='.' && t[indiceC[col]+1][col]!=t[indiceC[col]][col+1] && t[indiceC[col]][col+1]==t[indiceC[col]-1][col+2] && t[indiceC[col]][col+1]==t[indiceC[col]-2][col+3] && t[indiceC[col]+1][col]==t[indiceC[col]-3][col+4]) {decalagediagodroitehaut(t,indiceC,&col); m=1; } /*TEST pour la diagonale en haut à gauche*/ if (col>=4 && indiceC[col]>=4 && t[indiceC[col]][col-1]!='.' && t[indiceC[col]+1][col]!=t[indiceC[col]][col-1] && t[indiceC[col]][col-1]==t[indiceC[col]-1][col-2] && t[indiceC[col]][col-1]==t[indiceC[col]-2][col-3] && t[indiceC[col]+1][col]==t[indiceC[col]-3][col-4]) {decalagediagogauchehaut(t,indiceC,&col); m=1; } /*TEST pour la verticale*/ if (indiceC[col]<=3 && t[indiceC[col]+1][col]!=t[indiceC[col]+2][col] && t[indiceC[col]+2][col]==t[indiceC[col]+3][col] && t[indiceC[col]+2][col]==t[indiceC[col]+4][col] && t[indiceC[col]+1][col]==t[indiceC[col]+5][col]) {decalagevertical(t,indiceC,&col); m=1; } if (m==1) {k=testvictoiresupp(t); return(k); } else return(3); } /*VERIFICATION du gagnant*/ int verif(char t[8][8],int i,int j,int res) {int m=res; if (t[i][j]=='O') {if (m==0 || m==1) m=1; else m=12; } else {if (m==0 || m==2) m=2; else m=12; } return(m); } /*TEST après suppression*/ int testvictoiresupp(char t[8][8]) {int i,j,res=0; for(i=0;i<8;i++) {for(j=0;j<8;j++) {/*Test horizontal*/ if (res!=12 && t[i][j]!='.' && j<=4 && t[i][j]==t[i][j+1] && t[i][j]==t[i][j+2] && t[i][j]==t[i][j+3]) res=verif(t,i,j,res); /*Test diagonale principale*/ if (res!=12 && j<=4 && i<=4 && t[i][j]!='.' && t[i][j]==t[i+1][j+1] && t[i][j]==t[i+2][j+2] && t[i][j]==t[i+3][j+3]) res=verif(t,i,j,res); /*Test diagonale secondaire*/ if (res!=12 && j<=4 && i>=3 && t[i][j]!='.' && t[i][j]==t[i-1][j+1] && t[i][j]==t[i-2][j+2] && t[i][j]==t[i-3][j+3]) res=verif(t,i,j,res); /*Test vertical*/ if (res!=12 && i<=4 && t[i][j]!='.' && t[i][j]==t[i+1][j] && t[i][j]==t[i+2][j] && t[i][j]==t[i+3][j]) res=verif(t,i,j,res); } } return(res); } /*TEST pour la victoire s'il n'y a pas de suppression*/ int testvictoire(char t[8][8],int indiceC[8],int col) {int i,j,res=0; /*Test horizontal*/ for(i=0;i<8;i++) {if (i<=4 && t[indiceC[col]+1][i+1]!='.' && t[indiceC[col]+1][i]==t[indiceC[col]+1][i+1] && t[indiceC[col]+1][i]==t[indiceC[col]+1][i+2] && t[indiceC[col]+1][i]==t[indiceC[col]+1][i+3]) res=verif(t,indiceC[col]+1,i,res); } /*Test diagonale principale*/ i=indiceC[col]+1-col; j=0; while (i<=4 && j<=4) {if (t[i+1][j+1]!='.' && t[i][j]==t[i+1][j+1] && t[i][j]==t[i+2][j+2] && t[i][j]==t[i+3][j+3]) {res=verif(t,i,j,res);} i=i+1; j=j+1; } /*Test diagonale secondaire*/ i=col+indiceC[col]-6; j=7; while (i<=4 && j>=3) {if (t[i+1][j-1]!='.' && t[i][j]==t[i+1][j-1] && t[i][j]==t[i+2][j-2] && t[i][j]==t[i+3][j-3]) {res=verif(t,i,j,res);} i=i+1; j=j-1; } /*Test vertical*/ {if (indiceC[col]<=3 && t[indiceC[col]+2][col]!='.' && t[indiceC[col]+1][col]==t[indiceC[col]+2][col] && t[indiceC[col]+1][col]==t[indiceC[col]+3][col] && t[indiceC[col]+1][col]==t[indiceC[col]+4][col]) res=verif(t,indiceC[col]+1,col,res); } return(res); } main() {int i,j,coup=0,pt1=0,pt2=0; /*indices de boucle*/ int indice[8]; /*tableau d'indices de colonne*/ int rejou=1,joueur=1; /*numéro du joueur*/ int colonne; int r; /*colonne joueur réelle*/ int g=0; /*victoire*/ char tab[8][8],a[100],b[100]; /*matrice du jeu*/ printf("Par Boudart Laurent\net Maka Laurent\n GIS1 Groupe2\n"); printf("\nSouhaitez vous prendre connaissance de la regle? (Oui=1 ou Non=2) : "); scanf("%d",&r); if (r==1) regle(tab); printf("Entrez le nom du joueur 1 : "); scanf("%s",a); printf("Entrez le nom du joueur 2 : "); scanf("%s",b); while (rejou==1) { for (i=0;i<8;i++) {indice[i]=7; for (j=0;j<8;j++) tab[i][j]='.'; } system("cls"); while (g==0 && (indice[0]>=0 || indice[1]>=0 || indice[2]>=0 || indice[3]>=0 || indice[4]>=0 || indice[5]>=0 || indice[6]>=0 || indice[7]>=0)) {printf("nombre de pions joues: %d\n\n%s=O\t%s=X\n%s : %d point(s)\t%s : %d point(s)",coup,a,b,a,pt1,b,pt2); affichage(tab); placement(tab,indice,&joueur,&colonne,a,b); g=testsup(tab,indice,colonne); affichage(tab); if (g==3) g=testvictoire(tab,indice,colonne); coup=coup+1; } if (g==1) {printf("\nBRAVO!!! %s vous avez gagne.\n",a); pt1=pt1+1;} else {if (g==2) {printf("\nBRAVO!!! %s vous avez gagne.\n",b); pt2=pt2+1;} else if(g==12) printf("\nLa partie est nulle.\n"); else printf("\nLa grille est pleine : la partie est nulle.\n"); } printf("\nResultats :\n%s : %d point(s)\n%s : %d point(s)\n",a,pt1,b,pt2); printf("\nVoulez vous rejouer (1=Oui 2=Non) : "); scanf("%d",&rejou); g=0; coup=0; system("cls"); } system("cls"); printf("La partie est termine\n\n"); printf("\nResultats :\n%s : %d point(s)\n%s : %d point(s)\n",a,pt1,b,pt2); if (pt1>pt2) printf("\n%s a gagne!!!!!",a); else {if (pt2>pt1) printf("\n%s a gagne!!!!!",b); else printf("\n%s et %s, vous etes ex-equao\n",a,b); } system("pause");

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.