RDV+DIAL chat illimit� dans ta r�g!
no save
Assistance
Achat
News

Forum | programmation
erreur segmentation C++
Juju, le jeu. 30 nov. 2006 à 19:11:14
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;

}


frank
déc. 06
Suivant
REPONSES
frank
déc. 06
frank
déc. 06
mamiemando
déc. 06
juju
déc. 06
Version Web
Réalisé par RedShift
no save