IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Diagramme de classe bataille navale


Sujet :

avec Java

  1. #1
    Membre éprouvé
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 503
    Par défaut Diagramme de classe bataille navale
    Bonjour,

    Dans le cadre d'un "petit" exercice, je viens demander de l'aide pour créer un jeu de bataille navale en partant de zéro. Je n'ai pas de diagramme de classe et mon esprit terre à terre a encore bien du mal à
    imaginer la conception en programmation objet...Aussi je ne viens pas demander un code prémaché mais quelques pistes de réflexion pour l'organisation de mes classes

    Je pense créer :
    - Une classe grille avec un tableau en 2 dimensions.
    - une classe mère abstraite de type bateau qui pourrait avoir des classes enfant de type cuirassé, voilier, porte avion...
    - Une classe coordonnées qui gère les coordonnées du joueur

    J'ai du mal à appréhender comment je peux dire qu'un navire et touché ou non, si il est coulé ou non, comment disposer mes navires...

    Merci d'avance à la communauté

  2. #2
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Ça tombe bien qqun a poste un topic sur le jeu des petits chevaux juste avant toi... avec un diagramme de classe... de quoi te donner un peu a réfléchir.

    Après, ça reste simple, tu essaies d'imaginer la version physique du jeu, ce qu'on peut trouver en ouvrant la boite : un plateau, 5-6 bateaux en plastique et éventuellement des marqueurs en plastiques a enficher dans les zones touchées (bon cette partie semble optionnelle, le plateau peut s'en charger via la grille voir plus bas*). Donc oui ton idee de base est bonne. A noter que Java possède déjà plusieurs classes de coordonnées de base (Point et Point2D dans AWT) mais que comme c'est une classe super simple a programmer tu peux très bien en créer une.

    Citation Envoyé par olivier252 Voir le message
    J'ai du mal à appréhender comment je peux dire qu'un navire et touché ou non
    A priori un navire fait entre 1 et 3 (4?) cases de longueur et donc tu peux stocker un tableau de booléen de cette taille la qui dira si une des cases du navire a été touchée.

    Citation Envoyé par olivier252 Voir le message
    comment disposer mes navires...
    C'est pas vraiment le soucis du diagramme de classe en fait...
    En gros tu as une liste de navire a placer, chaque navire va avoir un nombre de cases qu'il occupe, et une orientation. Tu parcours ta liste de navire, a chaque navire tu fais un random pour déterminer son orientation, puis un autre pour choisir les coordonnées de la case de départ dans la grille et ensuite tu vérifie que le navire ne sort pas de la grille ou ne coupe pas un autre navire. Si c'est OK tu passe au navire suivant jusqu’à ce qu'il en reste aucun. Si pas OK tu recommence la procédure de placement du navire actuel.

    *pour la grille ça peut être assez simple byte[][] avec des valeurs entières, y compris des valeurs spéciales. Par exemple :
    • 0 - case recouverte par le brouillard de guerre
    • -1 - case découverte (touchée dans l'eau)
    • N - Navire N recouvert par le brouillard de guerre
    • N * 10 - Navire N découvert (touchée)


    A noter que le fait de stocker qu'un navire ait été touche dans la grille est une facilite de codage et est un poil redondant avec le fait de stocker l'info dans le navire lui-même mais ça fait pas de mal. Sinon la grille ne contient pas cette info et tu dois aller inspecter le navire pour savoir que la case en question est découverte ou pas.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  3. #3
    Membre éprouvé
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 503
    Par défaut
    Merci pour ta réponse très détaillée :

    Je n'ai pas pu trop me pencher sur la question aujourd'hui, mais je m'y mets sérieusement ce we. Pour l'instant j'ai un embryon :

    Une classe abstraite qui renvoie juste un nom de navire et la capacité à créer un navire de n'importe quel type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public abstract class Navire {
    	protected String nom;
     
    	public Navire(String nom) {
    		super();
    		this.nom = nom;
    	}
     
    	public abstract int[] fabriqBateau();
    	.........................
    Puis une classe d'un navire spécifique qui hérite de ma classe abstraite (un porte avion par ex)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class PorteAvion extends Navire {
     
    	public PorteAvion() {
    		super();
    	}
     
    	public PorteAvion(String nom) {
    	}
     
    	public int[] fabriqBateau() {
     
    		int[] porteAvion = new int[3];
    		return porteAvion;
    ...............................................................
    Puis une classe qui récupère les instances des tableaux et les ajoute dans une liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public class ListeDeNavire {
    	List<Navire> listeNavire = new ArrayList<Navire>();
     
    	public ListeDeNavire() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
     
    	public ListeDeNavire(List<Navire> listeNavire) {
    		super();
    		this.listeNavire = listeNavire;
    	}
     
    	public void ajouterNavire(Navire navire){
    		listeNavire.add(navire);
    	}
    .......................................................................
    J'ai beaucoup plus de mal à formaliser la classe coordonnées, et son contenu. Mais je dirais ceci
    -2 champs X et Y de l'utilisateur.
    - un tableau 2D pour la grille
    - une méthode qui compare les coordonnées entrées par le joueur par rapport à la position des navires.(renvoie booléen)
    - Une méthode qui puisse indiquer le nombre de booléens inversés à chaque bateaux touchés. Si tous les booléens sont inversés, peut-on supprimer un tableau ?

    En admettant que je crée une grille de 10*10, dois-je créer 100 objets de coordonnées pour pouvoir comparer les coordonnées saisies par l'utilisateur et celles des bateaux ?
    Enfin, comment "placer" mes bateaux de manière aléatoire sur la grille ?

    Désolé pour ce message un peu confus.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'une classe dans Bataille navale
    Par lepetitnarvalo dans le forum Général Java
    Réponses: 9
    Dernier message: 26/05/2017, 16h15
  2. [DC] Transformer un MLD en Diagramme de Classes
    Par lee Mythe dans le forum Diagrammes de Classes
    Réponses: 10
    Dernier message: 07/10/2004, 14h25
  3. Exporter diagramme de classe vers image
    Par Koko22 dans le forum Rational
    Réponses: 3
    Dernier message: 18/08/2004, 11h42
  4. Diagramme des classes pour l'interface visuel
    Par robv dans le forum Diagrammes de Classes
    Réponses: 2
    Dernier message: 25/06/2004, 11h50
  5. [LG]Programme Bataille Navale en Pascal
    Par RaFaL dans le forum Langage
    Réponses: 21
    Dernier message: 10/06/2003, 22h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo