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 :

ralentir les opération en java


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut ralentir les opération en java
    Bonjour,
    j'utilise NetBeans 6.9 et le langage java. J'ai créer un jeu de robot qui se déplace tour par tour, le problème c'est que la vitesse des opération est trop rapide et il n'affiche que le résultat final. J'aimerez ralentir les opérations pour que l'utilisateur voient les déplacement des robots tour à tour.

    J'aimerez savoir s'il existait une méthode capable de faire ceci (par exemple un tour par seconde)

    merci d'avance de vos réponses

    gio89

  2. #2
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Salut,

    Sans le code concerné, difficile de donner une reponse plus précise. Mais tu peux utiliser Thread.sleep pour ralentir ton programme aux endroits qui t'interessent.

    a+

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2010
    Messages : 94
    Par défaut
    En effet, sans code c'est difficile.

    la méthode sleep de la classe Thread peut être une solution...
    ou mettre en place un timer...

    On attend ton code!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    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
    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
     
    public class PlateauJeu extends javax.swing.JFrame {
     private Jeu lejeu;int larg,longu,nbto,nbje,nbdiv;int nbj=1;int nbgagne=0;boolean fin=false;int nbt=0;
     
        public PlateauJeu() {
            initComponents();
           Choix jd=new Choix(this,true);
           jd.setVisible(true);
           larg=jd.largueurgrille;
           longu=jd.longueurgrille;
           System.out.println(larg);System.out.println(longu);
           nbto=jd.nbtour;
           nbdiv=jd.division;
           nbje=jd.nbjeux;
          lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // 
           creationJeu();
           afficheJeu();
     
           jeu();
     
        }
     
     
        public void creationJeu(){
      // création d'une stratégie en grille de longeur et largeur définit par l'utilisateur
       GridLayout g=new GridLayout(longu,larg);
        Grille.setLayout(g);
       for(int i=1;i<=longu;i++)
         for(int j=1;j<=larg;j++)
         {JPanel pan=new JPanel();  // créaation d'une case (panel)
          Grille.add(pan);     // ajout de la case dans la grille
         }
      }
     
     
      public void afficheJeu(){ 
     
     
       for(int i=0;i<longu;i++)
           for(int j=0;j<larg;j++)
           { // récupére les panneau de la grille un par un et regarde son numéro (0,1 ou 2)
             JPanel pan=(JPanel)Grille.getComponent(i*larg+j);
            // création d'une bordure
             Border lineBdr = BorderFactory.createLineBorder(Color.BLACK);
             if(lejeu.g.grille[i][j]==1)
             {  // coloration de la case en jaune si son numéro est 1
                 pan.setBackground(Color.YELLOW);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==0)
             {// coloration de la case en rouge si son numéro est 0
                 pan.setBackground(Color.RED);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==2)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.BLUE);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==3)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.GREEN);
                 pan.setBorder(lineBdr);}
     
           }
       }
     
      public void jeu(){do{fin=false;nbt=0;
          if(nbj>1)
           lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // création d'un nouveau jeu
     
     
           if(nbj>=1)
           {nbt = 0;                  //remise à zero du nombre de tours
            if(lejeu.fin)
           {   lejeu.g.AffichageGrille();
               nbgagne++;  // incrémente le nombre de parties gagnantes
               fin = true;
               System.out.println("gagner en : "+1+" tours");
           }
            while(nbt<=lejeu.nbTour && !fin)
            {lejeu.Faireuntour();     // fait un tour
            nbt++;                      // incrémente le nombre de tour
           // verification de la fin d'un tour
            if(lejeu.r.fin || lejeu.r2.fin)
            {
                nbgagne++;
                fin = true;
                System.out.println("gagner en : "+nbt+" tours");
             }
            if(!lejeu.r.fin && !lejeu.r2.fin && nbt==lejeu.nbTour)
              System.out.println("perdu en +"+nbt+"tours");
            }
           }
           nbj++;
           }while(nbj<=lejeu.nbJeu); // faire le jeu autaut de fois que l'utilisateur le demande
     
          afficheJeu();
      }
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            Grille = new javax.swing.JPanel();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            getContentPane().setLayout(new java.awt.GridLayout(1, 1));
     
            Grille.setLayout(new java.awt.GridLayout(4, 4));
            getContentPane().add(Grille);
     
            pack();
        }// </editor-fold>                        
     
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    PlateauJeu pj=new PlateauJeu();
                    pj.setVisible(true);
                    pj.setSize(500, 500);
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JPanel Grille;
        // End of variables declaration                   
     
    }
    Voila le code du programme principale
    par contre comment on utilise sleep???

  5. #5
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    En supposant que ton algo s'execute dans un thread different de l'EDT, il suffit de faire Thread.sleep(temps_attente);
    => C'est une methode statique, pas besoin d'instance.

    Et s'il s'execute dans l'EDT, créer un nouveau thread pour le sortir.

    a+

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    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
    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
     
    public class PlateauJeu extends javax.swing.JFrame {
     private Jeu lejeu;int larg,longu,nbto,nbje,nbdiv;int nbj=1;int nbgagne=0;boolean fin=false;int nbt=0;
     
        public PlateauJeu() {
            initComponents();
           Choix jd=new Choix(this,true);
           jd.setVisible(true);
           larg=jd.largueurgrille;
           longu=jd.longueurgrille;
           System.out.println(larg);System.out.println(longu);
           nbto=jd.nbtour;
           nbdiv=jd.division;
           nbje=jd.nbjeux;
          lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // 
           creationJeu();
           afficheJeu();
     
           jeu();
     
        }
     
     
        public void creationJeu(){
      // création d'une stratégie en grille de longeur et largeur définit par l'utilisateur
       GridLayout g=new GridLayout(longu,larg);
        Grille.setLayout(g);
       for(int i=1;i<=longu;i++)
         for(int j=1;j<=larg;j++)
         {JPanel pan=new JPanel();  // créaation d'une case (panel)
          Grille.add(pan);     // ajout de la case dans la grille
         }
      }
     
     
      public void afficheJeu(){ 
     
     
       for(int i=0;i<longu;i++)
           for(int j=0;j<larg;j++)
           { // récupére les panneau de la grille un par un et regarde son numéro (0,1 ou 2)
             JPanel pan=(JPanel)Grille.getComponent(i*larg+j);
            // création d'une bordure
             Border lineBdr = BorderFactory.createLineBorder(Color.BLACK);
             if(lejeu.g.grille[i][j]==1)
             {  // coloration de la case en jaune si son numéro est 1
                 pan.setBackground(Color.YELLOW);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==0)
             {// coloration de la case en rouge si son numéro est 0
                 pan.setBackground(Color.RED);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==2)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.BLUE);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==3)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.GREEN);
                 pan.setBorder(lineBdr);}
     
           }
       }
     
      public void jeu(){do{fin=false;nbt=0;
          if(nbj>1)
           lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // création d'un nouveau jeu
     
     
           if(nbj>=1)
           {nbt = 0;                  //remise à zero du nombre de tours
            if(lejeu.fin)
           {   lejeu.g.AffichageGrille();
               nbgagne++;  // incrémente le nombre de parties gagnantes
               fin = true;
               System.out.println("gagner en : "+1+" tours");
           }
            while(nbt<=lejeu.nbTour && !fin)
            {lejeu.Faireuntour();     // fait un tour
     
            nbt++;                      // incrémente le nombre de tour
           // verification de la fin d'un tour
            if(lejeu.r.fin || lejeu.r2.fin)
            {
                nbgagne++;
                fin = true;
                System.out.println("gagner en : "+nbt+" tours");
             }
            if(!lejeu.r.fin && !lejeu.r2.fin && nbt==lejeu.nbTour)
              System.out.println("perdu en +"+nbt+"tours");
     
            try{
            Thread.sleep(1000);
            }
             catch(InterruptedException e){}
            }
           }
           nbj++;
           }while(nbj<=lejeu.nbJeu); // faire le jeu autaut de fois que l'utilisateur le demande
     
        //  afficheJeu();
      }
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            Grille = new javax.swing.JPanel();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
            getContentPane().setLayout(new java.awt.GridLayout(1, 1));
     
            Grille.setLayout(new java.awt.GridLayout(4, 4));
            getContentPane().add(Grille);
     
            pack();
        }// </editor-fold>                        
     
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    PlateauJeu pj=new PlateauJeu();
                    pj.setVisible(true);
                    pj.setSize(500, 500);
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JPanel Grille;
        // End of variables declaration                   
     
    }
    J'ai fait cela et sa marche merci par contre je n'arrive pas a afficher la grille a chaque tour.
    Il m'affiche la grille une fois la fonction jeu() fini, or j'aimerez l'afficher a chaque tour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while(nbt<=lejeu.nbTour && !fin)
            {lejeu.Faireuntour();     // fait un tour
            afficheJeu();
            nbt++;
    je pensait le mettre là mais sa ne change rien, il me l'affiche que une fois l'exécution fini. Comment on peut y remedier?

  7. #7
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Si tu veux plus d'aide, il va falloir poster le code qui appelle la fonction affiche jeu, en particulier pour savoir le contexte dans lequel il est appelé.

    Mais à vue de boule de cristal, je dirais que tu appelles probablement ta fonction dans le contexte de l'EDT, par exemple sur un appuie de bouton (dans un action listener) ou bien dans la foulée de la construction de PlateauJeu.

    Pour pouvoir l'afficher, il faut 2 choses :
    1 - avoir fini toutes les creations d'objets graphiques (autrement dit, ne pas appeler la boucle qui appelle la fonction affichejeu() dans le constructeur de PlateauJeu).
    2 - faire le traitement de ton jeu hors du contexte de l'EDT. Pour plus d'info, une classe qui peut t'aider : SwingWorker.

    a+

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    La fonction afficheJeu() c'est celui de l'EDT donc il faut pas que j'appelle jeu() dans le constructeur mais comment on utilise la fonction SwingWorker? et a quoi permet t'elle d'aboutir?

  9. #9
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    C'est un peu trop compliqué pour etre resumé en quelques mots. Mais pour faire simple, swing utilise une tache spécifique (EDT) pour mettre à jour l'ihm afin de ne pas avoir besoin de gérer de synchronisation (qui est couteuse en performances).

    La classe SwingWorker permet de faire des traitements longs qui necessitent de mettre à jour l'IHM. Elle a surtout l'avantage d'etre un bon point d'entrée pour comprendre le concept de l'EDT.

    Maintenant, pour aller plus en profondeur, il va falloir regarder du coté de la javadoc... ou bien poster plus de code.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    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
    155
    156
    157
    158
    159
    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
     
    public class PlateauJeu extends javax.swing.JFrame {
     private Jeu lejeu;int larg,longu,nbto,nbje,nbdiv;int nbj=1;int nbgagne=0;boolean fin=false;int nbt=0;
     
        public PlateauJeu() {
            initComponents();
           Choix jd=new Choix(this,true);
           jd.setVisible(true);
           larg=jd.largueurgrille;
           longu=jd.longueurgrille;
           System.out.println(larg);System.out.println(longu);
           nbto=jd.nbtour;
           nbdiv=jd.division;
           nbje=jd.nbjeux;
          lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // 
           creationJeu();
           afficheJeu();
     
     
     
        }
     
     
        public void creationJeu(){
      // création d'une stratégie en grille de longeur et largeur définit par l'utilisateur
       GridLayout g=new GridLayout(longu,larg);
        Grille.setLayout(g);
       for(int i=1;i<=longu;i++)
         for(int j=1;j<=larg;j++)
         {JPanel pan=new JPanel();  // créaation d'une case (panel)
          Grille.add(pan);     // ajout de la case dans la grille
         }
      }
     
     
      public void afficheJeu(){ 
     
     
       for(int i=0;i<longu;i++)
           for(int j=0;j<larg;j++)
           { // récupére les panneau de la grille un par un et regarde son numéro (0,1 ou 2)
             JPanel pan=(JPanel)Grille.getComponent(i*larg+j);
            // création d'une bordure
             Border lineBdr = BorderFactory.createLineBorder(Color.BLACK);
             if(lejeu.g.grille[i][j]==1)
             {  // coloration de la case en jaune si son numéro est 1
                 pan.setBackground(Color.YELLOW);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==0)
             {// coloration de la case en rouge si son numéro est 0
                 pan.setBackground(Color.RED);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==2)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.BLUE);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==3)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.GREEN);
                 pan.setBorder(lineBdr);}
     
           }
       }
     
      public void jeu(){do{fin=false;nbt=0;
          if(nbj>1)
           lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // création d'un nouveau jeu
     
     
           if(nbj>=1)
           {nbt = 0;                  //remise à zero du nombre de tours
            if(lejeu.fin)
           {   lejeu.g.AffichageGrille();
               nbgagne++;  // incrémente le nombre de parties gagnantes
               fin = true;
               System.out.println("gagner en : "+1+" tours");
           }
            while(nbt<=lejeu.nbTour && !fin)
            {lejeu.Faireuntour();     // fait un tour
            afficheJeu();
            nbt++;                      // incrémente le nombre de tour
           // verification de la fin d'un tour
            if(lejeu.r.fin || lejeu.r2.fin)
            {
                nbgagne++;
                fin = true;
                System.out.println("gagner en : "+nbt+" tours");
             }
            if(!lejeu.r.fin && !lejeu.r2.fin && nbt==lejeu.nbTour)
              System.out.println("perdu en +"+nbt+"tours");
     
            try{
            Thread.sleep(1000);
            }
             catch(InterruptedException e){}
            }
           }
           nbj++;
           }while(nbj<=lejeu.nbJeu); // faire le jeu autaut de fois que l'utilisateur le demande
     
          afficheJeu();
      }
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">
        private void initComponents() {
     
            Grille = new javax.swing.JPanel();
            jPanel1 = new javax.swing.JPanel();
            jButton1 = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            Grille.setLayout(new java.awt.GridLayout(4, 4));
            getContentPane().add(Grille, java.awt.BorderLayout.CENTER);
     
            jButton1.setText("Lancer le test");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
            jPanel1.add(jButton1);
     
            getContentPane().add(jPanel1, java.awt.BorderLayout.WEST);
     
            pack();
        }// </editor-fold>
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
          jeu();
        }
     
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    PlateauJeu pj=new PlateauJeu();
                    pj.setVisible(true);
                    pj.setSize(500, 500);
                }
            });
        }
     
        // Variables declaration - do not modify
        private javax.swing.JPanel Grille;
        private javax.swing.JButton jButton1;
        private javax.swing.JPanel jPanel1;
        // End of variables declaration
     
    }
    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
     
    public class Jeu {
    Grille g;UnTour tour;boolean fin=false;int nbTour;int nbJeu;int nbReussite=0;Proie r2;Predateur r;int la;int lo;int div;
     
    public Jeu(int llo,int lla,int nbtour,int divv,int nbjeu){
     
          fin=false;lo=llo;la=lla;div=divv;
           g=new Grille(lo,la);
           r=new Predateur((int)(Math.random()*lo),(int)(Math.random()*la));
           r2=new Proie((int)(Math.random()*lo),(int)(Math.random()*la));
           g.ajouterRobot(r);
           g.ajouterRobot2(r2);
     
           if(r.coordoneeX==r2.coordoneeX && r.coordoneeY==r2.coordoneeY)
              fin=true;
           nbTour=nbtour;nbJeu=nbjeu;
     
    }
     
    public void Faireuntour(){
        tour=new UnTour(g,lo,la,div,r,r2);long l=1000;
    }
    }
    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
     
     
    public class Grille{
    int Longeurgrille;int Largeurgrille; int[][] grille;
     
        Grille(int longeur,int largeur)
        {Longeurgrille=longeur; Largeurgrille=largeur;
         grille=new int [Longeurgrille][Largeurgrille];
         InitialisationGrille();
        }
     
     
       public void InitialisationGrille()
       {
        for(int i=0;i<Longeurgrille;i++)
          for(int j=0;j<Largeurgrille;j++)
            grille[i][j]=1;
        AjouterObstacle((int)(Longeurgrille));
        }
     
       public void AffichageGrille()
       {for(int i=0;i<Longeurgrille;i++)
        {for (int j = 0; j < Largeurgrille; j++)
          System.out.print(grille[i][j]+" ");
        System.out.println();}
        }
     
     public void ajouterRobot(Predateur p)
     {grille[p.coordoneeX][p.coordoneeY]=3;}
     
      public void ajouterRobot2(Proie pr)
     {grille[pr.coordoneeX][pr.coordoneeY]=2;}
     
    public void AjouterObstacle(int obstacle)
    { int i=0;
       do{int xo=(int)(Math.random()*Longeurgrille);
          int yo=(int)(Math.random()*Largeurgrille);
          if(grille[xo][yo]==1)
          { grille[xo][yo] = 0;
            i++;}
       }while(i<obstacle);
    }
    }
    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
     
     
    public class UnTour {     
       public UnTour(Grille g,int lo,int la,int div,Predateur r,Proie r2){
           r.verifdefin(g);;
           r2.verifdefin(g);
           r.Sytemedecontrole(g,div);
           r2.Sytemedecontrole(g, div);
           System.out.println();
           g.AffichageGrille();
     
       }
     
     
     
    }
    Voila les codes qui peuvent etre utile maintenant comment faire pour mettre la fonction SwingWorker.

    J'ai mis la methode jeux dans un bouton, il y a juste a cliquer sur le bouton mais sa m'affiche que le début et la fin.

  11. #11
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Visiblement, la boule de cristal ne s'etait pas trompée
    Tu appelles ta fonction jeu() dans le contexte de l'EDT. Pour que l'affichage puisse se faire, il faut remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
          jeu();
        }
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
    Thread t = new Thread(){
       public void run()
       {
          jeu();
       }
    };
    t.start();
    Comme ca, la fonction jeu() ne sera plus appelée dans le contexte de l'EDT. Ceci dit, ca veut dire qu'il sera possible d'appuyer sur les boutons, fermer la fenetre, ... pendant que le jeu sera en cours. Dans l'ideal, il faudrait verifier que ca ne pose pas de probleme...

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    merci sa marche bien

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    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
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    import javax.swing.*;
    import javax.swing.border.*;
    import java.awt.*;
    import java.awt.Graphics;
    import java.awt.Image;
    import javax.swing.JFrame.*;
     
    public class PlateauJeu extends javax.swing.JFrame {
     private Jeu lejeu;int larg,longu,nbto,nbje,nbdiv;int nbj=1;int nbgagne=0;boolean fin=false;int nbt=0; Image font;
     
        public PlateauJeu() {
            initComponents();
           Choix jd=new Choix(this,true);
           jd.setVisible(true);
           larg=jd.largueurgrille;
           longu=jd.longueurgrille;
           System.out.println(larg);System.out.println(longu);
           nbto=jd.nbtour;
           nbdiv=jd.division;
           nbje=jd.nbjeux;
          lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // 
           creationJeu();
           afficheJeu();
     
     
     
        }
     
     
        public void creationJeu(){
      // création d'une stratégie en grille de longeur et largeur définit par l'utilisateur
       GridLayout g=new GridLayout(longu,larg);
        Grille.setLayout(g);
       for(int i=1;i<=longu;i++)
         for(int j=1;j<=larg;j++)
         {JPanel pan=new JPanel();  // créaation d'une case (panel)
          Grille.add(pan);     // ajout de la case dans la grille
         }
      }
     
     
      public void afficheJeu(){ 
     
     
       for(int i=0;i<longu;i++)
           for(int j=0;j<larg;j++)
           { // récupére les panneau de la grille un par un et regarde son numéro (0,1 ou 2)
             JPanel pan=(JPanel)Grille.getComponent(i*larg+j);
            // création d'une bordure
             Border lineBdr = BorderFactory.createLineBorder(Color.BLACK);
             if(lejeu.g.grille[i][j]==1)
             {  // coloration de la case en jaune si son numéro est 1
                // pan.setBackground(Color.YELLOW);
                 repaint();
                 pan.setBorder(lineBdr);
                }
     
             if(lejeu.g.grille[i][j]==0)
             {// coloration de la case en rouge si son numéro est 0
                 pan.setBackground(Color.RED);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==2)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.BLUE);
                 pan.setBorder(lineBdr);}
     
             if(lejeu.g.grille[i][j]==3)
             {// coloration de la case en bleu si son numéro est 2
                 pan.setBackground(Color.GREEN);
                 pan.setBorder(lineBdr);}
     
           }
       }
    public void paint(Graphics g)
    	{
    		super.paint(g);
    		font = getToolkit().getImage("src/m.gif");
    		if(font != null) // Si l'image existe, ...
    		g.drawImage(font,10,10,this); // ... on la dessine
    	}
     
      public void jeu(){do{fin=false;nbt=0;
          if(nbj>1)
           lejeu=new Jeu(longu,larg,nbto,nbdiv,nbje);
          // création d'un nouveau jeu
     
     
           if(nbj>=1)
           {nbt = 0;                  //remise à zero du nombre de tours
            if(lejeu.fin)
           {   lejeu.g.AffichageGrille();
               nbgagne++;  // incrémente le nombre de parties gagnantes
               fin = true;
               System.out.println("gagner en : "+1+" tours");
           }
            while(nbt<=lejeu.nbTour && !fin)
            {lejeu.Faireuntour();     // fait un tour
            afficheJeu();
            nbt++;                      // incrémente le nombre de tour
           // verification de la fin d'un tour
            if(lejeu.r.fin || lejeu.r2.fin)
            {
                nbgagne++;
                fin = true;
                System.out.println("gagner en : "+nbt+" tours");
             }
            if(!lejeu.r.fin && !lejeu.r2.fin && nbt==lejeu.nbTour)
              System.out.println("perdu en +"+nbt+"tours");
     
            try{
            Thread.sleep(1000);
            }
             catch(InterruptedException e){}
            }
           }
           nbj++;
           }while(nbj<=lejeu.nbJeu); // faire le jeu autaut de fois que l'utilisateur le demande
     
          afficheJeu();
      }
     
        @SuppressWarnings("unchecked")
        // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
        private void initComponents() {
     
            Grille = new javax.swing.JPanel();
            jPanel1 = new javax.swing.JPanel();
            jButton1 = new javax.swing.JButton();
     
            setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
     
            Grille.setLayout(new java.awt.GridLayout(4, 4));
            getContentPane().add(Grille, java.awt.BorderLayout.CENTER);
     
            jButton1.setText("Lancer le test");
            jButton1.addActionListener(new java.awt.event.ActionListener() {
                public void actionPerformed(java.awt.event.ActionEvent evt) {
                    jButton1ActionPerformed(evt);
                }
            });
            jPanel1.add(jButton1);
     
            getContentPane().add(jPanel1, java.awt.BorderLayout.WEST);
     
            pack();
        }// </editor-fold>                        
     
        private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
          Thread t = new Thread(){
       public void run()
       {
          jeu();
       }
    };
    t.start();
        }                                        
     
     
        public static void main(String args[]) {
            java.awt.EventQueue.invokeLater(new Runnable() {
                public void run() {
                    PlateauJeu pj=new PlateauJeu();
                    pj.setVisible(true);
                    pj.setSize(500, 500);
                }
            });
        }
     
        // Variables declaration - do not modify                     
        private javax.swing.JPanel Grille;
        private javax.swing.JButton jButton1;
        private javax.swing.JPanel jPanel1;
        // End of variables declaration                   
     
    }
    j'aimerez remplacer les couleurs des cases par une image mais je sais pasa comment faire pour que l'image se repete a chaque case comme les couleurs

  14. #14
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Avec 30 secondes de recherche, tu tombes sur :
    http://java.developpez.com/faq/gui/?...general_images

    Vu que tu utilises swing, il faut surcharger la methode "paintComponent" des panels inclus dans "Grille" comme c'est expliqué dans le lien (et accessoirement comme tu l'as deja fait pour afficher m.gif).

    a+

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    Sa j'y arrive ce que je ne sait pas c'est que sa le face pour chaque case qui contienne un même numero.
    car quand je le dessine sa me le fait toujour au mm ndroit et ds le JFrame pas sur le pannel voulu

    donc comment le faire?
    peut tu me montrer?
    on va dire que au lieu de la couleur jaune je veux j.gif
    au lieu de vert je veut v.gif
    et au lieu de bleu je veux b.gif

  16. #16
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Ou est le plaisir si on te fait tout ?
    Mais bon, je te donne une (grosse) piste :
    Creer une classe MonPanel qui etend JPanel et qui redefinie la fonction "paintComponent" comme dans ta jframe ainsi qu'une fonction genre "setImage".

    Ensuite, remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    JPanel pan=new JPanel();
    Grille.add(pan);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MonPanel pan = new MonPanel();
    Grille.add(pan);
    Et enfin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JPanel pan=(JPanel)Grille.getComponent(i*larg+j);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonPanel pan=(MonPanel )Grille.getComponent(i*larg+j);
    et faire en fonction de "lejeu.g.grille[i][j]".

    La, tu devrais pouvoir t'en sortir...

  17. #17
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    c bon merci beaucoup de votre aide

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 35
    Par défaut
    j'aimerai savoir comment adapter l'image pour qu'il prenne tout le JPanel????
    j'ai chercher deja ds le forum mais je n'y arrive pas

Discussions similaires

  1. Les futurs tutoriels Java sur DVP ?
    Par Ricky81 dans le forum Débats
    Réponses: 65
    Dernier message: 06/01/2012, 02h33
  2. Surveiller les opérations effectuées sur un dossier en java
    Par Asi2009 dans le forum Général Java
    Réponses: 3
    Dernier message: 08/08/2011, 13h36
  3. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 01h12
  4. [Stratégie] Ant pour les tests en Java ?
    Par franckR dans le forum Tests et Performance
    Réponses: 5
    Dernier message: 08/03/2004, 09h38

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