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

Java Discussion :

[Conception] Jeu de la vie


Sujet :

Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [Conception] Jeu de la vie
    voila je dois programmer le jeu de la vie et j'ai de gros soucis. Pour etre franc je suis une megabuses en ce qui concerne JAVA. Je n'arrive a rien, c'est por cela que je solicite votre aide.
    J'ai 3 classe a ecrire.

    La 1er est la classe cellule:
    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
    public class cellule {
        boolean etatActuel;
        boolean etatFutur;
        cellule [] voisines;
        int voisinesVivantes;
        /** Creates a new instance of cellule */
        public cellule() {
            etatActuel= false;
            etatFutur=false;
            voisines=new cellule[8];
            voisinesVivantes=0;
        }
        public boolean destin(){
            boolean ef= etatFutur;
            if(etatActuel==false && voisinesVivantes==3){
                ef=true;
            }
            if(etatActuel==true&&voisinesVivantes==3){
                ef=true;
            }
            if(etatActuel==true&&voisinesVivantes<2){
                ef=false;
            }
            if(etatActuel==true&&voisinesVivantes>3){
                ef=false;
            }
            if(voisinesVivantes==2){
                ef=etatActuel;
            }
            return ef;
        }
        public void communication(){
            int n = voisines.length;
            for(int i=0;i<=n;i++){
                if(etatActuel==true){
                    voisines[i].voisinesVivantes=voisines[i].voisinesVivantes+1;
                }
                if(etatActuel==false){
                    voisines[i].voisinesVivantes=voisines[i].voisinesVivantes-1;
                }
            }
        }
        public void evolution(){
            etatFutur=etatActuel;
            cellule.communication(); 
        }
    }
    Normalement cette class est bonne, si vous voyer des erreurs merci dem'en faire part .

    La 2eme classe est la classe grille: voila le code
    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
    public class grille {
        int largeur;
        int hauteur;
        cellule [][] tableau;
        int couleurVie;
        int couleurMort;
     
        /** Creates a new instance of grille */
        public grille() {
            largeur=50;
            hauteur=40;
            couleurVie=255;
            couleurMort=0;
        }
        public grille(double j){
            tableau= new cellule[int j][int j];
            creationCellule(tableau);
            donneVie(j,tableau);
        }
        public void creationCellule(){
            for(int i=0;i<=tableau.length;i++){
                for(int j=0;j<=tableau.length;j++){
                tableau[i][j]=new cellule();
                cellule.communication();
               }
            }
        }
        public void donneVie(double probaVie){
            double n = Math.random();
            boolean a= true;
            for(int i=0;i<=tableau.length;i++)
                if(n < probaVie){
                cellule.etatActuel=a;
                cellule.communication();
                }          
        }
        public void evolution(){
        }
        public void destin(){
     
        }
        public void affiche(int j ,int i){
     
        }
     
    }
    Comme vous le voyez; certaine methode sont vides : , c'est celle que je n'arrive pas a faire.
    - evolution est censer faire evoluer chaque cellule du tableau
    - destin est censer calculer le destin de chaque cellule
    - affiche qui prend en argument 2 entiers est censer afficher la cellule qui se trouve dans la case (i,j) du tableau de la maniere suivante : dans une fenetre qui aura ete ouverte, prealablement, on represente une cellule par un carré de 14 de cote et on l'affiche en position (i*15,j*15).La couleur du carré representant la cellule est la couleur de son etat ,i.e couleurVie ou couleurMort.

    La 3eme methode est la methode Jeu, c'est danc cette clase que ce trouve le main.
    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 jeu {
     
        /** Creates a new instance of jeu */
        public jeu(double probavie) {
            Grille=new grille();
        }
        public void next(){
     
        }
        public void start(){
     
        }
        public static void main(String[]args){
     
        }
    }
    Ici il faut creer une classe jeu contentant un unique champ grille de type Grille.
    Ensuite le constructeur prend un double probaVie en argument, cree un nouvel objet Grille vers lequel le champ grille va pointer , ouvre un fenetre graphique et affiche la grille dans la fenetre.
    next calcule l'etape suivante de l'evolution de la grille et affiche la nouvelle config.
    start affiche en continue l'evolution generale de la grille . Cette methode ne s'arretera pas toute seule a l'excecution; il faudra l'interrompre avec control c, quand l'evolution deviendra stable.
    Enfin ecrire le main.

    Merci a tou(tes) ceux que m'aiderons. J'ai vraiment besoin d'aide

  2. #2
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Hello,

    écoute je vais pas t'aider pour tout, c'est trop vaste... par contre je peux te filer les sources de celui que j'avais fait pendant mes études.

    Il est assez complet, mais la structure n'est pas tout à fait la même: j'ai une classe Model et une classe View, le modèle représente les données structurelle et la vue représente l'interface graphique (extends JPanel). En fait c'est un design pattern MVC légérement allégé.
    Je n'ai pas de classe "cellule", les cellules sont modélisées par un tableau 2d de booléens (true=vivante, false=morte)... je n'avais pas non plus implémenté de méthode destin()...

    Le code est maxi commenté. Tu devrais pouvoir le comprendre facilement. Libre à toi de t'en inspirer. Y'a aussi un fichier .doc avec une explication du projet.

    Tu peux le prendre ici

    Si tu as des questions plus spécifiques ou concernant le code, je suis à disposition
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  3. #3
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Par curiosité, c'est quoi le jeu de la vie ?

  4. #4
    Membre habitué Avatar de White Rabbit
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 122
    Points : 148
    Points
    148

  5. #5
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    C'est génial comme concept

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Je connaissais mais je ne savais pas que cela se nommait comme cela. J'ai appris quelque chose.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    Ca à l'air bien chaud à réaliser en tout cas!

  8. #8
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par djsbens
    Ca à l'air bien chaud à réaliser en tout cas!
    Au contraire, c'est souvent un cas d'école car justement l'algorithme reste assez peu complexe... un tableau de booléen, et une seule méthode critique à implémenter: nextGen() qui passe d'une génération n à une gen n+1.

    Tout le reste, c'est de la fioriture
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    Ok , comme quoi on peut se tromper facilement sur la difficulté d'un programme...

    Bon courage quand même et bonne continuation.

    Ben

  10. #10
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut

    Ton code est gigantesque!!! Je sais pas si c'est moi mais je le trouve complexe non? En plus il est totalement different du mien
    Moi dans mon code c'est la methode affiche que j'ai du mal a faire, ainsi que evolution, donc c'est sur c'est poinr spécifique que j'aimerais de l'aide.
    Je vais continuer a etudier ton code, je vais surement trouver de nouvelle idées.

  11. #11
    Membre éprouvé
    Avatar de c-top
    Profil pro
    Turu
    Inscrit en
    Septembre 2003
    Messages
    972
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Turu

    Informations forums :
    Inscription : Septembre 2003
    Messages : 972
    Points : 1 246
    Points
    1 246
    Par défaut
    Une simple recherche google et tu trouveras de nombreux exemples du jeu de la vie en Java.


  12. #12
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    ah
    Mais je recherche quelque chose de trés specifique
    J'ai vraiment besoin d'aide et je prefere les forums ou l'on peut echanger des idées plutot que la recherche brute.

  13. #13
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par deuscapser

    Ton code est gigantesque!!! Je sais pas si c'est moi mais je le trouve complexe non? En plus il est totalement different du mien
    Moi dans mon code c'est la methode affiche que j'ai du mal a faire, ainsi que evolution, donc c'est sur c'est poinr spécifique que j'aimerais de l'aide.
    Je vais continuer a etudier ton code, je vais surement trouver de nouvelle idées.
    Les méthodes qui t'intéressent s'appellent "LifeGameModel.nextGen" et "LifeGameView.paintNoDB".

    En fait, j'ai ajouté pas mal de petites fonctionnalités, comme un mode plein écran et mode double-bufferisé... C'est peut-être pour ça que cela te parait complexe... Concentre-toi sur ces deux méthodes, car ce sont elles qui font tout le travail.

    Une fois de plus, je le répète, mais tout le reste du code n'est que de la fioriture
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  14. #14
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    la methode nextgen je la comprend . Elle ressemble a ma methode destin dans cellule. Par contre la methode paint NoDb , j'y comprend pas tout

  15. #15
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Ce code là ?

    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
     
        // Efface le contenu
        super.paint(g);
     
        // Parcout chaque cellule l'une après l'autre
        for (int row = 0; row < lifeGameModel.countRow(); row++) {
          for (int col = 0; col < lifeGameModel.countCol(); col++) {
            synchronized (this) {
              // Si la cellule est vivante, je dessine une image, sinon je ne fait rien
              if (lifeGameModel.isCellAlive(row, col) && (resizedCell != null))
                g.drawImage(resizedCell, (col * cellSize) + marginLeft,
                  (row * cellSize) + marginTop, this);
            }
          }
        }
     
        // dessin d'un cadre autour de la zone potentiellement remplie de cellules
        if (drawFrame)
          drawFrame(g);
    y'a rien de dure, si tu comprend le code nextGen tu devrais comprendre celui-là !
    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

  16. #16
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    je suis vraiment desoler mais je comprend rien au code
    de plus j'ai mis a jour mon code grille de cette maniére:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     public void evolution(){
           cellule. evolution(tableau);
        }
        public void destin(){
            cellule.destin(tableau);
     
        }
    a votre avis c'est correcte pour appeler la fonction ?

  17. #17
    Membre expert

    Homme Profil pro
    Consultant informatique
    Inscrit en
    Janvier 2004
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 301
    Points : 3 675
    Points
    3 675
    Par défaut
    Citation Envoyé par deuscapser
    a votre avis c'est correcte pour appeler la fonction ?
    pas trop, non

    je vais disséquer mon code du paintNoDb. Déjà on est dans une classe qui extends JPanel, donc on a toutes les fonctionnalités de JPanel qui sont dispo.

    super.paint(g) remplit tout le panel avec la couleur de fond. Cela efface tout le paneau, après il est vide.

    la première boucle for s'occupe de modifier un index de rangées. La deuxième s'occupe de modifier un index de colonnes. Les cellules sont donc dessinées en commencant par la première case en haut à gauche, et lignes par lignes (comme une machine à écrire)

    dans ces boucles, je test l'état de la cellule courante (méthode lifeGameModel.isCellAlive). Je test aussi que resizedCell (qui est l'image utilisée pour dessiner les cellules) ne soit pas null (j'avais un bug car elle pouvait être momentanément null, et ça balancait des exeptions). Si la cellule est vivante et que l'image n'est pas null, j'affiche dans la panel à l'endroit adéquat l'image de la cellule

    en sortie de boucle, la dernière chose que je test est le dessin d'un cadre autour de la zone de jeu.... encore une fioriture !

    Finalement, ce code est exécuté à chaque appel de la méthode repaint(), qui sert à rafraichir l'affichage des panels en général. Ce repaint est appelé en boucle dans un thread, mais tu pourrais tout aussi bien utiliser un timer swing ou une simple boucle

    Tu comprend mieux mnt ?

    "Le plug gros problème des citations trouvées sur internet, c'est qu'on ne peut jamais garantir leur authenticité"

    Confucius, 448 av. J-C

Discussions similaires

  1. conception jeu video quel outils, quel language?
    Par darontankian dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 13/02/2007, 20h32
  2. [Conception] Jeu en ligne (augmenter les ressources automatiquement)
    Par oklama dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 29/01/2007, 09h41
  3. algorithme d'évolution du "jeu de la vie" en caml
    Par nono88 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 13/12/2006, 00h56
  4. Conway's life (jeu de la vie) pour images
    Par O( N ) dans le forum C
    Réponses: 1
    Dernier message: 26/09/2006, 02h13
  5. [VB] projet à réaliser: Jeu de la vie
    Par mauriiice dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/12/2005, 20h06

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