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

Langage Java Discussion :

Vérification - Boucle (Mini-Jeu)


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut Vérification - Boucle (Mini-Jeu)
    Bonjour à tous,


    Je fais actuellement un bataille navale en Java et j'ai un problème concernant une de mes classes.

    J'aimerais faire une méthode qui retourne un tableau de tous ses compartiments (voir classe compartiment ci-dessous) . --> Création mer() : vérifie si aucun bateau n'a de compartiment qui concerne (x;y).
    Si c'est le cas, nouvel objet compartiment de type mer (à mettre dans la liste mer)

    Je pensais à utiliser des booléens et des conditions.

    P.-S : Est-ce que le @Override est obligatoire ? (voir ci-dessous)

    Voici ma classe Bateau
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    public class Bateau {
        public enum orientation{
            NORD, EST
        }
     
        private int nbCases;
        private Compartiment bateau[];
        private String nom;
     
        public Bateau(int nBCases, String nom) {
            this.nbCases = nbCases;
            this.nom = nom;
            this.bateau = new Compartiment[nBCases];
        }
        public void setNom(String nom) {
            this.nom = nom;
        }
        public String getNom(){
            return this.nom;
        }
        public int getNbCases(){
            return nbCases;
        }
        public boolean getEtat(int numCompartiment) {
            return this.bateau[numCompartiment].getEtat;
        }
        public void hit(int numCompartiment){
            this.bateau[numCompartiment].setEtat(false);
        }
        public void placeMonBateau(int x, int y, orientation or) {
     
            if(or == or.NORD){
                for(int i=0; i<this.getNbCases;i++){
                    this.bateau[i] = new Compartiment(true, x, y, false);
                    y--;
                }
                } else {
                    for(int i=0; i<this.getNbCases;i++){
                    this.bateau[i] = new Compartiment(true, x, y, false);
                    x++;
                }
            }
        }
        @Override
        public String toString() {
            String b="";
            for(int i = 0; i<this.bateau.length;i++){
                if(this.getEtat(i)==true) {
                    b=b+"[O]";
                } else {
                    b=b+"[X]";
                }
            }
            return b;
        }
    }
    Voici ma classe FLOTTE -c'est ici (à la fin) que je pensais intégrer les conditions etc. mais que je n'arrive pas à faire.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    import java.util.ArrayList;
     
    public class Flotte {
     
    	private ArrayList<Bateau> mesBateaux;
    	private ArrayList<Compartiment> mer;
    	public Flotte() {
    		mesBateaux = new ArrayList<Bateau>();
    		prepareFlotte();
    	}
     
    	public void prepareFlotte(){
    		mesBateaux.add(new Bateau(5, "Porte-avions"));
    		mesBateaux.add(new Bateau(4, "Croiseur"));
    		mesBateaux.add(new Bateau(3, "Contre-torpilleurs"));
    		mesBateaux.add(new Bateau(3, "Sous-marin"));
    		mesBateaux.add(new Bateau(2, "Torpilleur"));
    	}
     
    	public void placement1(){
    		mesBateaux.get(0).placeMonBateau(0,0, Bateau.orientation.EST);
    		mesBateaux.get(1).placeMonBateau(0,9, Bateau.orientation.NORD);
    		mesBateaux.get(2).placeMonBateau(1,9, Bateau.orientation.EST);
    		mesBateaux.get(3).placeMonBateau(9,9, Bateau.orientation.NORD);
    		mesBateaux.get(4).placeMonBateau(4,4, Bateau.orientation.EST);
    	}
     
    	public void creationMer(){
    		for(int i=0; i<=9;i++){
    			for (int j=0; j<=9; j++){
    				for(int k=0; k<mesBateaux.size();k++){
    					// verification  : boucle ??? 
    				}
    			}
     
    		} 
     
     
    	}
     
    }
    Je vous met aussi la dernière classe pour que vous ayez le code complet :
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    public class Compartiment {
     
    	private boolean etat;
    	private int x;
    	private int y;
    	private boolean mer;
     
    	public Compartiment(boolean etat, int x, int y, boolean mer) {
    		this.etat = etat;
    		this.x = x;
    		this.y = y;
    		this.mer = mer;
    	}
     
    	public boolean getEtat(){
    		return this.etat;
    	}
     
    	public int getX(){
    		return this.x;
    	}
     
    	public int getY(){
    		return this.y;
    	}
     
    	public boolean getMer(){
    		return this.mer;
    	}
     
    	public void setEtat(boolean etat){
    		this.etat = etat;
    	}
    }
    Pourriez-vous aussi me faire part de toutes vos critiques sur le code ? Car après j'aimerais travailler avec les interfaces graphiques et puis pourquoi pas une app Android. Le but est de faire le "coeur" du programme en console. Je tiens à préciser que je suis débutant (je programme depuis 8 mois environs).

    Merci d'avance pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut
    Bonjour,

    Personne pour m'aider ?..

    Merci d'avance !

  3. #3
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 889
    Par défaut
    Bonjour,

    Etant donné que tu programmes en objets, ce sont les objets qui connaissent leur propre état, si tu boucles sur tes bateaux en ayant ta position x,y, tu peux demander à chacun d'entre eux s'il est touché ou pas à cet endroit par exemple. Si aucune structure n'a été touchée, tu en conclues que tu as tiré dans la mer.

    Je ne sais pas si ça répond à ta question, mais n'hésite pas à être un peu plus précis

    A+

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut
    Citation Envoyé par KiLVaiDeN Voir le message
    Bonjour,

    Etant donné que tu programmes en objets, ce sont les objets qui connaissent leur propre état, si tu boucles sur tes bateaux en ayant ta position x,y, tu peux demander à chacun d'entre eux s'il est touché ou pas à cet endroit par exemple. Si aucune structure n'a été touchée, tu en conclues que tu as tiré dans la mer.

    Je ne sais pas si ça répond à ta question, mais n'hésite pas à être un peu plus précis

    A+
    Merci beaucoup pour ta réponse ça m'aide un peu mais je ne vois pas trop comment coder cela... :s
    Sinon, est-ce que le code "en général" est plutôt correct ? Etant débutant et n'ayant pas de cours (je suis au lycée) j'ai peur de mal coder.

    Merci beaucoup !

  5. #5
    Membre Expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 889
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 889
    Par défaut
    Tu n'as pas à avoir peur de mal coder : ton code est bon s'il compile et qu'il fait exactement le résultat attendu

    Mais ton code est excellent s'il est en plus maintenable, évolutif, performant, etc... En tout cas tu n'as pas à avoir peur, c'est par la pratique qu'on acquiert les bons réflexes et avec l'aide des autres aussi, alors je vais essayer de t'aider un peu sans trop t'embrouiller.

    Avant de commencer à programmer, il faut lister les objets dont est composé ton jeu :
    - c'est un jeu à deux joueurs : il faut donc un objet Jeu qui gère des joueurs, et le jeu en lui-même (pour les différencier, les scores, etc)
    - chaque joueur place des structures : il faut un objet Structure (si un jour tu fais une structure Avion, ou Helico, tu te sers de l'héritage)
    - ces structures sont placées sur un Plateau composé de Cases (si un jour tu veux faire une bataille navale en 8000/8000 cases tu peux)
    - ton jeu se déroule en tour par tour, chacun choisi une case.
    - ton jeu s'affiche à chaque joueur selon ce qu'il a le droit de voir. (difficulté pour ce jeu, jouer sur le meme écran est problématique mais en réseau pkoi pas)

    A partir de la, tu peux déjà mieux voir comment structurer ton programme au niveau des objets. Moi ma technique c'est de créer les objets, puis dans le main je parle en français

    Comme ça :

    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
    18
    19
    20
    21
    22
    23
    24
    public class BatailleNavale{
     
        public static void main(String[] args) {
            Jeu.initialiserPlateau();
            Jeu.créerJoueurs();
            Jeu.placementStructures();
     
            // A cette phase, la partie commence, chaque joueur joue
            while(true) {
                Joueur ceJoueur = Jeu.joueurSuivant();
                Jeu.afficherPlateau(ceJoueur);
                ResultatTir resultatTir = ceJoueur.faireUnTir();
                Jeu.afficherResultatTir(resultatTir);
                if(Jeu.isGameOver())
                  break;
            }
     
            // La partie est terminée
            Jeu.afficherWinnerStatisticsAndGameOver();
        }
     
    }
     
    }
    Je n'ai pas compilé ce code je l'écris à main levé, désolé s'il y a des erreurs de syntaxes Mais c'est pour donner l'idée.

    Ensuite, chaque objet contient d'autre objets, l'objet Joueur par exemple, contient la liste de tous les bateaux qu'il a placé, ou la liste de tous les tirs qu'il a effectué si tu veux faire des stats par exemple. L'objet Plateau contient une liste de Cases, et chaque Case contient un lien vers la Structure qui est posée sur elle, s'il y en a une. Etc.

    J'espère que ça t'aide un peu

    A+

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 12
    Par défaut
    Merci beaucoup pour tes conseils ! C'est pas exactement ce dont j'avais besoin mais c'est pas grave, ça va me servir pour la suite

    Voici donc ce que j'ai fait pour la création de la mer et puis l'affichage.

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     private void creationMer() {
            //
            boolean trouve = false;
            for (int i = 0; i <= 9; i++) {
                for (int j = 0; j <= 9; j++) {
                    // parcours des bateaux
                    for (int k = 0; k < mesBateaux.size(); k++) {
                        //
                        for (int l = 0; l < mesBateaux.get(k).getNbCases(); l++) {
                           if (mesBateaux.get(k).getCompartiment(l).getX() == i && mesBateaux.get(k).getCompartiment(l).getY() == j){
                               trouve = true;
                           }
                        }
                    }
                    if (trouve == false) {
                        this.mer.add(new Compartiment(true, i, j, true));
                    }
                    trouve = false;
     
                }
     
            }
        }
            // Tirer sur la flotte
            public void affichage() {
                for (int i = 0; i <= 9; i++) {
                    for (int j = 0; j <= 9; j++) {
                        // Pour la mer
                        for(int k=0; k<mer.size();k++){
                            if (mer.get(k).getX() == i && mer.get(k).getY() == j) {
                                if (mer.get(k).getEtat()) {
                                    System.out.print("[~]");
                                } else {
                                    System.out.print("[0]");
                                }
                                break;
                            }
                        }
                        // Pour les bateaux
                        for (int l = 0; l < mesBateaux.size(); l++) {
                        //
                        for (int m = 0; m < mesBateaux.get(l).getNbCases(); m++) {
                           if (mesBateaux.get(l).getCompartiment(m).getX() == i && mesBateaux.get(l).getCompartiment(m).getY() == j){
                               if(mesBateaux.get(l).getCompartiment(m).getEtat()) {
                                   System.out.print("[#]");
                               } else {
                                   System.out.print("[X]");
                               }
                               break;
                           }
                        }
                    }
                }
                System.out.println();
            }
    Je m'attends déjà à toutes les critiques car j'imagine qu'il y a plus simple et je veux bien des astuces si jamais vous trouvez mieux .

    Maintenant, j'aimerais faire une méthode pour toucher (une méthode hit) - je pensais à utiliser un booléen donc avoir un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean hit() {
     
                }
    Est-ce que c'est une bonne idée de mettre autant de code dans la même classe (càd FLOTTE) ?

    Merci d'avance pour tous vos conseils !

Discussions similaires

  1. Mini jeu de rôle en php
    Par Sh4dow49 dans le forum Projets
    Réponses: 5
    Dernier message: 23/10/2008, 16h08
  2. [SdlDotNet] Mais où est la boucle de jeu ?
    Par Invité dans le forum C#
    Réponses: 4
    Dernier message: 28/05/2008, 21h53
  3. Réponses: 4
    Dernier message: 11/05/2007, 19h45
  4. Boucle de jeu principale
    Par Riki dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 22/03/2007, 09h58
  5. mini jeu en construction (débutant)
    Par samy100 dans le forum C
    Réponses: 45
    Dernier message: 23/04/2006, 23h36

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