Bonsoir,
Je code actuellement un jeu d'echec. Celui ci compile bien mais lors de l'execution il m'affiche erreur de segmentation des lors que je fais appel à la fonction pate_echec_mat qui me permet de tester si le roi est en echec, en pate ou en echec et mat.
Pourriez vous m'aider à trouver la solution svp ?
Voici le code
long pate(Pieces dam[][8],long col)
{
printf("jusque la tout va bien");
// Cette fonction permet de savoir si il y a pate,echec ou echec et mat
// 0=> rien signaler
// 1=> Echec et mat
// 2=> Echec
// 3=> Pate
long echec=0;
long mat=0;
long nb_piece;
long answer=0;
long x,y;
long x_r,y_r;
Pieces tab[8][8];
//On copie de la damier____________________________________________________________
for(x=0;x<8;x++) // On parcourt l'chiquier
{
for(y=0;y<8;y++)
{
tab[x][y]=dam[x][y]; // Copie de chaque lement du tableau
}
}
// Premire tape recherche du roi de couleur "couleur"______________________________________________
for(x=0;x<8;x++) // On parcourt l'chiquier pour trouver le roi de couleur
{
for(y=0;y<8;y++)
{
if(tab[x][y].piece==5){
if(tab[x][y].couleur==col){ //Ds que l'ont trouve le roi on mmorise ses coordonnes
x_r=x;
y_r=y;
}
}
}
tab[x_r][y_r].piece==0; // On efface le roi de l'chiquier copier
// affichage_unix(tab);
for(x=0;x<8;x++) // On parcourt l'chiquier pour voir si le roi dans sa position acutel n'est pas en echec
{
for(y=0;y<8;y++)
{
switch (tab[x_r][y_r].piece) // On verifie que aucune pice adverse ne peut se dplacer sur le roi
{
case 1:
if(tab[x][y].couleur!=col){
if(pion(&tab[x][y],x_r,y_r,tab)!=0)
{echec=1;}
}
break;
case 2:
if(tab[x][y].couleur!=col){
if(fou(&tab[x][y],x_r,y_r,tab)!=0)
{echec=1;}
}
break;
case 3:
if(tab[x][y].couleur!=col){
if(cavalier(&tab[x][y],x_r,y_r,tab)!=0)
{echec=1;}
}
break;
case 4:
if(tab[x][y].couleur!=col){
if(reine(&tab[x][y],x_r,y_r,tab)!=0)
{echec=1;}
}
break;
case 5:
if(tab[x][y].couleur!=col){
if(roi(&tab[x][y],x_r,y_r,tab)!=0)
{echec=1;}
}
break;
case 6:
if(tab[x][y].couleur!=col){
if(tour(&tab[x][y],x_r,y_r,tab)!=0)
{echec=1;}
}
break;
default :
break;
}
//On recopie de la damier car de dernier a t modifier
for(x=0;x<8;x++) // On parcourt l'chiquier
{
for(y=0;y<8;y++)
{
tab[x][y]=dam[x][y]; // Copie de chaque lement du tableau
}
}
tab[x_r][y_r].piece==0; // on efface nouveau le roi
}
}
for(x=0;x<8;x++) // On parcourt l'chiquier
{
for(y=0;y<8;y++)
{
tab[x][y]=dam[x][y]; // Copie nouveau de chaque lement du tableau
}
}
for(x=0;x<8;x++) // On regarde si le roi peut se dplacer dans une case sans se mettre en echec
{
for(y=0;y<8;y++)
{
if(roi(&tab[x_r][y_r],x,y,tab)==1)
{mat=1;}
}
}
// Nouvelle copie, car l'tape prcedente a modifie tab
for(x=0;x<8;x++) // On parcourt l'chiquier
{
for(y=0;y<8;y++)
{
tab[x][y]=dam[x][y]; // Copie de chaque lement du tableau
}
}
// Il faut compter le nombre de piece du joueur, pour grer le cas du pate
for(x=0;x<8;x++) // On parcourt l'chiquier et ds que l'on rencontre une piece de couleur "couleur" on incremente nb_piece
{
for(y=0;y<8;y++)
{
if(tab[x][y].couleur==col)
{
nb_piece++;
}
}
}
if((echec==1)&&(mat==0)) // Echec et mat : le roi est en echec dans sa position actuelle et ne peut pas se dplacer
{
return 1;
}
if((echec==1)&&(mat==1)) // Echec et mat
{
return 2;
}
if((echec==0)&&(mat==1)&&(nb_piece==1)) // Pate
{
return 3;
}
}
}
Pieces est une structure de ce type :
typedef struct{
long colonne;
long ligne;
long couleur;
long piece;
}Pieces;