jeu de la vie en java, nouveau probleme avec une methode - Java - Programmation
Marsh Posté le 05-03-2003 à 14:32:47
tu parcours ta liste de boutons en comparant les références, et tu mets la valeur à 1 dans le tableau
Code :
|
y'a plus propre, mais cette méthode est facile à mettre en oeuvre dans ton code...
Marsh Posté le 05-03-2003 à 14:40:08
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
Marsh Posté le 05-03-2003 à 14:51:22
:'(
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
Marsh Posté le 05-03-2003 à 15:13:21
vu la complexité énorme (j'avais pas vu aussi dur depuis HelloWorld ) tu devrais tout mettre dans la même class...
Marsh Posté le 05-03-2003 à 16:21:29
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à?
Marsh Posté le 05-03-2003 à 16:22:49
DarkLord a écrit : |
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...
Marsh Posté le 06-03-2003 à 13:07:06
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];
}
}
}
}
}
Marsh Posté le 06-03-2003 à 13:09:14
ReplyMarsh Posté le 11-03-2003 à 22:33:31
oups , je me suis absenté un peu , j'ai du lacher mon projet pour d'autres travaux
Je m'y remet demain.
En tout cas merci pour votre aide
Marsh Posté le 12-03-2003 à 14:25:08
J'ai fais les modifications mais il me fait 2 erreurs à la compilation : il ne trouve pas le buttonTab et le Tab
Marsh Posté le 12-03-2003 à 14:42:29
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 !
Marsh Posté le 12-03-2003 à 14:51:43
oui c'est balot
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
Marsh Posté le 13-03-2003 à 15:23:32
ReplyMarsh Posté le 13-03-2003 à 15:41:36
ReplyMarsh Posté le 17-03-2003 à 11:21:14
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.
Marsh Posté le 17-03-2003 à 12:01:23
specialguest a écrit : |
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 :
|
2. donc pour appeler ta methode tester(), hop :
Code :
|
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
Marsh Posté le 17-03-2003 à 13:46:54
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
Marsh Posté le 17-03-2003 à 13:53:56
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
Marsh Posté le 17-03-2003 à 13:55:31
specialguest a écrit : Tout fonctionne parfaitement , |
ben ya la VO qui est mieux presenté si tu veux ...
Marsh Posté le 18-03-2003 à 11:33:31
j'ai encore un probleme
Code :
|
ici
Code :
|
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ù.
Marsh Posté le 18-03-2003 à 12:04:18
ReplyMarsh Posté le 18-03-2003 à 14:05:16
dans la classe MainFrame , associée au bouton "demarrer"
Code :
|
Marsh Posté le 18-03-2003 à 14:09:23
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
verifie si t'as pas un = a la place d'un == par exemple
Marsh Posté le 18-03-2003 à 14:43:12
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 = ?
Marsh Posté le 18-03-2003 à 16:36:25
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
Marsh Posté le 18-03-2003 à 16:44:47
specialguest a écrit : |
ben moi non plus !
Si tu veux que qqun puisse voir ou ca merdouille nimbouille, faudrait ptet nous en montrer un peu plus ...
Marsh Posté le 18-03-2003 à 16:51:04
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 :
|
j'avais pas mis de else pour remettre a 0 tout ce qui n'etait pas a 1. A present cette partie fonctionne.
Marsh Posté le 19-03-2003 à 14:21:43
J'ai pas tout lu, paske j'ai pas trop le temps ... mais bon heuuuu, c'est bof ta gestion des ActionListener
En general, c'est plus lisible d'utiliser
Code :
|
par exemple ! On peut meme pousser le vice a faire une classe speciale qui implemente ActionListener, mais bon ...
Marsh Posté le 19-03-2003 à 14:33:37
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
Marsh Posté le 20-03-2003 à 12:05:51
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 :
|
Grille.java
Code :
|
Marsh Posté le 20-03-2003 à 13:38:26
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 ...
Marsh Posté le 20-03-2003 à 15:24:26
specialguest a écrit : c'est parti |
Ok c'est deja un peu mieux
Mais perso, je pourrai pas regarder tout de suite ...
Marsh Posté le 20-03-2003 à 15:28:17
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
Marsh Posté le 20-03-2003 à 15:47:15
En fait ton bleme est que tu voudrait voir progressivement le remplissage c'est ca ?
Marsh Posté le 20-03-2003 à 15:57:28
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
Marsh Posté le 05-03-2003 à 13:23:12
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