begin process at 2010 03 18 23:23:37
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Jeux

 > UN PUISSANCE 4 TOUT SIMPLE

UN PUISSANCE 4 TOUT SIMPLE


 Information sur la source

Note :
Aucune note
Catégorie :Jeux Classé sous :puissance4, ia Niveau :Débutant Date de création :10/05/2007 Date de mise à jour :11/05/2007 11:41:13 Vu / téléchargé :3 833 / 228

Auteur : irmo

Ecrire un message privé
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

11 mai 2007 11:41:13 :
Quelques modifications mineures et ajout de commentaires.

 Sources de la même categorie

JEU DU PENDU !!!! VERSION SIMPLIFIÉE ET FACILE par seyidleite
Source avec Zip PUISSANCE 4 EN SDL, AVEC SAUVEGARDE , JOUEUR VS JOUEUR OU IA... par diablosephiroth
Source avec Zip Source avec une capture TETRIS 1.0 (C & SDL) par c1702
Source avec Zip Source avec une capture LE PENDU (PAR CRAZYGOODBOY) par CrazyGoodBoy
Source avec Zip Source avec une capture PLUS OU MOINS par antho974

 Sources en rapport avec celle ci

Source avec Zip PUISSANCE 4 EN SDL, AVEC SAUVEGARDE , JOUEUR VS JOUEUR OU IA... par diablosephiroth
Source avec Zip Source avec une capture HIGHWAY SIMULATOR par FrancoisGauthier
Source avec Zip Source avec une capture PUISSANCE 4 OPENGGL AVEC IA MIN_MAX ET ALPHA-BETA par _Jonathan
Source avec Zip PUISSANCE 4 AVEC I.A. par qsdfgh
Source avec Zip Source avec une capture PUISSANCE 4 MODE GRAPHIQUE (CMUGAPHICS) + IA par Pistol_Pete

Commentaires et avis

Commentaire de nightlord666 le 10/05/2007 21:49:47

Faudrait que tu penses à mieux indenter ton code, c'est atroce et absolument illisible... Bref, je me pencherais sur l'algorithme d'IA quand tu auras mis ta source à jour avec une indentation correcte (commande "indent" sous unix-like...)

Commentaire de irmo le 11/05/2007 09:53:40

T'as pas tort, même moi j'ai du mal à m'y retrouver!
Je vais essayer de rendre le code plus lisible mais c'est pas gagné.

Commentaire de Vincent le 12/05/2007 17:36:38

disons que si tu publies, le but c'est que ce soit "consultable"
:)

 Ajouter un commentaire


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 ] &gt; 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&#232;me de compilation dans un code et je n'arrive pas du tout &#224; savoir d'o&#249; &#231;a vient le fichier source en question peut


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,217 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales