Ben qui ne connait pas le puissance 4 !! Le voici fait en C avec Microsoft Visual C++:
Source / Exemple :
#include <stdio.h>
#include <stdlib.h>
// FONCTIONS
void Initialisation(int*,int*);
void Affichage(int*);
int Joueur1(int*,int*,int);
int Recherche(int*,int*,int);
// MAIN
void main (void)
{
int tab[6][7],va[7];
int y,c,compt=0,joueur;
char recom;
do
{
y=0;
joueur=2;
Initialisation(&tab[0][0],&va[0]);
do
{
system("cls");
joueur=joueur%2+1;
Affichage(&tab[0][0]);
printf("\n");
c=Joueur1(&tab[0][0],&va[0],joueur);
compt++;
if(compt>6)
{
y=Recherche(&tab[0][0],&va[0],c);
if(compt==6*7 && y==0)
{
y=2;
}
switch(y)
{
case 1 : system("cls");
Affichage(&tab[0][0]);
printf("\t\t\t ** JOUEUR %d a gagne !! **",joueur);
break;
case 2 : system("cls");
Affichage(&tab[0][0]);
printf("\t\t\t ** Match Null ! **");
break;
}
}
}while(y==0);
printf("\n\n");
// Boucle "RECOMMENCER"!
do
{ fflush(stdin);
printf("\t\tVoulez-vous recommencer ? (o/n) : ");
scanf("%c",&recom);
}while(recom!='o' && recom!='n');
printf("\n");
}while (recom=='o');
}
/***************************************************
INPUT : Adresse de début du tableau et du vecteur
d'occupation.
PROCESS : Initialisation des valeurs du tableau
et du vecteur(tab=250 et va=6).
OUTPUT: /
void Initialisation(int *ptab,int *pva)
{
int i;
for(i=0;i<6*7;i++)
{
ptab++;
}
for(i=0;i<7;i++)
{
pva++;
}
}
/*********************************************************
INPUT : Adresse de début du tableau, du vecteur et le
numéro correspondant au joueur.
PROCESS : Introduction des valeurs dans le tableau.
(Joueur1 = 1 et Joueur2 = 2)
OUTPUT : Numéro de la colonne (c)
int Joueur1(int *ptab,int *pva,int joueur)
{
int c,x,*pdeb;
pdeb=ptab;
do
{
x=0;
do
{ printf("JOUEUR %d [%c] > colonne (1-7) : ",joueur,joueur);
scanf("%d",&c);
}while(c<1 || c>7);
pva=pva+(c-1);
if(*pva>0)
{
ptab=(ptab+((*pva-1)*7))+(c-1);
}
else
{
x=1;
pva=pva-(c-1);
ptab=pdeb;
}
}while(x!=0);
return(c);
}
/*****************************************************
INPUT : Adresse de début du tableau.
PROCESS : Affichage des valeurs comprisent dans le
tableau.
OUTPUT : /
void Affichage(int *ptab)
{
int i,j;
printf("\n");
printf("\t******************* PUISSANCE 4 *******************\n\n");
for(i=0;i<6;i++)
{
printf("\t\t\t");
for(j=0;j<7;j++)
{
printf("%c ",*ptab);
ptab++;
}
printf("\n\n");
}
printf("\n\t\t\t");
for(i=0;i<7;i++)
{
printf("%d ",i+1);
}
printf("\n\n\n");
}
/*****************************************************
INPUT : Adresse de début du tableau, du vecteur plus
le numéro de colonne.
PROCESS : Recherche des occurences dans le taleau (4)
OUTPUT : Renvoit la valeur de "y".
int Recherche(int *ptab,int *pva,int c)
{
int x=1,compt=1,compt2=0,y=0;
pva=pva+(c-1);
ptab=(ptab+(*pva*7))+(c-1);
// Vérification de la ligne horizontale
while(*ptab==*(ptab-x) && y!=1 && c>1) //GAUCHE
{
compt++;
compt2++;
c--;
x++;
if(compt==4)
{
y=1;
}
}
c=c+compt2;
compt2=0;
x=1;
while(*ptab==*(ptab+x) && y!=1 && c<7) //DROITE
{
compt++;
compt2++;
c++;
x++;
if(compt==4)
{
y=1;
}
}
c=c-compt2;
compt2=0;;
x=7;
compt=1;
// Vérification de la ligne verticale (vers le bas seulement !)
while(*ptab==*(ptab+x) && y!=1 && (*pva+compt2)<5)
{
compt++;
compt2++;
x=x+7;
if(compt==4)
{
y=1;
}
}
x=8;
compt2=0;
compt=1;
// Vérification de la diagonale principale
while(*ptab==*(ptab-x) && y!=1 && c>1 && (*pva-compt2)>0) //GAUCHE
{
compt++;
compt2++;
c--;
x=x+8;
if(compt==4)
{
y=1;
}
}
c=c+compt2;
compt2=0;
x=8;
while(*ptab==*(ptab+x) && y!=1 && c<7 && (*pva+compt2)<5) //DROITE
{
compt++;
compt2++;
c++;
x=x+8;
if(compt==4)
{
y=1;
}
}
c=c-compt2;
compt2=0;
x=6;
compt=1;
// Vérification de la diagonale secondaire
while(*ptab==*(ptab+x) && y!=1 && c>1 && (*pva+compt2)<5) //GAUCHE
{
compt++;
compt2++;
c--;
x=x+6;
if(compt==4)
{
y=1;
}
}
c=c+compt2;
compt2=0;
x=6;
while(*ptab==*(ptab-x) && y!=1 && c<7 && (*pva-compt2)>0) //DROITE
{
compt++;
compt2++;
c++;
x=x+6;
if(compt==4)
{
y=1;
}
}
return(y);
}
Conclusion :
Amusez-vous bien avec et si vous trouvez des bugs , n'hésitez pas à me le dire !!!
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.