Mon premier code en C++ alors soyez indulgent!
C'est un puissance 4 qui se joue sur console, vous jouez seul contre l'ordi.
On peut choisir aussi la profondeur de calcul.
Amusez-vous bien!
Source / Exemple :
#include <iostream>
#include <cstdlib>
using namespace std;
int gagne(int c,int l,int J,int tab[7][6]) // renvoie J si le joueur gagne, sinon 0.
{
int j[4];
j[0]=1;
j[1]=1;
j[2]=1;
j[3]=1;
int i;
for (i=1; i<4; i++)
{
if (c-i>-1)
{
if ((tab[c-i][l]==J)&&(j[0]==i)) j[0]++;
if ((l-i>-1)&&(j[1]==i)) {if(tab[c-i][l-i]==J) j[1]++;}
if ((l+i<6)&&(j[2]==i)) {if(tab[c-i][l+i]==J) j[2]++;}
}
if ((l-i>-1)&&(j[3]==i)) {if(tab[c][l-i]==J) j[3]++;}
}
int k[3];
k[0]=1;
k[1]=1;
k[2]=1;
for (i=1; i<4; i++)
{
if (c+i<7)
{
if ((tab[c+i][l]==J)&&(k[0]==i)) k[0]++;
if ((l-i>-1)&&(k[2]==i)) {if(tab[c+i][l-i]==J) k[2]++;}
if ((l+i<6)&&(k[1]==i)) {if(tab[c+i][l+i]==J) k[1]++;}
}
}
i=0;
if ((k[0]+j[0]>=5)||(k[1]+j[1]>=5)||(k[2]+j[2]>=5)||(j[3]==4)) i=J;
return i;
}
int IA(int I,int J,int tab[7][6],int colonne[7],int c)
{
I--; // on descend dans la profondeur du calcul
int s;
if (gagne(c,colonne[c],J,tab)==0) // si ce que je joue ne me fait pas tout de suite gagner
{
s=0;
if (I!=0)
{
int r,i,l,g,h;
l=colonne[c]; // on joue la colonne c
tab[c][l]=J;
colonne[c]++;
r=0;
J++; // changement de joueur
if (J==3) J=1;
for (i=0;i<7;i++) // on regarde tous les coups possibles
{
if (colonne[i]==6) r++;
else
{
g=IA(I,J,tab,colonne,i);
if (g==J) s=J; else {if (g!=0) r++;}
}
}
J++;
if (J==3) J=1;
if (r==7) s=J; // si toutes les solutions mènent à perdre...
colonne[c]--;
tab[c][l]=0;
}
}
else s=J;
I++;
return s; // s prend la valeur du joueur qui gagne, 0 si personne ne gagne
}
void affichageTab(int tab[7][6]) // affiche le tableau!!!
{
int i,j;
cout<<endl;
for (i=5;i>=0;i--)
{
cout<<" | ";
for (j=0;j<7;j++)
{
if (tab[j][i]==0) cout<<" ";
if (tab[j][i]==1) cout<<"X";
if (tab[j][i]==2) cout<<"O";
cout<<" ";
}
cout<<"|"<<endl<<" |---------------|"<<endl;
}
cout<<" # 0 1 2 3 4 5 6 #"<<endl<<endl;
}
int main()
{
while(1)
{
int colonne[7]; // donne le nombre de jetons sur chaque colonne
int tab[7][6];
int i,j;
for (i=0; i<7; i++) // mise a zéro du tableau et des colonnes
{
colonne[i]=0;
for (j=0; j<6; j++)
{
tab[i][j]=0;
}
}
int I; // Intelligence de l'ordi
cout << endl << " *****************" << endl << " * puissance 4 *" << endl << " *****************" << endl << endl << "intelligence de l'ordi? (1 à 10)" << endl;
cin>>I; //intelligence ordi
int J; // Joueur en cours
cout<<"qui commence?(1=>ordi 2=>toi)"<<endl;
cin>>J;
int g=0; //g=0 => le jeu continue ; g=1 => ordi gagne ; g=2 => tu gagnes ; g=3 => égalité
int c;
int l;
int compteur;
compteur=0;
while (g==0) // tant que personne n'a gagné...
{
if (compteur==42) {g=3;break;} // égalité
affichageTab(tab);
if (J==2) // si c'est toi qui joue...
{
cout<<endl<<"colonne?(0 à 6) (tu es les ronds!!!)"<<endl;
do
{
cin>>c; //colonne
if(colonne[c]>5) {cout<<"cette colonne est pleine"<<endl;}
}
while(colonne[c]>5);
}
else // si c'est l'ordi qui joue
{
cout<<endl<<"laisse-moi le temps de réfléchir..."<<endl;
int c3[7]={0,6,5,1,2,4,3}; // c3 désigne l'ordre de préférence, du moins vers le plus.
int r[7];
int c2;
c=-1; // colonne qu'on va jouer
for (c2=0;c2<7;c2++) // on regarde d'abord si l'ordi peut gagner en un endroit
{
if (colonne [c3[c2]]==6) r[c3[c2]]=-1;
else {r[c3[c2]]=IA(I,J,tab,colonne,c3[c2]); if (r[c3[c2]]==J) {c=c3[c2];break;}}
}
if (c==-1) {for (c2=0;c2<7;c2++) {if (r[c3[c2]]==0) c=c3[c2];}} // on regarde si l'ordi peut ne pas perdre
if (c==-1) {for (c2=0;c2<7;c2++) {if (r[c3[c2]]!=-1) c=c3[c2];}} // on regarde ou l'ordi peut jouer
cout<<"je joue la colonne "<<c<<endl;
}
l=colonne[c]; //ligne
tab [c][l]=J;
colonne[c]++;
g=gagne(c,l,J,tab);
J++;
if (J==3) J=1;
compteur++;
}
affichageTab(tab);
if(g==1) cout<<endl<<"dommage pour toi!!"<<endl;
if(g==2) cout<<endl<<"Mais tu est un dieu!!!!"<<endl;
if(g==3) cout<<endl<<"égalité"<<endl;
system("PAUSE");
}
return 0;
}
Conclusion :
Je compte modifier légerement le code en utilisant les pointeurs pour les tableaux, si vous avez des conseils, je suis preneur.
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.