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

AWT/Swing Java Discussion :

Problème avec une grille de bataille navale


Sujet :

AWT/Swing Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut Problème avec une grille de bataille navale
    Bonjour,
    Ça fait un moment maintenant que je suis coincé :/
    Avant de vous expliquer mon problème je vous présente d'abord mon code pour que mes explications soient plus claires

    Voici mon main:
    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    package maBatailleNavale;
     
    import java.util.Scanner;
     
     
    ///On import la classe random
    import java.util.Random;
     
     
    public class Main_Bataille {
        public static void main(String[ ] args) {
     
            Scanner n = new Scanner(System.in);
            Scanner n1 = new Scanner(System.in);
     
            ///On initialise toutes les variables memes celles que l'utilisateur doit rentrer
     
            /// Random est la fonction qui choisit au hasard les coordonnées de la cible
            Random rand = new Random();
            String boucle = "oui";
            Erreur_Entree ErreurStr = new Erreur_Entree();
     
            Erreur_Entree Erreur_boucle = new Erreur_Entree();
     
            while(boucle.equals("oui"))
            {
                /// On demande a l'utilisateur d'entrée la taille du terrain
                String message_grille = "Entrez le nombre de carreaux du coté de la grille svp";
                int grille = 0 ;
                boolean erreur = true;
                Erreur_Entree ErreurInt = new Erreur_Entree();
                grille = ErreurInt.Erreur_int(message_grille, erreur, grille, n);
                while(grille > 100)
                {
                    System.out.println("Je suis désolé mais votre grille est trop grande.");
                    grille = ErreurInt.Erreur_int(message_grille, erreur, grille, n);
                }
                System.out.println(grille);
     
                /// On donne des valeurs aleatoires aux coordonnées de la cible
                int a = rand.nextInt(grille);
                int b = rand.nextInt(grille);
                int x = grille + 1;
                int y = grille + 1;
                int essaie = 0;
     
                /// On demande a l'utilisateur d'entrer une limite de coups
                int limite2 = 0;
                String message_limite = "Veuillez entrer la limite de tentative que vous pouvez faire";
                limite2 = ErreurInt.Erreur_int(message_limite, erreur, limite2, n);
                int limite = 1;
                String rep_liste[] = {"oui","non"};
     
                String rep = "oui";
                String rep2;
                int reussit = 0;
                int compris = 1;
                Fen_Inter fen = new Fen_Inter();
     
     
                //On crée la boucle principale du jeu
                while (rep.equals("oui"))
                {
                    essaie = essaie + 1;
                    System.out.println("À vous de jouer");
     
                    while (x > grille)
                    {
     
                        String message_x = "Entrez x: ";
                        x = ErreurInt.Erreur_int(message_x, erreur, x, n);
                        if(x>grille)
                        {
                            System.out.println("Désolé, ce chiffre est trop grand");
                        }
                    }
     
                    while (y > grille)
                    {
                        String message_y = "Entrez y: ";
                        y = ErreurInt.Erreur_int(message_y, erreur, y, n);
                        if(y>grille)
                        {
                            System.out.println("Désolé, ce chiffre est trop grand");
                        }
                    }
     
     
                    if (x == a && y == b) {
                        System.out.println("Touché");
                        reussit = 1;
                        break; }
     
                    else if (x == a || y == b) {
     
                        if (x == a+1 && y == b){
     
                            System.out.println("En Vue");}
     
                        else if ((a==x || a==x-1 || a==x+1) && (b==y || b==y+1 || b==y-1)){
                            System.out.println("En Vue");}
     
                        }
     
                    else {
                        System.out.println("A l'eau");
                    }
     
                    if (limite == limite2)
                    {
                        System.out.println("Désolé mais vous avez atteint la limite de coups joués.");
                        break;
                    }
                    ///On demande a l'utilisateur si il veut rejouer
                    System.out.println("Voulez vous rejouer oui/non ? ");
                    rep2 = n1.nextLine();
     
                    /// Tant que l'utilisateur n'entre pas oui ou non on lui redemande s'il veut rejouer
                    /// Pour comprendre comment marche l'objet Erreur_Entree voir sur le deuxieme .java
                    rep2 = ErreurStr.Erreur_str(compris,  rep2, rep_liste, n1);
                    if (rep2.equals("non")){
                        break;
                    }       
     
                    limite = limite + 1;
     
                    /// Si l'utilisateur atteint la limite qu'il s'était fixé on stoppe le jeu et on l'informe
                    /// qu'il a perdu
     
     
                    x = grille + 1 ;
                    y = grille + 1;
     
                }
            System.out.println("Partie terminée \n");
     
            /// Si l'utilisateur a réussit on lui indique en combien de coups
            if (reussit == 1){
                System.out.println("Vous avez réussit en " + essaie + " coups");}
     
            compris = 1;
     
            System.out.println("Voulez vous faire une nouvelle partie (oui/non) ?");
            boucle = n1.nextLine();
            boucle = Erreur_boucle.Erreur_str(compris,  boucle, rep_liste, n1);
     
            }
            System.out.println("Au revoir");
     
     
        n.close();
        n1.close();
        }
    }
    Voici la classe que j'ai appelé Erreur_Entree:
    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
    57
    58
    59
    60
    61
    62
    /// On crée ici des fonctions gérant les erreurs , on ne les crée pas dans la partie principale du programme pour éviter que ce soit trop lourd
    package maBatailleNavale;
     
    import java.util.Scanner;
     
    public class Erreur_Entree {
     
        ///On crée la methode principale qui ne contient rien
        public Erreur_Entree()
        {
     
        }
     
        /// On crée une methode
     
        /// On demande a l'utilisatuer d'entrée une variable compris qui dit si le programme reconnait la reponse
        /// une variable rep2 qui contient la réponse de l'utilisateur et un tableau rep_liste qui 
        /// contient toutes les reponses attendus
        public String Erreur_str(int compris, String rep2,String rep_liste[],Scanner n1) {
     
            /// Tant que le programme ne reconnait pas la reponse il demande a l'utilisateur de 
            /// recommencer
            while (compris == 1){
                for ( int c = 0; c <=1; c++ )
                {
                    if (rep_liste[c].equals(rep2))
                    {
                        compris = 0;
                    }
                }
                if (compris == 0)
                {
                    break;
                }
                System.out.println("Je suis désolé mais je n'ai pas compris \n Veuillez a nouveau me dire si vous voulez jouer");
                rep2 = n1.nextLine();
     
            }
            return rep2;
        }
     
            ///On crée une methode gerant les erreurs si un utlisisateur entre une chaine de caractère
            ///au lieu d'entrée un chiffre
     
            public int Erreur_int(String message,boolean erreur , int grille, Scanner n){
     
                do {
                    erreur = false;
                    try {
                        System.out.println(message);
                        grille = n.nextInt();
                    } catch (java.util.InputMismatchException e) {
                        System.out.println("Désolé mais ceci n'est pas un chiffre valide.");
                        erreur = true;
                    }finally{
                        n.nextLine();
                    }
                } while (erreur);
                return grille;
            }
     
        }
    La classe Fen_Inter:
    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
    package maBatailleNavale;
     
    import javax.swing.JFrame;
     
     
     
    public class Fen_Inter extends JFrame {
     
     
     
        public Fen_Inter(){                
            this.setTitle("Bataille Navale");
            this.setSize(517, 539);
            this.setLocationRelativeTo(null);               
            this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            this.setContentPane(new Panel());
     
     
        this.setVisible(true);
      }     
    }
    et enfin la classe Panel:
    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
    package maBatailleNavale;
     
    import java.awt.Graphics;
     
    import javax.swing.JPanel;
     
    public class Panel extends JPanel { 
     
        public void paintComponent(Graphics g){
     
            super.paintComponent(g);
            for(int i = 0; i <= 10; i++) {
                g.drawLine(500*i/10,0,500*i/10,500);
                g.drawLine(0,500*i/10,500,500*i/10);
            }
     
                }
     
     
    }
    Je voudrai simplement pouvoir importer la variable grille de mon main dans ma classe panel
    et créer une methode qui créera des carrés dans la fenêtre dès que l’appellerai (j'aimerai pouvoir l'utilisé depuis mon main).

    Pourriez vous m'aider a résoudre ce problème ?

    Merci d'avance pour votre aide

  2. #2
    Membre habitué
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2011
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 262
    Points : 157
    Points
    157
    Par défaut
    salut , j'ai essayé de livre votre code et je vois que vous ne profitez pas de ce que java nous permet , ou est l'orienté objet ? la façon dont vous voulez passer des objets n'est pas la bonne .

    ce que je vous propose d’après mon expérience:

    essayer d'appliquer les techniques de l'orienté objet dans votre programme, n'essayer pas de tout mettre dans la méthode main, la méthode main sert juste à lancer le programme mais pas à mettre tout un programme dedans.

    essayer de suivre le design pattern MVC (model vue controlleur)pour votre interface graphique , cette manière de faire va vous faciliter beaucoup votre boulot
    c'est vrai que je vous ai pas donné des réponses exactes mais les grands titres sont plus importants.

    bon courage .

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2015
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2015
    Messages : 42
    Points : 23
    Points
    23
    Par défaut
    Salut,
    J'ai suivi vos conseils (j'ai transformer mon main en une classe et créer un nouveau main qui lance simplement cette classe) et me suis également servi d'accesseurs pour faire ce que je voulais et maintenant le programme fonctionne

    Merci pour votre aide

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2014
    Messages : 15
    Points : 17
    Points
    17
    Par défaut
    Je suis d'accord avec ce qu'a dit momedalhouma. Ton programme n'utilise pas les spécificités de Java. L'utilisation du pattern MVC pourra par ailleurs t'éviter bien des déboires.

    Pour répondre à ta première question, voici ce que tu pourrais faire pour résoudre ton problème :

    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
    package maBatailleNavale;
     
    import java.awt.Graphics;
     
    import javax.swing.JPanel;
     
     
    public class Panel extends JPanel {
        // On ajoute la taille de la grille au panel
        int grilleTaille = 10;
     
        public void setGrilleTaille(int g)
        {
            grilleTaille = g;
            // Lorsque l'on change la taille de la grille, on appelle
            // repaint() pour actualiser l'affichage.
            repaint();
        }
     
        public void paintComponent(Graphics g){
     
            super.paintComponent(g);
            for(int i = 0; i <= grilleTaille; i++) {
                g.drawLine(500*i/grilleTaille,0,500*i/grilleTaille,500);
                g.drawLine(0,500*i/grilleTaille,500,500*i/grilleTaille);
            }
        }
    }
    Toutefois, dans le cas présent, je n'ai rajouté qu'une rustine : le modèle de ton panel n'est constitué que de la taille de la grille. Mais si tu complexifie ton interface, tu devrais ajouter un modèle à ton application et séparer ton contrôleur du main.

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

Discussions similaires

  1. Problème avec une UDF
    Par kanmaber dans le forum Bases de données
    Réponses: 2
    Dernier message: 27/08/2004, 23h42
  2. [JBOSS] [Struts] Problème avec une application
    Par Tiercel dans le forum Wildfly/JBoss
    Réponses: 5
    Dernier message: 13/07/2004, 13h50
  3. Problème avec une instruction OUTER /Postgres
    Par Volcomix dans le forum Langage SQL
    Réponses: 14
    Dernier message: 21/04/2004, 16h56
  4. problème avec une requête imbriquée
    Par jaimepasteevy dans le forum Langage SQL
    Réponses: 13
    Dernier message: 05/12/2003, 10h29
  5. Problème avec une procédure stockée
    Par in dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/05/2003, 15h33

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