JEU DE LA VIE DE CONWAY

cs_petifa Messages postés 215 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 mars 2014 - 11 oct. 2008 à 13:55
mathdu49 Messages postés 5 Date d'inscription vendredi 13 août 2010 Statut Membre Dernière intervention 1 juin 2013 - 13 avril 2011 à 17:23
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/48148-jeu-de-la-vie-de-conway

mathdu49 Messages postés 5 Date d'inscription vendredi 13 août 2010 Statut Membre Dernière intervention 1 juin 2013
13 avril 2011 à 17:23
Bonjour,
Je voulais juste demander comment tu ferai si tu devais rajouter d'autres types de cellules répondant a d'autres lois.
Merci.
EagleUnderscoreOne Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 24 avril 2009
15 oct. 2008 à 21:03
Okay pour les règles, c'est normal alors :).

Néanmoins pour l'UC, j'en doute... Sais-tu d'où ça vient?
cs_petifa Messages postés 215 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 mars 2014
15 oct. 2008 à 00:09
il n'y a pas d'ordre pour appliquer les règles, a un moment donnée toutes les cellules appliquent les règles, c'est pour ça que le nombre de voisin est calculé avant de changer l'étant d'une cellule. Une fois que les voisins des cellules sont comptés on change les états.
EagleUnderscoreOne Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 24 avril 2009
14 oct. 2008 à 21:52
Okay, merci, ça marche !
Il y a quand même un petit souci, ça me prend 70% de l'UC, en permanence...
Et je ne sais pas si c'est normal, mais quand trois cellules se retrouvent alignées, ça se met à osciller : 3 horizontales puis 3 verticales etc. Tout dépend de l'ordre dans lequel tu appliques les règles après.
tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
14 oct. 2008 à 21:38
Bonjour,
oui effectivement il y avait un prb au démarrage de l'appli... c'est désormais corrigé. Merci
EagleUnderscoreOne Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 24 avril 2009
14 oct. 2008 à 21:23
Salut,

Bonne idée le jeu de la vie en Java. J'ai une question, surement à la con, quand je lance le run.bat, j'ai une Exeption, "le jeu est déjà démarré". Je suis allé voir dans le code, et il faudrait que le constructeur soit lancé deux fois, je ne comprends pas trop...
cs_petifa Messages postés 215 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 mars 2014
11 oct. 2008 à 23:43
OKi, je regarderai a nouveau et plus précisément ton code plus tard, histoire de trouver d'autres choses à améliorer :p
tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
11 oct. 2008 à 23:03
Je prends note...
j'ai modifié la source :
-test des bornes dans getCellule
-le nombre de voisines n'est plus stocké dans la cellule (n'a rien à faire là car on s'en sert que pour la mise a jour des cellules)
cs_petifa Messages postés 215 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 mars 2014
11 oct. 2008 à 21:17
oki pour tes remarques sauf la numéro 3,
tu devrais tester directement dans les classes c'est plus propre, parce que si tu dois appeler n fois ces fonctions tu devras faire autant de fois les tests.

Après pour la mise à jour des nombre je trouve plus logique qu'ils soient mis à jour en même temps que les valeurs des cellules vivantes, sinon les valeurs ne devraient pas être misent dans les cellules.
tucobouch Messages postés 194 Date d'inscription vendredi 17 février 2006 Statut Membre Dernière intervention 1 mai 2009 50
11 oct. 2008 à 20:53
Lol ça c'est de l'analyse précise et pointue :)

En prenant dans l'ordre :
1) Pour les override, mon ami Eclipse me les a mis automatiquement (puis des fois en faisant des copier coller, on les embarques!), l'erreur de compilation dépends apparemment du compilateur : chez moi ça compile! Pour éviter toute erreur : je les ai supprimés!

2) Pour l'implémentation de ComponentListener sur MainFrame : oui en effet on pourrait... mais j'aime bien avoir un listener par composant

3) Pour l'exception possible ligne 107 : il peut en effet y avoir une exception si les index ne sont pas bons. Néanmoins, c'est au code client de tester cette exception pour la gérer (que je n'ai pas fait d'ailleurs!).

4) Pour la mise a jour du nombre de voisines, la valeur nombre de voisines n'est utile que dans la mise a jour des cellules. (Si je déplace le traitement a la fin de la méthode, il faudrait mettre a jour le nombre de voisines lorsqu'on clic sur la grille)

5) Pour finir, l'idée de mettre deux textbox, j'y avais pensé mais par manque de temps je ne l'ai pas fait... (j'ai codé cette appli en 2h...)

Merci

TucoBouch
cs_petifa Messages postés 215 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 10 mars 2014
11 oct. 2008 à 13:55
Slt tucobouch,
ca m'a l'air cool ton code surtout que le jeu de la vie est assez sympatique comme projet.
Par contre j'ai pas pu executer le programme car il y a des erreurs à la compilation (dues aux @Override):
The method adjustmentValueChanged(AdjustmentEvent) of type new AdjustmentListener(){} must

override a superclass method

pourquoi est-ce que tu n'as pas implémenté ta classe mainFrame avec Component listener
#public class MainFrame extends JFrame implements ComponentListener, AdjustmentListener

Sinon quelques remarques :

monde.java : ligne 88
#public synchronized void tue()
dans cette fonction, tu devrait aussi réinitialiser nbVoisinesVivantes de chaque céllules en le mettant

a 0

monde.java : ligne 107
#return cellules[x][y];
fais attention si x et y ne sont pas valide tu as avoir une exception. Tu devrais mettre :
#if (x >= 0 && x < this.largeur && y >= 0 && y < this.hauteur)
# return cellules[x][y];
#else
# return null;

monde.java : ligne 114
Tu as une variable inutilisée...
#public synchronized void update(double time)

Dans cette fonction tu fais un prétraitement pour compter le nombre de voisins qu'à une cellule,

pourquoi ne pas le faire à la fin de la fonction pour avoir des cellules ayant le bon nombre de voisin.

Dans ton cas si une cellule disparait, les cellules voisines la compte toujours parmis leur voisine.

monde.java : ligne 126
tu créé des variable pour rien ...
#int nb=nbVoisinesVivantes(x,y,c.isEnVie());

monde.java : ligne 183
inutile de créer une variable,
#Cellule c=cellules[xc][yc];
utilise plutot
#if ((cellules[xc][yc]).isEnVie())

cellule.java : Tu devrais mettre un constructeur par défaut.

MainPrg.java : ligne 155, variable non utilisée

Tu aurais aussi pu mettre deux textBox pour spécifier la hauteur et les dimentions et les modifier à sa guise et aussi un bouton pour initialiser aléatoirement la grille plutot que de le mettre en "dur" dans le code.

Sinon code sympa
Rejoignez-nous