#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
// Début du programme principal
int main()
{
//Déclaration des variables
int i,j,num,num1,ligne;
int h1,h2,h3,h4,h5,h6,i1,i2,i3,i4,i5,i6;
char k;
int matchnul;
int game=1;
int rejoue;
char regles;
int quitter;
int etiquette;
char jeu[6][6];
int gagne, gagne2;
int choix;
char nom1[20], nom2[20],rep,o;
//Initialisation de certaines variables
regles=0;
//Affichage de la page de presentation:
while(game==1)
{rejoue=0;
gagne=0;
gagne2=0;
k='a';
i1=0;i2=0;i3=0;i4=0;i5=0;i6=0;
h1=0;h2=0;h3=0;h4=0;h5=0;h6=0;
matchnul=0;
system("color E0");
printf("\n\n\n\n\a");
printf("\t\t********************************************\n");
printf("\t\t* *\n");
printf("\t\t* PUISSANCE 4 *\n");
printf("\t\t* par *\n");
printf("\t\t* Leopold Michaud *\n");
printf("\t\t* *\n");
printf("\t\t********************************************\n\n\n");
printf("%c ",17);
printf("bienvenue dans le puissance 4 %c\n\nvoulez vous lire les regles ? (o/n)\n\n",16);
scanf("%c", ®les);
if (regles=='o')
{
system("cls");
printf("Le plateau de jeu est une grille verticale.\nLorsque l'on glisse un pion dans une colonne, le pion descend jusqu'en bas.\nLe jeu se joue à deux. Chaque joueur dispose de son type de pion (%c et %c).\nTour à tour les joueurs posent un pion dans une colonne.\nCelui qui gagne est celui qui aligne le premier\n au moins quatre pions de sa couleur.\nSi la grille est pleine, sans avoir aligné quatre pions, \nc'est un match null.\n\n", 1, 2);
}
printf("menu: choisissez votre mode de jeu\n\n");
printf("1) Joueurs Humains\n");
printf("\n2) Joueur vs ordi\n\n");
scanf("%d", &choix);
printf("\n\n\n");
system("cls");
switch(choix)
{
case 1 :
choix=0;
//Saisie des noms des deux joueurs:
printf("\n\n\n\tNom du premier joueur:\n\n");
scanf("%s",nom1);
printf("\n\n");
printf("\n\n\tNom du second joueur:\n\n");
scanf("%s",nom2);
system("cls");
// Initialisation du tableau: toutes les cases sont vides
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
jeu[i][j]=' ';
}
}
//Affichage du plateau de jeu vide
printf("\n\n | 1 | 2 | 3 | 4 | 5 | 6 |\n");
printf(" |---|---|---|---|---|---|\n");
for(j=5;j>=0;j--)
{
printf("%c",k);
k++;
for(i=0;i<6;i++)
{
printf("| %c",jeu[i][j]);
}
printf("|\n");
printf(" |---|---|---|---|---|---|\n");
}
printf("\n\n\n");
k='a';
//Le joueur 1 joue
while (gagne!=1 && gagne!=2)
{
matchnul++;
if(matchnul>35)
{
printf("match nul !\n\n");
printf("voulez vous rejouer?\n1) oui\n\n2) non\n\n");
scanf("%d",&rejoue);
gagne=0;
gagne2=0;
k=0;
i1=0;i2=0;i3=0;i4=0;i5=0;i6=0;
h1=0;h2=0;h3=0;h4=0;h5=0;h6=0;
system("cls");
break;
}
printf("\nA vous de jouer %s, donner un numero de colonne (de 1 à 6):\n",nom1);
scanf("%d",&num);
printf("\n");
//Test sur la hauteur des colonnes, si elle sont remplies ou non
if((num==1 && h1>5) || (num==2 && h2>5) || (num==3 && h3>5) || (num==4 && h4>5) || (num==5 && h5>5) || (num==6 && h6>5))
{
printf("la colonne %d est pleine, %s donner un numero de colone autre que %d \n",num,nom1,num);
scanf("%d",&num);
}
//Donne la valeur 1 à la case jouée par le joueur 1
if(num==1)
jeu[num-1][h1]=1;
if(num==2)
jeu[num-1][h2]=1;
if(num==3)
jeu[num-1][h3]=1;
if(num==4)
jeu[num-1][h4]=1;
if(num==5)
jeu[num-1][h5]=1;
if(num==6)
jeu[num-1][h6]=1;
system("cls");
printf("\n");
//Vérification horizontale pour savoir si le joueur a gagné:on balaye toutes les lignes de 0 à 6 en vérifiant 4 cases à chaque foisSi 4 cases qui se suivent valent 1 alors gagne prend pour valeur 1
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(jeu[i][j]==1 && jeu[i+1][j]==1 && jeu[i+2][j]==1 && jeu[i+3][j]==1)
gagne=1;
}
}
//Même chose mais verticalement maintenant
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
if(jeu[i][j]==1 && jeu[i][j+1]==1 && jeu[i][j+2]==1 && jeu[i][j+3]==1)
gagne=1;
}
}
//Et diagonale bas gauche vers haut droit
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(jeu[i][j]==1 && jeu[i+1][j+1]==1 && jeu[i+2][j+2]==1 && jeu[i+3][j+3]==1)
gagne=1;
}
}
//Même chose pour les diagonales bas droite vers haut gauche
for(j=0;j<6;j++)
{
for(i=6;i>=0;i--)
{
if(jeu[i][j]==1 && jeu[i-1][j+1]==1 && jeu[i-2][j+2]==1 && jeu[i-3][j+3]==1)
gagne=1;
}
}
// Affichage de la grille
printf("\n | 1 | 2 | 3 | 4 | 5 | 6 |\n");
printf(" |---|---|---|---|---|---|\n");
for(j=5;j>=0;j--)
{
printf("%c",k);
k++;
for(i=0;i<6;i++)
{
printf("| %c ",jeu[i][j]);
}
printf("|\n");
printf(" |---|---|---|---|---|---|\n");
}k='a';
// On incremente la hauteur d'une colonne à chaque fois que celle si est jouée:
if(num==1)
jeu[num][h1++];
if(num==2)
jeu[num][h2++];
if(num==3)
jeu[num][h3++];
if(num==4)
jeu[num][h4++];
if(num==5)
jeu[num][h5++];
if(num==6)
jeu[num][h6++];
if(gagne==1)
{
printf("\n\n\n\a%s gagne\a\n\n\n",nom1);
printf("voulez vous rejouer?\n1) oui\n\n2) non\n\n");
scanf("%d",&game);
system("cls");
break;
}
//meme demarche pour le joueur 2
printf("\nA vous de jouer %s, donner un numero de colonne (de 1 à 6):\n",nom2);
scanf("%d",&num1);
printf("\n");
if((num1==1 && h1>5) || (num1==2 && h2>5) || (num1==3 && h3>5) || (num1==4 && h4>5) || (num1==5 && h5>5) || (num1==6 && h6>5))
{
printf("la colonne %d est pleine, %s donner un numero de colone autre que %d \n",num1,nom1,num);
scanf("%d",&num1);
}
if(num1==1)
jeu[num1-1][h1]=2;
if(num1==2)
jeu[num1-1][h2]=2;
if(num1==3)
jeu[num1-1][h3]=2;
if(num1==4)
jeu[num1-1][h4]=2;
if(num1==5)
jeu[num1-1][h5]=2;
if(num1==6)
jeu[num1-1][h6]=2;
system("cls");
printf("\n");
for(i=0;i<4;i++)
{
for(j=0;j<6;j++)
{
if(jeu[i][j]==2 && jeu[i+1][j]==2 && jeu[i+2][j]==2 && jeu[i+3][j]==2)
gagne=2;
}
}
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
if(jeu[i][j]==2 && jeu[i][j+1]==2 && jeu[i][j+2]==2 && jeu[i][j+3]==2)
gagne=2;
}
}
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(jeu[i][j]==2 && jeu[i+1][j+1]==2 && jeu[i+2][j+2]==2 && jeu[i+3][j+3]==2)
gagne=2;
}
}
for(j=0;j<6;j++)
{
for(i=5;i>=0;i--)
{
if(jeu[i][j]==2 && jeu[i-1][j+1]==2 && jeu[i-2][j+2]==2 && jeu[i-3][j+3]==2)
gagne=2;
}
}
printf("\n | 1 | 2 | 3 | 4 | 5 | 6 |\n");
printf(" |---|---|---|---|---|---|\n");
for(j=5;j>=0;j--)
{
printf("%c",k);
k++;
for(i=0;i<6;i++)
{
printf("| %c ",jeu[i][j]);
}
printf("|\n");
printf(" |---|---|---|---|---|---|\n");
}k='a';
if(num1==1)
jeu[num1][h1++];
if(num1==2)
jeu[num1][h2++];
if(num1==3)
jeu[num1][h3++];
if(num1==4)
jeu[num1][h4++];
if(num1==5)
jeu[num1][h5++];
if(num1==6)
jeu[num1][h6++];
if(gagne==2)
{
printf("\n\n\n\a%s gagne\a\n\n\n",nom1);
printf("voulez vous rejouer?\n1) oui\n\n2) non\n\n");
scanf("%d",&game);
system("cls");
break;
}
}
break;
case 2:
{
int hasard ;
srand ( time(NULL) );
// Initialisation du tableau toutes les cases prennent la valeur 0
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
jeu[i][j]=' ';
}
}
//Affichage du plateau de jeu vide
printf("\n\n| 1 | 2 | 3 | 4 | 5 | 6 |\n");
printf("|---|---|---|---|---|---|\n");
for(j=5;j>=0;j--)
{
for(i=0;i<6;i++)
{
printf("| %c",jeu[i][j]);
}
printf("|\n");
printf("|---|---|---|---|---|---|\n");
}
printf("\n\n\n");
//Le joueur 1 joue
while (gagne!=1 && gagne!=2)
{
printf("\n\nA vous de jouer, donner un numero de colonne (de 1 à 6):\n");
scanf("%d",&num);
printf("\n");
//Test sur la hauteur des colonnes, si elle sont remplies ou non
if((num==1 && h1>5) || (num==2 && h2>5) || (num==3 && h3>5) || (num==4 && h4>5) || (num==5 && h5>5) || (num==6 && h6>5))
{
printf("la colonne %d est pleine, %s donner un numero de colone autre que %d \n",num,nom1,num);
num = -1;
}
//Donne la valeur 1 à la case jouée par le joueur 1
if(num==1)
jeu[num-1][h1]=1;
if(num==2)
jeu[num-1][h2]=1;
if(num==3)
jeu[num-1][h3]=1;
if(num==4)
jeu[num-1][h4]=1;
if(num==5)
jeu[num-1][h5]=1;
if(num==6)
jeu[num-1][h6]=1;
system("cls");
printf("\n");
//Vérification horizontale pour savoir si le joueur a gagné:on balaye toutes les lignes de 0 à 6 en vérifiant 4 cases à chaque foisSi 4 cases qui se suivent valent 1 alors gagne prend pour valeur 1
for(i=0;i<4;i++)
{
for(j=0;j<5;j++)
{
if(jeu[i][j]==1 && jeu[i+1][j]==1 && jeu[i+2][j]==1 && jeu[i+3][j]==1)
gagne=1;
}
}
//Même chose mais verticalement maintenant
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
if(jeu[i][j]==1 && jeu[i][j+1]==1 && jeu[i][j+2]==1 && jeu[i][j+3]==1)
gagne=1;
}
}
//Et diagonale bas gauche vers haut droit
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(jeu[i][j]==1 && jeu[i+1][j+1]==1 && jeu[i+2][j+2]==1 && jeu[i+3][j+3]==1)
gagne=1;
}
}
//Même chose pour les diagonales bas droite vers haut gauche
for(j=0;j<6;j++)
{
for(i=6;i>=0;i--)
{
if(jeu[i][j]==1 && jeu[i-1][j+1]==1 && jeu[i-2][j+2]==1 && jeu[i-3][j+3]==1)
gagne=1;
}
}
// Affichage de la grille
printf("\n| 1 | 2 | 3 | 4 | 5 | 6 |\n");
printf("|---|---|---|---|---|---|\n");
for(j=5;j>=0;j--)
{
for(i=0;i<6;i++)
{
printf("| %c ",jeu[i][j]);
}
printf("|\n");
printf("|---|---|---|---|---|---|\n");
}
// On incremente la hauteur d'une colonne à chaque fois que celle si est jouée:
if(num==1)
jeu[num][h1++];
if(num==2)
jeu[num][h2++];
if(num==3)
jeu[num][h3++];
if(num==4)
jeu[num][h4++];
if(num==5)
jeu[num][h5++];
if(num==6)
jeu[num][h6++];
if(gagne==1)
{
if(gagne==1)
printf("\n\n\n\avous gagnez\a\n\n\n");
printf("voulez vous rejouer?\n1) oui\n\n2) non\n\n");
scanf("%d",&game);
system("cls");
break;
}
//On remplace la valeur entrée par le joueur 2 par un nombre sélectonné aléatoirement entre 1 et 6
hasard= rand() % 6 ;
if(hasard==1)
jeu[hasard-1][h1]=2;
if(hasard==2)
jeu[hasard-1][h2]=2;
if(hasard==3)
jeu[hasard-1][h3]=2;
if(hasard==4)
jeu[hasard-1][h4]=2;
if(hasard==5)
jeu[hasard-1][h5]=2;
if(hasard==6)
jeu[hasard-1][h6]=2;
system("cls");
printf("\n");
for(i=0;i<4;i++)
{
for(j=0;j<6;j++)
{
if(jeu[i][j]==2 && jeu[i+1][j]==2 && jeu[i+2][j]==2 && jeu[i+3][j]==2)
gagne=2;
}
}
for(i=0;i<6;i++)
{
for(j=0;j<3;j++)
{
if(jeu[i][j]==2 && jeu[i][j+1]==2 && jeu[i][j+2]==2 && jeu[i][j+3]==2)
gagne=2;
}
}
for(i=0;i<6;i++)
{
for(j=0;j<6;j++)
{
if(jeu[i][j]==2 && jeu[i+1][j+1]==2 && jeu[i+2][j+2]==2 && jeu[i+3][j+3]==2)
gagne=2;
}
}
for(j=0;j<6;j++)
{
for(i=5;i>=0;i--)
{
if(jeu[i][j]==2 && jeu[i-1][j+1]==2 && jeu[i-2][j+2]==2 && jeu[i-3][j+3]==2)
gagne=2;
}
}
printf("\n| 1 | 2 | 3 | 4 | 5 | 6 |\n");
printf("|---|---|---|---|---|---|\n");
for(j=5;j>=0;j--)
{
for(i=0;i<6;i++)
{
printf("| %c ",jeu[i][j]);
}
printf("|\n");
printf("|---|---|---|---|---|---|\n");
}
if(hasard==1)
jeu[hasard][h1++];
if(hasard==2)
jeu[hasard][h2++];
if(hasard==3)
jeu[hasard][h3++];
if(hasard==4)
jeu[hasard][h4++];
if(hasard==5)
jeu[hasard][h5++];
if(hasard==6)
jeu[hasard][h6++];
if(gagne==2)
{
if(gagne==2)
{
printf("\n\n\n\avous avez perdu\a\n\n\n");
printf("voulez vous rejouer?\n1) oui\n\n2) non\n\n");
scanf("%d",&game);
system("cls");
break;
}
}
}
break ;
}
//en cas de mauvaise entrée...
default:
printf("le nombre ne correspond à aucun choix,\nchoisissez entre 1 et 2. ");
}
}
}