Algorithme Bataille Navale
Résolu
Vitaldix
Messages postés
116
Date d'inscription
Statut
Membre
Dernière intervention
-
jeremux Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
jeremux Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
je dois programmer une bataille navale en java, mais j'ai quelques interrogations quant à l'algorithme.
Le "plateau" est représenté par un tableau de 10 lignes sur 10 colonnes (+ 1 ligne et +1 colonne pour les coordonnées). Il s'agit ici de placer les bateaux (qui exceptionnellement n'ont pas uniquement la forme de "ligne", mais parfois de carré etc). On renseigne une ligne et une colonne "centrale" de la forme, et le vaisseau occupera ces coordonnées.
Le but de cet algorithme est de faire en sorte d'empêcher l'utilisateur que les coordonnées de deux vaisseaux se confondent.
Par exemple, pour un vaisseau en forme de croix, on renseigne la case du milieu :
ligne ?
colonne ?
*vérifier que ça ne sort pas du tableau*
Jusque là c'est bon
Puis les valeurs du tableau à tabl[ligne][colonne]; tabl[ligne+1][colonne]; tabl[ligne-1][colonne]; tabl[ligne][colonne+1]; tabl[ligne][colonne-1] (ça fait une forme de croix) sont remplacées par "C"
Ça c'est facile, mais le problème est là : vu qu'il y a plusieurs formes de vaisseaux différents, je dois faire une vérification pour chaque case et pour chaque lettre, du style
Pour un vaisseau en ligne "XXX", j'aurai une ligne de condition pour répéter de reposer la ligne si les coordonnées se confondent de ce style là :
et là encore j'ai que 3 coordonnées, et 3 lettres (donc 3 vaisseaux), je précise que je monte en général à 5 vaisseaux et jusqu'à 5 coordonnées (par exemple la croix)
Je précise également que je suis "obligé" d'attribuer une lettre différente pour chaque vaisseau, pour que le programme reconnaisse sur quel vaisseau on a tiré (si c'est C, -> croix, si c'est D -> carré par exemple etc...)
Donc je me demandais si il n'y avait pas moins long comme condition, parce que vu que ça va jusqu'à 5*5 conditions à vérifier, ça fait un peu long pour le programme non ? L'algorithme est-il à revoir, ou je n'ai pas d'autre solution ?
Merci !
je dois programmer une bataille navale en java, mais j'ai quelques interrogations quant à l'algorithme.
Le "plateau" est représenté par un tableau de 10 lignes sur 10 colonnes (+ 1 ligne et +1 colonne pour les coordonnées). Il s'agit ici de placer les bateaux (qui exceptionnellement n'ont pas uniquement la forme de "ligne", mais parfois de carré etc). On renseigne une ligne et une colonne "centrale" de la forme, et le vaisseau occupera ces coordonnées.
Le but de cet algorithme est de faire en sorte d'empêcher l'utilisateur que les coordonnées de deux vaisseaux se confondent.
Par exemple, pour un vaisseau en forme de croix, on renseigne la case du milieu :
ligne ?
colonne ?
*vérifier que ça ne sort pas du tableau*
Jusque là c'est bon
Puis les valeurs du tableau à tabl[ligne][colonne]; tabl[ligne+1][colonne]; tabl[ligne-1][colonne]; tabl[ligne][colonne+1]; tabl[ligne][colonne-1] (ça fait une forme de croix) sont remplacées par "C"
Ça c'est facile, mais le problème est là : vu qu'il y a plusieurs formes de vaisseaux différents, je dois faire une vérification pour chaque case et pour chaque lettre, du style
Pour un vaisseau en ligne "XXX", j'aurai une ligne de condition pour répéter de reposer la ligne si les coordonnées se confondent de ce style là :
( tabl[ligne][colonne] != C || tabl[ligne][colonne] != D tabl[ligne][colonne] != E || tabl[ligne][colonne+1] != C || tabl[ligne][colonne+1] != D tabl[ligne][colonne+1] != tabl[ligne][colonne+1] != E || tabl[ligne][colonne-1] != C ||tabl[ligne][colonne-1] != D || tabl[ligne][colonne-1] != E)
et là encore j'ai que 3 coordonnées, et 3 lettres (donc 3 vaisseaux), je précise que je monte en général à 5 vaisseaux et jusqu'à 5 coordonnées (par exemple la croix)
Je précise également que je suis "obligé" d'attribuer une lettre différente pour chaque vaisseau, pour que le programme reconnaisse sur quel vaisseau on a tiré (si c'est C, -> croix, si c'est D -> carré par exemple etc...)
Donc je me demandais si il n'y avait pas moins long comme condition, parce que vu que ça va jusqu'à 5*5 conditions à vérifier, ça fait un peu long pour le programme non ? L'algorithme est-il à revoir, ou je n'ai pas d'autre solution ?
Merci !
A voir également:
- Algorithme Bataille Navale
- Notice bataille navale électronique ref 4287 - Forum Loisirs / Divertissements
- Notice de bataille navale électronique perdue ✓ - Forum Loisirs / Divertissements
- Algorithme euromillion excel gratuit - Forum Excel
- Manuel d'utilisation perdu - Forum Windows
- Ref Hotkey - Télécharger - Divers Web & Internet
2 réponses
Salut,
Je n'ai pas bien compris...en gros faut que tab[ligne][colonne] soit vide c'est ça ? Dans ce cas avant de remplir avec les vaisseaux initialise avec des valeurs qui representeront "pas de vaisseaux".
En gros ça devient si ( tab[ligne][colonne]=='Z') alors...si Z ne représente pas de vaisseaux.
Sinon pour chaque vaisseaux t'implémente une méthode par exemple pour la croix,
Un string dans l'array.
Je n'ai pas bien compris...en gros faut que tab[ligne][colonne] soit vide c'est ça ? Dans ce cas avant de remplir avec les vaisseaux initialise avec des valeurs qui representeront "pas de vaisseaux".
En gros ça devient si ( tab[ligne][colonne]=='Z') alors...si Z ne représente pas de vaisseaux.
Sinon pour chaque vaisseaux t'implémente une méthode par exemple pour la croix,
public int testVide(int c,int l) { return tab[l][c]=='Z' && tab[l+1][c]=='Z'.... }
Un string dans l'array.
par exemple dans mon code j'ai ceci :
C'est pour placer un carré, et ça vérifie pour l'instant seulement si une des coordonnée occupée n'est pas égale à "C" (une croix)
"si ( tab[ligne][colonne]=='Z') alors...si Z ne représente pas de vaisseaux. "
Je ne suis pas sûr de bien comprendre ! En gros, quand on pose le vaisseau, cela vérifie si toutes les coordonnées du vaisseaux sont identiques à Z (et si c'est le cas, on pose le vaisseau?). Je veux bien, mais j'aimerai en fait que le programme reconnaisse ces coordonnées comme un vaisseau, donc je leur ai attribué une lettre à chacun d'où la vérification de chacune des lettres lors de la pose de vaisseau (sauf pour le premier). Cela me sert pour compter les "vies" du vaisseaux, vu que je me suis débrouillé pour que la console tire au hasard mais pas deux fois sur la même case, on a :
pour la croix
En tous cas, merci !
//return 1 si il y a un vaisseau croix
Ensuite pour placer tu vérifies si la ligne et la colonne et que testCroix(...)==0 et testCarre(...)==0 ..., mais après ça va dépendre du nombre de vaisseaux que t'as.