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
UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE[DIVERS] SUIVRE VOS SéRIES PRéFéRéS SUR LA TOILE par orion
Comme de nombreux geek, je suis un grand amateur de série TV et je rate régulièrement des épisodes de mes séries préférés. Une solution s'offre à vous avec ce merveilleux site : Tv Gorge - www.tvgorge.com Moteur de recherche à l'appui, vous pouvez ...
Cliquez pour lire la suite de l'article par orion TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010TECHDAYS PARIS 2010 : LA BI DANS SHAREPOINT 2010 par ROMELARD Fabrice
Animé par: Vincent Bellet et Baptiste Giraudier La BI dans SharePoint 2010, Les nouveaux services d'application dans SP2010 et SQL Server Reporting services 2008 R2. La BI dans SharePoint est généralisée pour tous afin de permettre à tous les coll...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Forum
RE : WIN APIRE : WIN API par racpp
Cliquez pour lire la suite par racpp WIN APIWIN API par omarino_007
Cliquez pour lire la suite par omarino_007
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|