Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : pb avec un code [ Archives / Au secours ] (Saros)

samedi 20 août 2005 à 16:08:42 | pb avec un code

Saros

Membre Club
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 être téléchargé à partir de :
[ Lien ]

Il s'agit d'un morpion avec IA (IA pour le morpion ça sonne bizarre mais bon c'est ce qu'il y a de plus simple à coder)

J'ai essayé de compiler avec Dev-Cpp, VC++6 et VC++7 sans aucun résultat

Merci d'avance

Saros

samedi 20 août 2005 à 16:10:02 | Re : pb avec un code

neodelphi

Membre Club
Ton lien est mort...

neodelphi

samedi 20 août 2005 à 21:10:40 | Re : pb avec un code

Saros

Membre Club
#include <stdlib.h>
#include <iostream>

using namespace std;

bool  won(int);
int   refl(void);
int   refl_c(int, int,int);
int   ev_pos(int);
int   ev_ply(int);
void  affiche_plateau(void);
void  list_mat(const int, int, int);
void  mat_list(int, int, const int);

char signe[3] = {' ','X', 'O'};
int  plateau[3][3] = {{0, 0, 0},{0, 0, 0},{0, 0, 0}};
int  jr_en_cours; // appartient à {1, 2}

bool won(int jr){
    if(plateau[1][1]==jr && plateau[1][2]==jr && plateau[1][3]==jr) return true;
    if(plateau[1][1]==jr && plateau[2][2]==jr && plateau[3][3]==jr) return true;
    if(plateau[1][1]==jr && plateau[2][1]==jr && plateau[3][1]==jr) return true;
    if(plateau[2][1]==jr && plateau[2][2]==jr && plateau[2][3]==jr) return true;
    if(plateau[3][1]==jr && plateau[3][2]==jr && plateau[3][3]==jr) return true;
    if(plateau[3][1]==jr && plateau[2][2]==jr && plateau[1][3]==jr) return true;
    if(plateau[3][2]==jr && plateau[2][2]==jr && plateau[1][2]==jr) return true;
    if(plateau[1][3]==jr && plateau[2][3]==jr && plateau[3][3]==jr) return true;
    // vérifie toutes les position une par une
    // je sais, c'est bourin, mais ça marche et c'est rapide xD
    return false;
}

int refl(void){
    int estimation;
    int pn;
    int val;
    int pn_ret;
    estimation = -10000;
    for(pn = 0 ; pn<9 ; pn++){
        int cl,lg;
        list_mat(pn, cl, lg);
        if(plateau[cl][lg]==0){
            plateau[cl][lg] = jr_en_cours;
            if(won(jr_en_cours)){
                plateau[cl][lg] = 0;
                return 10000;  // pion gagnant : on saute dessus
            }
            val = -refl_c(3-jr_en_cours,2,-estimation);
            if(val>estimation){
                estimation = val;
                pn_ret=pn;
            }
            plateau[cl][lg] = 0;
        }
    }
    return pn_ret;
}

int refl_c(int jr, int prof, int alpha){
    bool pas_de_pion = true;
    int rtr = -10000;
    int pn;
    int val;
    for(pn=0 ; pn<9 ; pn++){
        int cl,lg;
        list_mat(pn, cl, lg);
        if(plateau[cl][lg]==0){
            plateau[cl][lg] = jr;
            if(won(jr)){
                plateau[cl][lg] = 0;
                return 100000;
            }
            if(prof<=0){
                val = ev_pos(jr);
                pas_de_pion = false;
            }else{
                val = -refl_c(3-jr, prof-1, -rtr);
            }
            plateau[cl][lg] = 0;
            if(val>rtr) rtr = val;
            if(rtr >= alpha){
                return rtr;
            }
        }
    }
    if(pas_de_pion){
        ev_pos(jr);
    }
}

int ev_pos(int jr){
    return ev_ply(jr) - ev_ply(3-jr);
}

int ev_ply(int jr){
    int ggt[8];
    int i;
    int ret = 0;
    
    for(i=0 ; i<8 ; i++) ggt[i]=0;
    
    if(plateau[0][0]==jr){
        ggt[0]++;
        ggt[3]++;
        ggt[7]++;
    }else if(plateau[0][0]==0){
        ggt[0]+=10;
        ggt[3]+=10;
        ggt[7]+=10;
    }
    if(plateau[0][1]==jr){
        ggt[0]++;
        ggt[4]++;
    }else if(plateau[0][1]==0){
        ggt[0]+=10;
        ggt[4]+=10;
    }
    if(plateau[0][2]==jr){
        ggt[0]++;
        ggt[1]++;
        ggt[5]++;
    }else if(plateau[0][2]==0){
        ggt[0]+=10;
        ggt[1]+=10;
        ggt[5]+=10;
    }
    if(plateau[1][0]==jr){
        ggt[3]++;
        ggt[6]++;
    }else if(plateau[1][0]==0){
        ggt[3]+=10;
        ggt[6]+=10;
    }
    if(plateau[1][1]==jr){
        ggt[4]++;
        ggt[5]++;
        ggt[6]++;
        ggt[7]++;
    }else if(plateau[1][1]==0){
        ggt[4]+=10;
        ggt[5]+=10;
        ggt[6]+=10;
        ggt[7]+=10;
    }
    if(plateau[1][2]==jr){
        ggt[1]++;
        ggt[6]++;
    }else if(plateau[1][2]==0){
        ggt[1]+=10;
        ggt[6]+=10;
    }
    if(plateau[2][0]==jr){
        ggt[2]++;
        ggt[3]++;
        ggt[5]++;
    }else if(plateau[2][0]==0){
        ggt[2]+=10;
        ggt[3]+=10;
        ggt[5]+=10;
    }
    if(plateau[2][1]==jr){
        ggt[2]++;
        ggt[4]++;
    }else if(plateau[2][1]==0){
        ggt[2]+=10;
        ggt[4]+=10;
    }
    if(plateau[2][2]==jr){
        ggt[1]++;
        ggt[2]++;
        ggt[7]++;
    }else if(plateau[2][2]==0){
        ggt[1]+=10;
        ggt[2]+=10;
        ggt[7]+=10;
    }
    
    if(plateau[1][1]==jr) ret++; // favoriser la pos centrale
    for(i=0 ; i<8 ; i++){
        if(ggt[i]==12) ret+=5;
    }
    return ret;
}
        
void list_mat(const int a, int b, int c){
    b = a%3;
    c = (int)(a/3);
}

void mat_list(const int a, const int b, int c){
    c = b*3 + a;
}

void affiche_plateau(void){
    printf("+-+-+-+\n");
    for(int j=0 ; j<3 ; j++){
        printf("+");
        for(int k=0 ; k<3 ; k++){
            printf("%c+",signe[plateau[k][j]]);
        }
        printf("\n");
    }
    printf("+-+-+-+\n");
}

int main(int argc, char *argv[])
{
    jr_en_cours = 1;
    int i;
    for(i=0 ; i<9 ; i++){
        system("cls");
        affiche_plateau();
        int x,y;
        if(jr_en_cours==1){
            printf("A vous de jouer :");
            char key;
            int pos;
            printf("+-+-+-+\n+A+Z+E+\n+Q+S+D+\n+W+X+C+\n+-+-+-+\n\n");
            key = 0;
            pos = 0;
            while(true)
                scanf("%c",&key);
                if(key=='A' ||
                   key=='Z' ||
                   key=='E' ||
                   key=='Q' ||
                   key=='S' ||
                   key=='D' ||
                   key=='W' ||
                   key=='X' ||
				   key=='C') {
					switch(key){
						case 'A':
							pos=0;
							break;
						case 'Z':
							pos=1;
							break;
						case 'E':
							pos=2;
							break;
						case 'Q':
							pos=3;
							break;
						case 'S':
							pos=4;
							break;
						case 'D':
							pos=5;
							break;
						case 'W':
							pos=6;
							break;
						case 'X':
							pos=7;
							break;
						case 'C':
							pos=8;
							break;
					}
					list_mat(pos, x, y);
					if(plateau[x][y]==0) break;
                } // pour le if d'en haut - vérification de key
            } // fin du while - la case a été choisié, vérifiée
            plateau[x][y] = signe[jr_en_cours];
        } else {    // On traite l'intelligence artificielle ici
            printf("Reflexion en cours...\n");
            int pos;
            pos = refl();
            int x,y;
            list_mat(pos, x, y);
            plateau[x][y] = signe[jr_en_cours];
        }
        if(won(jr_en_cours)==true){
            system("cls");
            affiche_plateau();
            printf("Joueur %d (%c) gagne\n\n", jr_en_cours, signe[jr_en_cours]);
            system("pause");
            return 0;
        }
    } // fin du for - un jr a gagné (>break;) ou bien nul (i=9);
    system("cls");
    affiche_plateau();
    printf("Match nul\n\n");
    system("pause");
    return 0;
}

samedi 20 août 2005 à 21:24:59 | Re : pb avec un code

Saros

Membre Club
http://prodcarre.free.fr/tictoe.cpp

Essayez de taper l'adresse manuellement (ça devrait marcher)

Saros

samedi 20 août 2005 à 22:08:07 | Re : pb avec un code

steve_clamage

Réponse acceptée !
ligne 221, rajoutes une accolade ouvrante ( { ) apres while(true) et ca compilera. J'ai rarement vu un code aussi crade, il n'y a au mieux que l'algo à retenir.

samedi 20 août 2005 à 22:17:52 | Re : pb avec un code

Saros

Membre Club
Je l'ai recopié de ma TI à la rache, je nettoierai et commenterai plus tard
En fait à la base c'est un code VB, j'ai transcrit en turbo pascal pour TI, puis en C++
J'ai pris l'algorithme de quelqu'un (je dirai tout ça quand je posterai - si j'arrive à le faire marcher)
Merci bien en tout cas... une aprem sur une accolade

Saros



Cette discussion est classé dans : pb, code, vc, morpion, ia


Répondre à ce message

Sujets en rapport avec ce message

VC++ Pb affichage caractères accentués à partir du code ASCII [ par mllaline ] Je souhaite afficher l'ensemble des 256 caractères de la table ASCII dans un Textearea (VC++). (présenté comme ça, ça n'a peu d'intérêt. Le but est ju Pb avec VC [ par kokoariko ] Lus',1/Sous Visual C++, j'ai créé différents contrôles (CListBox, CProgressBar, CStatic ...) sur une fenêtre Dialog, grace à MFC ClassWizard.Tout se p pb avec nMaxFile dans CFileDialog vc++ [ par pichu ] Dans une CFileDialog on est limité dans le nombre de selection si on en selectionne plusieursle pb est que je veux etre illimite dans le nombreComment Pb execution sous VC++ 6.0 [ par Galmiza ] Salut,Je suis confronté à un problème curieux (enfin, curieux pour moi du moins):J'ai fait un programme qui se compile parfairtement en Release et en utiliser un code c dans une solution VC++ 7 [ par romzaide ] Bjour, j'ai une solution VC++ qui explore un répertoire et et j'utilise le noms des différents fichiers trouvés pour calculer leurs hash edonkey (MD4 optimiser un code en C [ par serom00 ] Bonjour,Je cherche a optimiser mon code C.J'utilse VC++7Mais je me pose pleins de questions:Tout d'abord je voudrai savoir si quelqu'un connaitrai un [VC++6] problème de police [ par neogeocortex ] alors voila, j'arrive facilement à changer la police de caractère d'une editbox, seulement quand la police est complète ( quand tout les caracères son pb connexion socket [ par skyman272 ] BonjourJ'essaye de faire marcher le programme source qui est sur ce site : http://www.cppfrance.com/code.aspx?ID=29687Je lance le serveur principal et besoin d'un code source en VC++ [ par amina_6a ] salut ,moi j 'ai pas vraiment un probleme ,mais j 'ai besoin d'un code source pour une application qui permet la communication avec les peripheriques Pb de boite de dialogue [ par mrous ] Bonjour,j'ai un petit problème avec une boite de dialogue:cette boite de dialogue ne contient qu'une progressbar, et j'execute mon code des son affich


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,655 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.