Accueil > > > UN PUISSANCE 4 TOUT SIMPLE
UN PUISSANCE 4 TOUT SIMPLE
Information sur la source
Description
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
- #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;
- }
#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.
Historique
- 11 mai 2007 11:41:13 :
- Quelques modifications mineures et ajout de commentaires.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
please..J'aimerai avoir un exemple de puissance 4 avec IA [ par scorpiwolf ]
Si quelqu'un a un puissance 4 avec intelligence artificielle donc mode 1 joueur, j'aimerai l'avoir come exemple, je vous remercie...
IA de jeu d'échecs [ par GoldenEye ]
Suite à de nombreuses questions sur le sujet (pas forcément sur ce site) et même s'il n'est pas dans mes habitudes de faire du racolage, j'ai mis en l
Puissance4 en C "HELP" [ par Strange12 ]
Je recherche un fichier source en C compatible avec Linux du jeu Puissance 4 si possible relativement simple car je ne suis pas une lumière en program
AU SECOURS !!! [ par petronius ]
je viens de trouver un probleme tres interessant :j'ai fait un jeu avec des IA (3) en directx, et donc un timer de 100ms qui lance les differentes IA
Puissance4 en 3D [ par nathounet26 ]
> J'ai besoin urgemment d'une source d'un jeu de puissance4 en MFC (C++) question de vie ou de mort!!!
Concours IA (Intelligence Artificielle) [ par ynizon ]
Je suis a la recherche de participants pour un ptit jeu sympa qui ressemble aux dames chinoises. Le but etant que chacun developpe sa propre IA, et l'
Debutant total IA cherche infos [ par Wett ]
Ben tout est dans le titre lol ;)Je sais pas si c'est vraiment le meilleur endroit pour demander ca mais je trouve le sujet franchement interressant a
ia d'échec [ par coucou747 ]
comment faire une ia performante pour un jeu d'échec en c?merci
Si l'IA et les OS vous interèssent. [ par manta7 ]
Je recherche des personnes pour former une petite équipe (7 maximum - 2 minimum) pour un projet.Si l'IA et les OS vous ont toujours attirés, n'hésitez
pb avec un code [ par Saros ]
J'ai un problème de compilation dans un code et je n'arrive pas du tout à savoir d'où ça vient le fichier source en question peut
|
Derniers Blogs
TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3TECHDAYS PARIS 2012 : SESSION PLEINIèRE JOUR 3 par ROMELARD Fabrice
Speaker: Bernard Ourghanlian Cette session est comme chaque jour transmise en live par BrainSonic, et j'ai donc suivi cette troisième pleinière par ce moyen sur mon iPad . Elle est dédiée comme chaque année à la mise en perspective de l'é...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE !MISHRA READER : UN LECTEUR RSS TRèS ZUNE STYLE EN OPEN SOURCE ! par Vko
Hier durant une session dédiée aux Techdays 2012, j'ai eu le plaisir d'annoncer la sortie de la Béta 2 de Mishra Reader. C'est quoi ? Pour les utilisateurs, c'est une vraie expérience de lecture de flux RSS sur Windows. Rien à voir avec les produit...
Cliquez pour lire la suite de l'article par Vko [FRAMEWORK 4] LES TASKS ET LE THREAD UI[FRAMEWORK 4] LES TASKS ET LE THREAD UI par fathi
Je viens de passer quelques temps au TechDay's et j'ai pu voir pas mal de session intéressante. Par contre une chose m'a un peu étonné lors de certaines de ces sessions qui abordaient les améliorations du framework .NET (donc le 4.5) : en gros, bea...
Cliquez pour lire la suite de l'article par fathi WORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBEWORKFLOW FOUNDATION 3 A UN PIED DANS LA TOMBE par JeremyJeanson
Depuis déjà un an, je conseille vivement les utilisateurs de Workflow Foundation 3 à migrer vers la version 4. L'information qui va suivre ne devrait donc pas trop prendre au dépourvu les personnes qui m'ont suivi. Je profite de ce poste, pour faire le re...
Cliquez pour lire la suite de l'article par JeremyJeanson TECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PCTECHDAYS PARIS 2012 : NOUVELLES TENDANCES DU POSTE DE TRAVAIL - BRING YOUR OWN PC par ROMELARD Fabrice
Speakers: Thierry Rapatout, Antoine Petit et Xavier Trebbia Cette session entre dans le cadre des RDV Décideurs des TechDays 2012, elle est liée à la consumérisation de l'IT et la mise en place du "DeskTop as a Service" dans de plus en ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
SALUT!SALUT! par khaoulagenie
Cliquez pour lire la suite par khaoulagenie
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|