Pb avec un code

Résolu
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010 - 20 août 2005 à 16:08
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010 - 20 août 2005 à 22:17
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 :
http://www.chez.com/topila/tictoe.cpp

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

5 réponses

steve_clamage Messages postés 475 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 11 août 2006 5
20 août 2005 à 22:08
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.
3
neodelphi Messages postés 442 Date d'inscription jeudi 4 avril 2002 Statut Membre Dernière intervention 11 août 2008
20 août 2005 à 16:10
Ton lien est mort...

neodelphi
0
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
20 août 2005 à 21:10
#include <stdlib.h>
#include

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;
}
0
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
20 août 2005 à 21:24
http://prodcarre.free.fr/tictoe.cpp

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

Saros
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
20 août 2005 à 22:17
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
0
Rejoignez-nous