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

avec Java Discussion :

Programmation du jeu de la vie


Sujet :

avec Java

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Programmation du jeu de la vie
    Bonjour à tous
    Je suis débutante en programmation java et je suis depuis peu bloquée sur mon projet du jeu de la vie(sujet donné en cours) j'aurai donc besoin de vos conseils. Je pense que vous connaissez un peu mieux que moi les règles du jeu. En gros, le jeu se déroule dans une grille, les cases peuvent être occupées ou non par une cellule dont l'état évolue au cours du temps.
    - Une cellule qui a 2 ou 3 voisins reste en vie, sinon elle disparaît.
    - Si une case vide a exactement 3 voisines occupées par des cellules, il y nait une cellule.
    Le calcul du nombre de voisins: pour chaque case, je dois donc calculer le nombre de cellule voisines.
    J'ai donc crée une méthode.
    Mes problèmes sont les suivants:
    1- Je ne sais pas trop si mon calcul marche vu que je n'arrive pas à appeler la méthode dans le main.
    2- Je pense être arrivée à calculer les voisines nord sud est et ouest. Mais les voisines nord-est, nord-ouest, sud-est, sud-ouest je ne sais pas trop comment y accéder. Donc si vous pouvez m'aider ce serait sympa
    3- Je ne sais pas comment mon programme va pouvoir afficher des figures comme le jeu de base...
    C'est un peu compliqué Java pour moi actuellement, donc soyez indulgent.
    Merci d'avance

    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
        //Calcul du nombre de voisin
        private static void nbVoisin(boolean occupe[][]) throws FileNotFoundException{
            Scanner fichier = new Scanner(new File("source.txt"));
            int nbLignes = fichier.nextInt();
            int nbColonnes = fichier.nextInt();
     
            occupe = new boolean[nbLignes][nbColonnes];
            // le nombre de cellules et les affiche
            int nbCellules = fichier.nextInt();
            for (int i = 0; i < nbCellules; i++) {
                int ligne = fichier.nextInt();
                int colonne = fichier.nextInt();
                occupe[ligne][colonne] = true;
            }
     
            int l, c;
            int nb = 0;
            for(l = 0; l < nbLignes; l++){
                for(c = 0; c < nbColonnes; c++){
                    if((l-1)>=0 && (occupe[l][c])){ //case du dessus
                        nb=nb+1;
                    } else if((l-1)<nbLignes && occupe[l+1][c]){// ligne du dessous
                        nb=nb+1;
                    } else if((c-1)>=0 && occupe[l][c-1]){  //voisin de gauche 
                        nb=nb+1;
                    } else if((c+1)<nbColonnes && (occupe[l][c+1])){    //voisin de droite
                        nb=nb+1;
                    }
                }
            }
     
     
        }

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Premièrement, la lecture du fichier devrait être faite dans une méthode à part, du type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public boolean[][] readFile(File file) throws FileNotFoundException {
    Ensuite, tu pourras traiter ton tableau indépendamment du fichier (ou de toute autre source pour ce tableau). A noter qu'il est nécessaire de fermer le fichier à la fin de la lecture, ce que tu peux faire par cette syntaxe :

    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
    public boolean[][] readFile(File file) throws FileNotFoundException {
     
    try ( Scanner fichier = new Scanner( file ) {
     
            int nbLignes = fichier.nextInt();
            int nbColonnes = fichier.nextInt();
     
            boolean[][] occupe = new boolean[nbLignes][nbColonnes];
            // le nombre de cellules et les affiche
            int nbCellules = fichier.nextInt();
            for (int i = 0; i < nbCellules; i++) {
                int ligne = fichier.nextInt();
                int colonne = fichier.nextInt();
                occupe[ligne][colonne] = true;
            }
     
            return occupe;
     
     
    } // ici Scanner est automatiquement fermé

    Ensuite, tu peux faire qui gère un tour :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    private static boolean[][] tour(boolean[][] occupe) {
     
       ...
     
    }
    L'objectif de cette méthode de crée un nouveau tableau, dans lequel les nouvelles cellules, et les anciennes qui ne seront pas mortes au cour du tour seront mises. En effet, on est obligé de procéder dans une copie du tableau, parce que modifier le tableau d'origine va faire que certains calculs du nombre de voisins seront influencés par les variations des cellules situés au dessus et à gauche (au nord et à l'ouest si tu préfères). Il s'agit donc de parcourir toutes les cases du tableau d'origine, de calculer le nombre de voisins, et de déterminer quelle nouvelle valeur il faut mettre dans la case correspondante du tableau copie (en fonction des règles sur le nombre de voisin : mort, naissance, ou conservation).

    Ensuite, pour la méthode qui calcule le nombre de voisin d'une cellule, elle devrait avoir une signature comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public int nbVoisin(boolean[][] occupe, int x, int y) {
     
        int nb=0;
     
        // ici on détermine pour chaque case à l'est, au sud-est, au sud, au sud-ouest, à l'ouest, au nord-ouest, au nord, et au nord-ouest, 1) si la case existe (donc si elle n'est pas dehors des limites du tableau), 2) si la case est occupée, et dans ce cas, on ajoute 1 à nb
     
        return nb;
     
    }
    Ensuite, les voisines se déterminent par décalage de x et y (y les lignes, x les colonnes) :

    • à l'est : x+1, y
    • au sud-est : x+1, y+1
    • au sud : x, y+1
    • sud-ouest : x-1, y+1
    • ouest x-1, y
    • nord-ouest x-1, y-1
    • nord : x=0, y-1
    • nord-est : x+1, y-1


    [EDIT]Tu peux résoudre cette partie, assez simplement, avec une boucle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for(int dx=-1;dx<=1; dx++) {
       for(int dy=-1;dy<=1; dy++) {
            if ( dx != 0 && dy !=0 ) { // on ne traite pas ce cas, parce qu'il s'agit de la cellule elle-même (donc pas une voisine)
               int vx = x + dx;
               int vy = y + dy;
               if ( vy>=0 && vy< occupe.length  && vx>=0 && vx<occupe[vy].length ) { // si la cellule voisine est bien dans les limites du tableau
                   if ( occupe[vy][vx] ) { // si la cellule voisine est occupée
                     nb++; // on la compte
                   }
               }
            }
       }
    }
    [EDIT]Pour faire l'affichage, il te suffit de parcourir les cases du tableau et d'afficher un caractère pour les cases true et un autre pour les cases false, avec un passage à la ligne entre chaque ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public void afficher(boolean[][] occupe) {
       for(boolean[] ligne : occuper) {
           for(boolean cellule : ligne) {
               if ( cellule ) System.out.print("X"); // X, par exemple, pour une case occupée
               else System.out.print("."); // ., par exemple, pour un case vide
           }
           System.out.prinln(); // passage à la ligne
       }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Octobre 2014
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Merci
    Salut,
    Pour réponse élaborée, je teste tout ceci et je reviendrai vers vous si nécessaire.
    Merci encore

  4. #4
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    petit algo simple (avec un langage de matrices comme APL )
    un tableau à deux dimensions (mieux : un tableau "torique" dans lequel le voisin supérieur d'une case "en haut" se retrouve en bas, etc...)
    s'il y a un "pion" on met 1 sinon 0.
    ensuite on fait un "splash" : toute case "arrose " ses voisins (incrémente de 1 toute case adjacente dans une copie du tableau)
    ensuite on repasse dans cette copie du tableau: en fonction du nombre présent dans chaque case on crée un vivant ou un tue un pion dans le tableau d'origine)
    l'algo est amusant à réaliser
    (ensuite on fait un jeu de la vie à 3 dimensions avec des règles différentes pour se compliquer un peu la vie )
    J'ai des principes: je peux toujours trouver une bonne raison pour les contredire .... mais j'ai des principes!
    (mon excellent bouquin sur Java : https://eska-publishing.com/fr/livre...822407076.html)

Discussions similaires

  1. Programmation jeu de la vie Python
    Par Benecile dans le forum Général Python
    Réponses: 12
    Dernier message: 29/05/2015, 07h02
  2. programmation jeu de la vie
    Par darkontes dans le forum Caml
    Réponses: 6
    Dernier message: 13/03/2010, 18h20
  3. Programme c jeu de la vie
    Par gaet67 dans le forum C#
    Réponses: 1
    Dernier message: 14/05/2007, 07h39
  4. Help ! Programmer un jeu vidéo
    Par Jay Bee dans le forum DirectX
    Réponses: 7
    Dernier message: 18/03/2004, 18h38
  5. Help ! Programmer un jeu vidéo...
    Par Jay Bee dans le forum OpenGL
    Réponses: 3
    Dernier message: 05/03/2004, 15h34

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