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
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE
Forum
TABLEAU DE LISTETABLEAU DE LISTE par help26
Cliquez pour lire la suite par help26
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|