Jeu de la vie de conway

Soyez le premier à donner votre avis sur cette source.

Vue 15 704 fois - Téléchargée 1 647 fois

Description

Voici une petite source d'une implémentation du très classique jeu de la vie de Conway !!

Pour faire simple, c'est une simulation de vie cellulaire. Elles sont régies seulement par deux règles :
1)Une cellule vivante meurt si elle a moins de 2 cellules ou plus de 4 cellules voisines vivantes
2)Une cellule morte reviens à la vie si elle a 3 cellules voisines vivantes

Ça parait très bête comme règles mais ça suffit pour créer des schémas très complexes !!! (voir par exemple dans la vidéo YouTube ci-dessous ou dans le lien Wikipedia).

Pour plus de détails, veuillez consulter la wikipédia : http://fr.wikipedia.org/wiki/Jeu_de_la_vie
Une vidéo sous Youtube qui m'a donné envi de coder cet automate : http://www.youtube.com/watch?v=XcuBvj0pw-E

Utilisation :
-placer des cellules vivantes sur le monde (la grille affichée à l'écran) en cliquant avec le bouton gauche de la souris. On peut supprimer une cellule en cliquant avec le bouton droit de la souris.
-lancer la simulation en cliquant sur démarrer. Se déplacer dans le monde en utilisant les 2 barres de défilement. Changer le zoom en jouant sur l'ascenseur à droite dans la fenêtre
-mettre en pause en cliquant sur Pause
-tuer toutes les cellules en cliquant sur Effacer

La source :
elle est trés simple a comprendre (rien de trop technique), elle respecte le MVC...

Le répertoire src/ contient les sources, bin/ les sources compilées pour Java 6.

Pour compiler, importer le projet dans Eclipse ou bien compiler a la main tous les Java

Pour lancer la source, soit, sous Windows, lancer run.bat soit lancer manuellement la classe org.lifedemo.ui.Launcher dans le répertoire bin/

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_petifa
Messages postés
215
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
10 mars 2014
-
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
tucobouch
Messages postés
207
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
12 -
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
-
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
207
Date d'inscription
vendredi 17 février 2006
Statut
Membre
Dernière intervention
1 mai 2009
12 -
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
-
OKi, je regarderai a nouveau et plus précisément ton code plus tard, histoire de trouver d'autres choses à améliorer :p

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.