Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3039 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  jeu de la vie en java, nouveau probleme avec une methode

 


 Mot :   Pseudo :  
 
 Page :   1  2
Page Précédente
Auteur Sujet :

jeu de la vie en java, nouveau probleme avec une methode

n°323418
specialgue​st
Posté le 05-03-2003 à 13:23:12  profilanswer
 

Je planche actuellement sur un jeu de la vie tres basique en java.
J'ai fini mon interface graphique qui appelle Grille.java ci dessous, en fait au moment où je clique sur un Jbutton de la grille, celui ci se colore en bleu. Mais j'aimerais que le tableau Tab[][] prenne pour valeur 1 qd le jbutton associé est cliqué.
J'ai conscience que mon explication n'est pas tres claire mais si quelq'un pouvait me filer un coup de main ca me depannerais bien.
 
Merci d'avance :)
 
 
 
 
 
public class Grille extends JPanel
{
 public Grille()
 {
  super();
 
        // declaration du tableau de 52x52
        int Tab[][] = new int[52][52];
        JButton buttonTab[][] = new JButton [52] [52];
 
        // Taille de la grille
        this.setSize(480,480);    
        this.setLayout(new GridLayout(50,50));
 
 
        //on remplit le tableau avec des 0 (case vide)    
        for (int i=0; i<52 ; i++)
        {
            for (int j=0; j<52 ;j++)
            {
                Tab[i][j]=0;
            }
        }
 
        //Ajout des boutons
        for (int i=1; i<51 ; i++)
        {
            for (int j=1; j<51 ;j++)
            {
                buttonTab[i][j] = new JButton(/*new ImageIcon("toto.gif" )*/);
                buttonTab[i][j].addActionListener(
                    new ActionListener()
                    {
                        public void actionPerformed(ActionEvent e)
                        {
                            ((JButton) e.getSource()).setBackground(Color.blue);
                         System.out.println("click!" );
                         
                       }
                    }
                );
                this.add( buttonTab[i][j] );
    }//fin for j
        }// fin for i
         
 }
 
}


Message édité par specialguest le 17-03-2003 à 11:18:14
mood
Publicité
Posté le 05-03-2003 à 13:23:12  profilanswer
 

n°323507
Predicator
Posté le 05-03-2003 à 14:32:47  profilanswer
 

tu parcours ta liste de boutons en comparant les références, et tu mets la valeur à 1 dans le tableau
 

Code :
  1. for (int i=0 ; i<buttonTab.length ; i++){
  2.    for (int j=0 ; j<buttonTab[i].length ; j++){
  3.       if (bouton == buttonTab[i][j]){
  4.          Tab[i][j] = 1;
  5.       }
  6.    }
  7. }


 
y'a plus propre, mais cette méthode est facile à mettre en oeuvre dans ton code...

n°323510
specialgue​st
Posté le 05-03-2003 à 14:37:51  profilanswer
 

ok merci , je vais tester ca :)

n°323513
darklord
You're welcome
Posté le 05-03-2003 à 14:40:08  profilanswer
 

plus proprement tu peux créer un objet qui chaine les events sur ton JButton.  
 
En gros tu crée un objet avec comme attributs
 
- un JButton
- une coordonnées X
- une coordonnées Y
 
une méthode pour ajouter un listener sur ton composant, ce dernier s'enregistrant sur le JButton.
 
Qd on clique sur le boutton, ton composant intercepte l'event et cree un ActionEvent avec sa propre référence.
 
Dans ton code tu récupères ce composant spécial et tu as donc X et Y à disposition.
 
Tu pourrais étendre JButton of course mais c'est pas propre :o


---------------
Just because you feel good does not make you right
n°323526
specialgue​st
Posté le 05-03-2003 à 14:51:22  profilanswer
 

:'(
Faut y aller doucement avec moi , je suis super novice en java :)
 
Je pensais faire une class test.java à part qui analyse les jbuttons pour savoir si ils ont été cliqués ou pas et qui rempli de ce fait le tableau avec les 1.
Ensuite il execute l'algo standard du jeu de la vie , puis retourne les valeurs à la grille en indiquant un changement de couleur s'il y a lieu.
 
Pour l'instant je ne sais pas encore comment faire passer le tableau d'une classe à l'autre alors ca me bloque un peu.
 
A votre avis le remplissage du tableau avec des 1 faut mieux le faire a part dans test.java ou dans grille.java?
 
En tout cas merci pour votre aide ca me permet d'avancer un peu plus :)


Message édité par specialguest le 05-03-2003 à 14:53:29
n°323541
Predicator
Posté le 05-03-2003 à 15:13:21  profilanswer
 

vu la complexité énorme (j'avais pas vu aussi dur depuis HelloWorld ;)) tu devrais tout mettre dans la même class...

n°323624
darklord
You're welcome
Posté le 05-03-2003 à 16:21:29  profilanswer
 

Predicator a écrit :

vu la complexité énorme (j'avais pas vu aussi dur depuis HelloWorld ;)) tu devrais tout mettre dans la même class...


 
de quoi tu parles là?  :heink:


---------------
Just because you feel good does not make you right
n°323628
Predicator
Posté le 05-03-2003 à 16:22:49  profilanswer
 

DarkLord a écrit :


 
de quoi tu parles là?  :heink:  


 
il demande un avis, je lui donne le mien...
 

Citation :

A votre avis le remplissage du tableau avec des 1 faut mieux le faire a part dans test.java ou dans grille.java?


 
vus la complexité de la structure (deux tableaux), il n'a pas besoin de créer deux classes séparées. une simple applet ou application, et les données dedans, ça suffit...
 
à la rigueur, un modèle document-vue très basique, mais ça n'a pas grand intérêt dans ce cas...


Message édité par Predicator le 05-03-2003 à 16:23:58
n°324569
souk
Tourist
Posté le 06-03-2003 à 13:07:06  profilanswer
 

sinon tu peux faire ca :

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

 
public class Grille extends JPanel implements ActionListener
{
int Tab[][];
JButton buttonTab[][];
 
public Grille()
{
 super();
 
       // declaration du tableau de 52x52
       Tab = new int[52][52];
       buttonTab = new JButton [52] [52];
 
       // Taille de la grille
       this.setSize(480,480);    
       this.setLayout(new GridLayout(50,50));
 
 
       //on remplit le tableau avec des 0 (case vide)    
       for (int i=0; i<52 ; i++)
       {
           for (int j=0; j<52 ;j++)
           {
               Tab[i][j]=0;
           }
       }
 
       //Ajout des boutons
       for (int i=1; i<51 ; i++)
       {
           for (int j=1; j<51 ;j++)
           {
               buttonTab[i][j] = new JButton(/*new ImageIcon("toto.gif" )*/);
               buttonTab[i][j].addActionListener(this);            this.add( buttonTab[i][j] );
   }//fin for j
       }// fin for i
       
}
 
public void actionPerformed(ActionEvent e) {
//attention code pas tres joli
for(int i=0;i<52;i++){
   for(int j=0;j<52;j++){
      if (e.getSource()==buttonTab[i][j]){
          Tab[i][j]=1-Tab[i][j];
      }
   }
}
}

 
}

n°324575
Predicator
Posté le 06-03-2003 à 13:09:14  profilanswer
 

souk a écrit :

sinon tu peux faire ca :


 
pas mieux, mais j'avais la flemme de l'écrire :jap:

mood
Publicité
Posté le 06-03-2003 à 13:09:14  profilanswer
 

n°330016
specialgue​st
Posté le 11-03-2003 à 22:33:31  profilanswer
 

oups , je me suis absenté un peu , j'ai du lacher mon projet pour d'autres travaux :D
Je m'y remet demain.
 
En tout cas merci pour votre aide

n°330556
specialgue​st
Posté le 12-03-2003 à 14:25:08  profilanswer
 

J'ai fais les modifications mais il me fait 2 erreurs à la compilation : il ne trouve pas le buttonTab et le Tab :(

n°330571
bobuse
Posté le 12-03-2003 à 14:42:29  profilanswer
 

specialguest a écrit :

J'ai fais les modifications mais il me fait 2 erreurs à la compilation : il ne trouve pas le buttonTab et le Tab :(


Ha bah c'est balot !


---------------
get amaroK plugin
n°330594
specialgue​st
Posté le 12-03-2003 à 14:51:43  profilanswer
 

oui c'est balot :D
Là jai declaré les tableaux en dehors du public Grille
public  int Tab[][];
public  JButton buttonTab[][];
 
Le listener fonctionne pour afficher un texte ou autre mais si il fait appel aux tableaux ca ne fonctionne plus :'(
 
EDIT: mainteant ca compile mais ca ne fonctionne pas bien :(


Message édité par specialguest le 13-03-2003 à 09:21:13
n°332162
specialgue​st
Posté le 13-03-2003 à 14:48:35  profilanswer
 

problème resolu :D
Merci a tous

n°332183
bobuse
Posté le 13-03-2003 à 15:23:32  profilanswer
 

specialguest a écrit :

problème resolu :D
Merci a tous  


de rien :sarcastic:


---------------
get amaroK plugin
n°332190
specialgue​st
Posté le 13-03-2003 à 15:41:36  profilanswer
 


 
Tout le monde n'est pas un pro en java comme toi...
 

n°334996
specialgue​st
Posté le 17-03-2003 à 11:21:14  profilanswer
 

Je me retrouve maintenant avec une classe MainFrame qui contient l'interface graphique et une classe Grille qui contient la grille et une methode "tester".
 
J'aimerais pouvoir appeller la methode "tester" de Grille à partir de la classe MainFrame mais je ne sais pas trop comment m'y prendre.

n°335033
bobuse
Posté le 17-03-2003 à 12:01:23  profilanswer
 

specialguest a écrit :


 
Tout le monde n'est pas un pro en java comme toi...
 


en fait on de rien etait un peu ironique, car tu dis que tu as resolu ton pb, mais finalement on sait pas comment ... ou alors j'ai pas tout suivi ...
 
pour ta derniere question :
1. Ton objet Mainframe doit avoir un attribut du genre

Code :
  1. private Grille grille;


2. donc pour appeler ta methode tester(), hop :

Code :
  1. grille.tester();


 
Tu ferai bien de jeter un oeuil sur les bases de la prog orientée objet, et comment que ça marche en Java ... (c'est un conseil)
 
penserenjava.free.fr :whistle:


---------------
get amaroK plugin
n°335238
specialgue​st
Posté le 17-03-2003 à 13:46:54  profilanswer
 

mon ancien problème a été resolu comme ceci
 
public class Grille extends JPanel implements ActionListener
{
public int Tab[][]=new int[52][52];
public JButton buttonTab[][]= new JButton [52][52];
 
public Grille()
 
En fait ca ne fonctionnait pas au depart car je mettais la declaration des tableaux dans le "public Grille" donc ma methode "test" qui devait acceder aux tableaux n'y parvenait pas.
 
 
Là je teste la solution que tu m'as fourni, merci :)

n°335239
Predicator
Posté le 17-03-2003 à 13:47:00  profilanswer
 
n°335250
specialgue​st
Posté le 17-03-2003 à 13:53:56  profilanswer
 

Tout fonctionne parfaitement ,
j'avais déja vu ce site grâce aux liens du forum mais je trouve que ce n'est pas évident de s'y retrouver :(
 

n°335259
bobuse
Posté le 17-03-2003 à 13:55:31  profilanswer
 

specialguest a écrit :

Tout fonctionne parfaitement ,
j'avais déja vu ce site grâce aux liens du forum mais je trouve que ce n'est pas évident de s'y retrouver :(
 
 


ben ya la VO qui est mieux presenté si tu veux ...


---------------
get amaroK plugin
n°336188
specialgue​st
Posté le 18-03-2003 à 11:33:31  profilanswer
 

j'ai encore un probleme :(
 

Code :
  1. public class Grille extends JPanel implements ActionListener
  2. {
  3. public int Tab[][]=new int[52][52];
  4. public int Tab2[][]=new int[52][52];
  5. public JButton buttonTab[][]= new JButton [52][52];
  6. public Grille()
  7. {
  8. super();
  9.        this.setSize(500,500); // Taille de la grille
  10.        this.setLayout(new GridLayout(50,50));
  11.        //on remplit les tableaux avec des 0 (case vide)
  12.        for (int i=0; i<52 ; i++){
  13.            for (int j=0; j<52 ;j++){
  14.                Tab[i][j]=Tab2[i][j]=0;
  15.            }
  16.        }
  17.        //Ajout des boutons
  18.        for (int i=1; i<51 ; i++){
  19.            for (int j=1; j<51 ;j++){
  20.  buttonTab[i][j] = new JButton();
  21.  buttonTab[i][j].addActionListener(this);
  22.  buttonTab[i][j].setBackground(Color.white);
  23.  this.add( buttonTab[i][j] );
  24.           }//fin for j
  25.        }// fin for i
  26.      
  27. }//fin public Grille
  28. public void actionPerformed(ActionEvent e){
  29. for(int i=1;i<51;i++){
  30.     for(int j=1;j<51;j++){
  31.            ((JButton) e.getSource()).setBackground(Color.black);
  32.                         if (e.getSource()==buttonTab[i][j]){
  33.              Tab[i][j]=Tab2[i][j]=1;
  34.                         System.out.println("Tab2="+Tab2[i][j]);
  35.                         }
  36.                 }
  37.       }
  38. }//fin actionPerformed
  39. /*****************************************************FONCTION DE TEST*********************************************/
  40. //Traitement du tableau
  41. public void Tester(){
  42.    for(int i=1 ; i<51 ; i++){
  43.       for (int j=1 ; j<51 ; j++){
  44.        
  45.         //etat de la cellule testée
  46.      int etat=Tab2[i][j]; // etat de la cellule
  47.         int cpt=0 ;//compteur qui sert a stocker le nombre de voisins en vie
  48.  System.out.println("etat"+etat);
  49.         //tester les voisins
  50.         cpt = Tab2[i-1][j-1] + Tab2[i][j-1] + Tab2[i+1][j-1] + Tab2[i+1][j] + Tab2[i+1][j+1] + Tab2[i][j+1] + Tab2[i-1][j+1] + Tab2[i-1][j];
  51.        // System.out.println("cpt"+cpt);
  52.         if(((etat == 0) && (cpt ==3)) ||  ((etat == 1) && ((cpt == 3) || (cpt == 2)))){
  53.      etat=1;
  54.      }
  55.      else etat=0;
  56.  if (etat==1){
  57.   Tab[i][j]=etat;
  58.   (buttonTab[i][j]).setBackground(Color.black);
  59.   }
  60.         else if (etat==0){
  61.       Tab[i][j]=etat;
  62.       (buttonTab[i][j]).setBackground(Color.white);
  63.       }
  64.      }//for j
  65.    }//for i
  66. }//fin Tester */


 
 
ici

Code :
  1. public void actionPerformed(ActionEvent e){
  2. for(int i=1;i<51;i++){
  3.     for(int j=1;j<51;j++){
  4.            ((JButton) e.getSource()).setBackground(Color.black);
  5.                         if (e.getSource()==buttonTab[i][j]){
  6.              Tab[i][j]=Tab2[i][j]=1;
  7.                         System.out.println("Tab2="+Tab2[i][j]);
  8.                         }
  9.                 }
  10.       }
  11. }//fin actionPerformed


le println affiche bien 1 pour Tab2
 
mais quand je cherche a afficher l'etat dans la methose tester
il m'affiche des 80,10,120 etc.. enfin des chiffres qui sortent dont je ne sais où.

n°336218
bobuse
Posté le 18-03-2003 à 12:04:18  profilanswer
 

Elle est appelée ou ta fonction Tester() ?


---------------
get amaroK plugin
n°336349
specialgue​st
Posté le 18-03-2003 à 14:05:16  profilanswer
 

dans la classe MainFrame , associée au bouton "demarrer"
 

Code :
  1. public class MainFrame extends JFrame
  2. {
  3.     boolean condition=false;
  4. private Grille grille = new Grille();
  5.     public MainFrame()
  6. {
  7.  super("Le Jeu de la Vie" );
  8. /****************************************INITIALISATION DES BOUTONS*************************************/
  9.        
  10.         JButton startBtn = new JButton("Démarrer" );
  11.         startBtn.setToolTipText("Lancer le jeu de la vie" );//info bulle
  12.         startBtn.addActionListener(
  13.          new ActionListener()
  14.                 {
  15.                         public void actionPerformed(ActionEvent e)
  16.                         {
  17.                         System.out.println ("Demarrage" );
  18.                         //Lancer un tester dans grille
  19.                          int i=0;
  20.                          do {
  21.                          grille.Tester();
  22.       i++;
  23.                       // grille.Synchroniser();
  24.                          }while(i<10);
  25.                         }
  26.                  }
  27.         );//startBtn


Message édité par specialguest le 18-03-2003 à 14:08:59
n°336356
bobuse
Posté le 18-03-2003 à 14:09:23  profilanswer
 

specialguest a écrit :

dans la classe MainFrame , associée au bouton "demarrer"


ben alors, c'est que ca doit etre modifie a un endroit alors [:spamafote]  
 
verifie si t'as pas un = a la place d'un == par exemple :whistle:


---------------
get amaroK plugin
n°336400
specialgue​st
Posté le 18-03-2003 à 14:43:12  profilanswer
 

franchement je vois pas :(
g viré le do while pour etre plus sur mais ca fait tjs pareil,
 
"etat" prend des valeurs non conformes
 
tu es sûr que c'est un probleme de = ?


Message édité par specialguest le 18-03-2003 à 15:21:12
n°336478
specialgue​st
Posté le 18-03-2003 à 16:36:25  profilanswer
 

j'ai trouvé une erreur dans une de mes generations de nombres aleatoires mais ca ne concerne pas le pb present :(
 
EDIT:en fait si , c'est lui qui me faussait mes resultats d'etat :D


Message édité par specialguest le 18-03-2003 à 16:45:47
n°336485
bobuse
Posté le 18-03-2003 à 16:44:47  profilanswer
 

specialguest a écrit :


je vois pas le probleme :'(


ben moi non plus !
 
Si tu veux que qqun puisse voir ou ca merdouille nimbouille, faudrait ptet nous en montrer un peu plus ... [:zebra33]


---------------
get amaroK plugin
n°336490
specialgue​st
Posté le 18-03-2003 à 16:51:04  profilanswer
 

bah en fait le "grille" que j'ai mis est quasiment complet , il y vaait en plus une fonction de generation de nombre aleatoire pour remplir la grille mais j'affectais des valeurs a la con a la place d'avoir uniquement des 0 et des 1
 
Perdre une demi journee pour une connerie comme ca :( , j'ai honte
 

Code :
  1. public void Remplir(){
  2. for (int i=1; i<51 ; i++){
  3.        for (int j=1; j<51 ;j++){
  4.  Tab[i][j]=Tab2[i][j]=(int)((Math.random()*20));//remplissage aléatoire
  5.         if (Tab[i][j]==1){
  6.         (buttonTab[i][j]).setBackground(Color.black);
  7.  }
  8.    else
  9.     Tab[i][j]=Tab2[i][j]=0;
  10.   }
  11. }
  12. }//Remplir


 
j'avais pas mis de else pour remettre a 0 tout ce qui n'etait pas a 1. A present cette partie fonctionne.


Message édité par specialguest le 18-03-2003 à 16:54:07
n°337239
bobuse
Posté le 19-03-2003 à 14:21:43  profilanswer
 

J'ai pas tout lu, paske j'ai pas trop le temps ... mais bon heuuuu, c'est bof ta gestion des ActionListener :heink:  
 
En general, c'est plus lisible d'utiliser  

Code :
  1. TaClasse implements ActionListener {
  2. ...
  3.    tonBouton.addActionListener(this);
  4.    tonBouton.setActionCommand("nomAction" );
  5.    tonAutreBouton.addActionListener(this);
  6.    tonAutreBouton.setActionCommand("autreAction" );
  7. ...
  8.    public void actionPerformed(ActionEvent e) {
  9.       if (e.getActionCommand().equals("nomAction" )) {
  10.           ...
  11.       } else if (e.getActionCommand().equals("autreAction" )) {
  12.          ...
  13.       } else ... et c'est Terra
  14.    }
  15. }


par exemple ! On peut meme pousser le vice a faire une classe speciale qui implemente ActionListener, mais bon ...


---------------
get amaroK plugin
n°337252
specialgue​st
Posté le 19-03-2003 à 14:33:37  profilanswer
 

je vais essayer de rendre ca plus propre , mais bon c'est mon premier projet en java alors je tatonne un peu.
 
En cours on te file 2-3 bases et apres c'est démerde toi :(

n°338360
specialgue​st
Posté le 20-03-2003 à 12:05:51  profilanswer
 

hop j'ai refait tout propre mais j'ai toujours les memes problemes :
-je n'arrive pas à temporiser
- le programme semble faire tout ses calculs et juste a la fin il affiche super vite tous les deplacements des boutons :(
 
MainFrame.java

Code :
  1. public class MainFrame extends JFrame implements ActionListener {
  2.  
  3.     boolean condition=false;
  4. private Grille grille = new Grille();
  5.     private static Object toto = new Object();
  6.     public MainFrame(){
  7.         //Ajouter ActionListener et ActionCommand
  8.         startBtn.addActionListener(this);
  9.         startBtn.setActionCommand("start" );
  10.         exitBtn.addActionListener(this);
  11.         exitBtn.setActionCommand("exit" );
  12. stopBtn.addActionListener(this);
  13. stopBtn.setActionCommand("stop" );
  14. rempBtn.addActionListener(this);
  15.         rempBtn.setActionCommand("remplir" );
  16.                
  17.         // ajout des bontons dans le JPanel dédié
  18.         JPanel buttonPane = new JPanel(new GridLayout(0,1));
  19.         buttonPane.add(startBtn);
  20.         buttonPane.add(stopBtn);
  21.         buttonPane.add(rempBtn);
  22.         buttonPane.add(exitBtn);
  23.         buttonPane.add(forme);
  24.         // this référence MainFrame, donc une JFrame
  25.         // ajout des JPanel à la JFrame
  26.         Container c = this.getContentPane();
  27.         c.add(grille, BorderLayout.CENTER);
  28.         c.add(buttonPane, BorderLayout.EAST);
  29.         this.setDefaultCloseOperation(this.EXIT_ON_CLOSE);
  30.         this.setSize(550,500);
  31.         this.show();
  32. }//MainFrame
  33.  
  34. public void actionPerformed(ActionEvent e){
  35.   if (e.getActionCommand().equals("start" )){
  36.   //Lancer un tester dans grille
  37.          int i=0;
  38.   do {
  39.           grille.tester();
  40.    grille.synchroniser();
  41.           //temporisation();
  42.           //rafraichir();
  43.           i++;
  44.          }while(i<200);//while(condition=true);
  45.         }
  46.          else if (e.getActionCommand().equals("exit" )){
  47.           System.exit(0);
  48.           }
  49.   else if (e.getActionCommand().equals("stop" )){
  50.    //condition=true;
  51.   }
  52.   else if (e.getActionCommand().equals("remplir" )){
  53.       grille.remplir();
  54.      }
  55.       }
  56.  
  57.  void temporisation(){
  58.     try {
  59.      synchronized(toto){
  60.         this.wait(500);}
  61.     }
  62.     catch (InterruptedException x){
  63.         System.out.println("Un problème s'est produit !" );
  64.     }
  65.    }//temporisation
  66. public void rafraichir(){
  67.         this.repaint();
  68.         this.show();   
  69. }//rafraichir  
  70. public static void main(String[] args){
  71.         MainFrame m = new MainFrame();
  72.     }
  73. }


 
Grille.java

Code :
  1. public class Grille extends JPanel implements ActionListener
  2. {
  3. public int Tab[][]=new int[52][52];
  4. public int Tab2[][]=new int[52][52];
  5. public JButton buttonTab[][]= new JButton [52][52];
  6. public Grille()
  7. {
  8. super();
  9.        this.setSize(500,500); // Taille de la grille
  10.        this.setLayout(new GridLayout(50,50));
  11.        //on remplit les tableaux avec des 0 (case vide)
  12.        for (int i=0; i<52 ; i++){
  13.            for (int j=0; j<52 ;j++){
  14.                Tab[i][j]=Tab2[i][j]=0;
  15.            }
  16.        }
  17.        //Ajout des boutons
  18.        for (int i=1; i<51 ; i++){
  19.            for (int j=1; j<51 ;j++){
  20.  buttonTab[i][j] = new JButton();
  21.  buttonTab[i][j].addActionListener(this);
  22.  buttonTab[i][j].setBackground(Color.white);
  23.  this.add( buttonTab[i][j] );
  24.           }//fin for j
  25.        }// fin for i
  26.      
  27. }//fin public Grille
  28. public void actionPerformed(ActionEvent e){
  29. for(int i=1;i<51;i++){
  30.     for(int j=1;j<51;j++){
  31.            ((JButton) e.getSource()).setBackground(Color.black);
  32.                         if (e.getSource()==buttonTab[i][j]){
  33.              Tab[i][j]=Tab2[i][j]=1;
  34.                         System.out.println("Tab2="+Tab2[i][j]);
  35.                         }
  36.                 }
  37.       }
  38. }//fin actionPerformed
  39. /*****************************************************FONCTION DE TEST*********************************************/
  40. //Traitement du tableau
  41. public void tester(){
  42.    for(int i=1 ; i<51 ; i++){
  43.       for (int j=1 ; j<51 ; j++){
  44.        
  45.         //etat de la cellule testée
  46.      int etat=Tab2[i][j]; // etat de la cellule
  47.         int cpt=0 ;//compteur qui sert a stocker le nombre de voisins en vie
  48.         //tester les voisins
  49.         cpt = Tab2[i-1][j-1] + Tab2[i][j-1] + Tab2[i+1][j-1] + Tab2[i+1][j] + Tab2[i+1][j+1] + Tab2[i][j+1] + Tab2[i-1][j+1] + Tab2[i-1][j];
  50.      
  51.         if(((etat == 0) && (cpt ==3)) || ((etat == 1) && ((cpt == 3) || (cpt == 2)))){
  52.      etat=1;
  53.      }
  54.      else etat=0;
  55.  if (etat==1){
  56.   Tab[i][j]=etat;
  57.   (buttonTab[i][j]).setBackground(Color.black);
  58.   }
  59.         else if (etat==0){
  60.       Tab[i][j]=etat;
  61.       (buttonTab[i][j]).setBackground(Color.white);
  62.    } 
  63.      }//for j
  64.    }//for i
  65. }//fin tester */
  66. /*********************************************************************************************************************/
  67. public void remplir(){
  68. for (int i=1; i<51 ; i++){
  69.        for (int j=1; j<51 ;j++){
  70.  Tab[i][j]=Tab2[i][j]=(int)((Math.random()*20));//remplissage aléatoire
  71.         if (Tab[i][j]==1){
  72.         (buttonTab[i][j]).setBackground(Color.black);
  73.  }
  74.    else
  75.     Tab[i][j]=Tab2[i][j]=0;
  76.   }
  77. }
  78. }//remplir
  79. public void synchroniser(){
  80. for (int i=1; i<51 ; i++){
  81.          for (int j=1; j<51 ;j++){
  82.             Tab2[i][j]=Tab[i][j];
  83.          }
  84.     }
  85. }//synchroniser         
  86.        
  87.  
  88. }


Message édité par specialguest le 20-03-2003 à 15:24:36
n°338457
bobuse
Posté le 20-03-2003 à 13:38:26  profilanswer
 

ok ok
 
Bon en fait, si tu veux qu'on prenne la peine de lire ton code pour voir ce qui cloche, essaye d'enlever les trucs qu'on s'en bat les c******, genre les Tooltip, etc ... enfin c'est mon avis ... :)


---------------
get amaroK plugin
n°338605
specialgue​st
Posté le 20-03-2003 à 15:19:29  profilanswer
 

c'est parti :)

n°338609
bobuse
Posté le 20-03-2003 à 15:24:26  profilanswer
 


Ok c'est deja un peu mieux  ;)  
Mais perso, je pourrai pas regarder tout de suite ...


---------------
get amaroK plugin
n°338612
specialgue​st
Posté le 20-03-2003 à 15:28:17  profilanswer
 

c'est pas grave , deja tes conseils de depart m'ont permis de rendre mon code plus clair :)
 
je resume plus clairement le probleme
en evitant les points qui fonctionnent
 
on part d'un tableau rempli de 0 , en cliquant sur les cases ou en appuyant sur 'remplissage' le tableau se rempli avec quelques 1.
Cette partie fonctionne
 
quand je teste (bouton demarrer)
boucle qui fait :
grille.tester();
grille.synchroniser();
 
le probleme semble se situer ds le test. le programme boucle bien mais il calcule tout les generation (j'ai fait un test avec 200) et une fois qu'il a fini le calcul , il affiche ultra rapidement a l'ecran les 200 generations et se termine sur un etat 'stable'
 
pourtant mon code me semble juste pour 'tester'
 
boucle avec un test, suivant le test on affiche 'case noire' ou 'case blanche' , puis on continue le test en boucle jusqu'a avoir fait une fois tout el tableau.
 
puis cette boucle est effectuée elle meme 200 fois par le 'MainFrame'
 
voila :)


Message édité par specialguest le 20-03-2003 à 15:32:22
n°338628
bobuse
Posté le 20-03-2003 à 15:47:15  profilanswer
 

En fait ton bleme est que tu voudrait voir progressivement le remplissage c'est ca ?


---------------
get amaroK plugin
n°338637
specialgue​st
Posté le 20-03-2003 à 15:57:28  profilanswer
 

oui en fait il fait comme si il calculait toutes les generations et seulement une fois les 200 generations calculées , il affiche.
Mais il ne se contente pas d'afficher juste la derniere, il fait comme un 'film en accéléré' au lieu de rafraichir a chaque calcul :(

mood
Publicité
Posté le   profilanswer
 

 Page :   1  2
Page Précédente

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  jeu de la vie en java, nouveau probleme avec une methode

 

Sujets relatifs
[Perl/Tk] probleme de focus[Java] stocker les constantes dans un singleton ou non ?
[JAVA] classe Date deprecated ? c grave ?Login & password en JAVA sur une page web
[ PHP ] Probleme de eregi et moyenne de valeursProbleme pour creer une librairie dynamique (.so) avec gcc
probleme avec inclusion de #include <cstdlib>Integration JAVA/JAVASCRIPT
Problème avec ftpest ce que quelqu un a un client SNMP en java ?
Plus de sujets relatifs à : jeu de la vie en java, nouveau probleme avec une methode


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR