C

Utilisateur anonyme -  
KX Messages postés 19031 Statut Modérateur -
Bonjour, comment vérifier dans un tableau de 10 sur 10 si un bateau par exemple placé horizontalement sur 3 cases est bien positionné?
Merci.

3 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
Cela dépend de ton type de données (comment est faite ta grille, commente tu représentes un bateau...) et ce que tu entends par "bien positionné" mais si tu sais qu'une case 'contient' un bateau, il te suffit de regarder les cases voisines...
0
Utilisateur anonyme
 
Les bateaux sont représentés par des 1 et le reste du tableau par des 0.
Pour bien positionné c'est regarder si le bateau est droit dans le tableau, occupe bien le bon nombre de cases, si il n'y a pas d'autres bateau qui le touche,....
Merci.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Et bien comme je te disais, tu considère une case à 1 et tu regardes les voisins.
Si ils sont à 0 pas de problème, si ils sont à 1 tu t'assures que c'est bien soit en hauteur, soit en largeur.

Remarque : si tu fais un jeu de bataille navale, tu n'as normalement pas besoin de faire ce genre de vérification sur la grille, tu dois juste t'assurer au départ lorsque tu ajoutes tes bateaux qu'ils ne se chevauchent pas, mais du coup tu garantis déjà au départ la bonne configuration des bateaux.
Et il te faudra surement d'autre valeurs (touché=2, coulé=3, eau=4 par exemple)
0
Utilisateur anonyme
 
D'accord mais pour regarder les cases voisines on forme comment la boucle, parce que je ne peux pas utiliser de if?
Merci.
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Et pourquoi tu ne pourrais pas utiliser de if ? Faire un programme sans if c'est absurde...
D'ailleurs tu n'auras même pas besoin de boucles pour regarder les cases voisines d'une autre !

Voici un code qui regarde si une case est voisine d'un bateau (je l'ai fait sans if et sans boucle ^^)

#define DIMX 10
#define DIMY 10

// renvoie true ssi (x,y) est une coordonnée valide et grille[x][y] est un bateau
bool estVoisin(int grille[DIMX][DIMY],int x,int y)
{
    return x>=0 && x<DIMX && y>=0 && y<DIMY && grille[x][y]==1;
}

// renvoie true ssi l'une des cases voisines valides est un bateau
bool aVoisin(int grille[DIMX][DIMY],int x,int y)
{    
    return estVoisin(grille,x-1,y-1) // NO
        || estVoisin(grille,x-1,y  ) // O
        || estVoisin(grille,x-1,y+1) // SO
        || estVoisin(grille,x  ,y-1) // N
        || estVoisin(grille,x  ,y+1) // S
        || estVoisin(grille,x+1,y-1) // NE
        || estVoisin(grille,x+1,y  ) // E
        || estVoisin(grille,x+1,y+1);// SE
}
0