Bonjour, je travaille sur linux et je fais un jeu de bataille navale.
Je veux creer une fonction bool qui permet de voir si on peut placer le bateau aux coordonnées rentrés en parametres (ligne (de A à J), colonne (de 1 à 10), direction (N,S,O,E), type bateau (P,C,S,T,F) et le tab).
Le probleme est "erreur de segmentation", j'ai essayé plusieurs modifications mais je ne trouve pas d'ou vient le probleme.... Je pense que c'est du au fait que je dois à un moment tester des valeurs hors du tableau...non?
Voici mon programme. Merci d'avance à ceux qui prendront le temps de le lire....
bool position_bateau (char ligne, int colonne, char cardinal, char type, char** tab)
{
int icolonne, iligne, itir;
switch (cardinal)
{
case 'O' : icolonne = -1; iligne = 0;break;
case 'E' : icolonne = 1; iligne = 0;break;
case 'S' : iligne = 1; icolonne = 0;break;
case 'N' : iligne = -1; icolonne = 0; break;
}
switch (type)
{
case 'P' : itir = 5;break;
case 'C' : itir = 4; break;
case 'T' : itir = 3; break;
case 'F' : itir = 3;break;
case 'S' : itir = 2;break;
}
if (!((ligne == 1) && (cardinal == 'N'))||((colonne == 1) && (cardinal == 'O'))||((ligne == 10) && (cardinal == 'S'))||((colonne ==10) && (cardinal == 'E')))
{
if (tab[(int)ligne - 65 - iligne][colonne - 1 - icolonne] != ' ')
{
cout<<"Le bateau ne peut pas etre mis ici"<<endl;
return false;
}
}
for (int i=0; i<itir;i++)
{
int c,l;
l = (int)ligne - 65 + i*iligne;
c = colonne - 1 +i*icolonne;
if ((i != itir - 1)&&(((l == 1)&&(cardinal == 'N'))||((c == 1) && (cardinal == 'O'))||((l == 10) && (cardinal == 'S'))||((c == 10) && (cardinal ==
'E')))) return false;
if (tab[l][c] != ' ')
{
cout<<"Le bateau ne peut pas etre mis ici"<<endl;
return false;
}
if (!((l == 10)||(c == 10)))
{
if (tab[(int)ligne - 65 + i*iligne + icolonne][colonne - 1 + i*icolonne + iligne] != ' ')
{
cout<<"Le bateau ne peut pas etre mis ici"<<endl;
return false;
}
}
if (!((l == 1)||(c == 1)))
{
if (tab[(int)ligne - 65 + i*iligne - icolonne][colonne - 1 + i*icolonne - iligne] != ' ')
{
cout<<"Le bateau ne peut pas etre mis ici"<<endl;
return false;
}
}
}
if (!((ligne == 1) && (cardinal == 'N'))||((colonne == 1) && (cardinal == 'O'))||((ligne == 10) && (cardinal == 'S'))||((colonne ==
10) && (cardinal == 'E')))
{
if (tab[(int)ligne - 65 + itir*iligne][colonne - 1 + itir*icolonne] != ' ')
{
cout<<"Le bateau ne peut pas etre mis ici"<<endl;
return false;
}
}
else
return true;
}
