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 :

Question jeu proie et prédateur


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Points : 35
    Points
    35
    Par défaut Question jeu proie et prédateur
    Bonsoir ,

    j'ai un projet à réaliser : jeu proie et prédateurs

    le principe est :

    - 5 individus en mouvement (1 proie et 4 prédateurs)

    - il faut pas que 2 individus soient en même case

    - prédateurs essayent d'encercler la proie

    la question est : comment faire pour avoir un seul individue par case et aussi comment faire connaitre un individu des positions des autres (j'ai pensé à une méthode avec un tableau qui contient les positions de tous les individus ) pour qu'un prédateur s'approche à la proie et s'éloigne des autres prédateurs

    Merci pour votre aide

  2. #2
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    C'est un peu vaste comme question, mais je vais essayer d'y répondre. Avec ce que tu dis voilà comment moi je ferais :

    -Une classe Map qui est composé d'objet Case, je mettrai un double tableau pour comme ça tu as les positions x, y.
    -Une classe Case, avec comme variable position x, position y, un objet Individu et une variable "occupé" (boolean, afin que tu n'ais qu'un individu par case true si la case est occupée, false si elle est vide) et un id
    -Une classe individu avec son type (proie ou prédateur), un nom, et un id.

    Et pour finir une classe Jeu, où tu initialises tout ça, et tu lances le jeu et tu le gères. Après pour ce qui est de faire connaitre les position tu peux faire par exemple une méthode boolean dans la classe individu qui renvoit true s'il n'y quelqu'un autour (à côté de lui) et false s'il y a personne, ou alors une méthode qui lui indique à combien de case se trouve l'individu le plus proche, ça c'est toi qui vois.

    Après, tu rajoutes les méthodes qu'il faut pour que ton jeu fonctionne (déplacement et tout le tralala c'est toi qui vois) et l'affichage s'il y en a un.

    Voilà des pistes pour ton jeu, j'espère que cela t'aidera

  3. #3
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    Bonsoir ,

    merci pour votre réponse maelstrom,

    j'ai essayé d'intercaler votre idée dans mon code , j'ai initialisé la matrice(cases[][]) avec les positions initiales de chaque individus
    mais j'ai pas pu modifier ces positions après chaque déplacement
    la méthode de mise à jour du map
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void mise_à_jour(ArrayList<Predateur> predateurs,Proie proie){
            for (Predateur p : predateurs) {
                Case c=new Case(p.getP(), p);
                if (!Monde.cases[p.getP().getX()][p.getP().getY()].isOccupe()) // ligne d'exception
                    Monde.cases[p.getP().getX()][p.getP().getY()]=c;
            }
     
            Case c=new Case(proie.getP(), proie);
                if (!Monde.cases[proie.getP().getX()][proie.getP().getY()].isOccupe())
                    Monde.cases[proie.getP().getX()][proie.getP().getY()]=c;
        }
    l'appel du méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    for (Predateur p : predateurs) {
     
                        p.seDeplacer();
     
                    }
    proie.seDeplacer();
     
    pp.mise_à_jour(predateurs, proie);
    une exception de type NullPointerException apparait

    il y a t-il une autre méthode pour résoudre ce point ?

  4. #4
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Alors tout d'abord, les accents dans les noms de fonction et dans les variables c'est à éviter, ça peut être source de bug (bon je ne pense pas que ce soit la raison ici mais bon), je te conseille de renommer ta fonction maj ou MiseAJour (les tirets bas aussi sont à éviter).

    Ensuite il est un peu dur de savoir où se situe l'erreur sans la stack (le message d'erreur qui t'indique que tu as un nullpointerException avec toutes les lignes en dessous), mais je vais essayer.

    Je t'avouerais que là comme ça je comprend pas trop ton code (faut dire je suis un peu fatigué), met moi un petit coup de commentaire dedans (pour expliquer comment ton code marche ou comment tu voudrais qu'il marche) et la stack de l'erreur et je pourrais mieux t'aider

  5. #5
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    [QUOTE=amivb;8050103]Bonsoir ,

    merci pour votre réponse maelstrom,

    j'ai essayé d'intercaler votre idée dans mon code , j'ai initialisé la matrice(cases[][]) avec les positions initiales de chaque individus
    mais j'ai pas pu modifier ces positions après chaque déplacement
    la méthode de mise à jour du map
    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
     
    public void miseAjour(ArrayList<Predateur> predateurs,Proie proie){
     //ajout des predateurs à la matrice des cases
            for (Predateur p : predateurs) {
                Case c=new Case(p.getP(), p); // changer l'etat de la case en occupé
           //tester si la case est vide avant le  deplacement 
                if (!Monde.cases[p.getP().getX()][p.getP().getY()].isOccupe())   /// exception pointe sur cette ligne
     
                    Monde.cases[p.getP().getX()][p.getP().getY()]=c;
            }
            //de meme pour la proie 
            Case c=new Case(proie.getP(), proie);
                if (!Monde.cases[proie.getP().getX()][proie.getP().getY()].isOccupe())
                    Monde.cases[proie.getP().getX()][proie.getP().getY()]=c;
        }
    l'appel du méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // changement de position de proie/predateur 
    for (Predateur p : predateurs) {
     
                        p.seDeplacer();
     
                    }
    proie.seDeplacer();
     
    pp.mise_à_jour(predateurs, proie); /// exception pointe sur cette ligne
    le méthode sedeplacer ()
    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
     
    int pasx = 100;
        int pasy = 100;
     
     
        public void seDeplacer() {
     
     
            double r = Math.random();
          //pour ne pas depasser les bords de la fenetre
            if (p.getX() + pasx > 400) {
                pasx = -100;
            }
            if (p.getX() + pasx < 0) {
                pasx = 100;
            }
            if (p.getY() + pasy > 400) {
                pasy = -100;
            }
            if (p.getY() + pasy < 0) {
                pasy = 100;
            }
     
            if (r > 0.5) { //droite
                p.setY(p.getY() + pasy);
            }
            if (r < 0.5) { //gauche
                p.setX(p.getX() + pasx);
            }
     
     
     
     
        }
    à chaque fois je veux modifier/ajouter qq chose à la matrice case[][] il y aurait une exception qui pointe sur la ligne ou j'appelle la matrice

  6. #6
    Membre régulier Avatar de maelstrom
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2014
    Messages
    108
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2014
    Messages : 108
    Points : 120
    Points
    120
    Par défaut
    Avant ton if, fait System.out.println(p.getP().getX()); et System.out.println(p.getP().getY()); Et regarde dans la console si cela correspond bien au chiffre que tu attends.

    Es ce que tu as bien initialisé ton Monde.cases avant d'y faire appel ?

  7. #7
    Nouveau membre du Club
    Inscrit en
    Avril 2012
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 47
    Points : 35
    Points
    35
    Par défaut
    au début ce test donne les valeurs initiales mais maintenant le console affiche d'autre valeurs , il y avait un déplacement
    merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Question sur le jeu du Taquin
    Par DevloNewb' dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 23/02/2010, 10h55
  2. Quelques questions à soumettre coté jeu par navigateur
    Par myWotA dans le forum Général Conception Web
    Réponses: 2
    Dernier message: 03/02/2007, 10h08
  3. Questions relative au dev d'un serveur de jeu.
    Par hickscorp dans le forum Langage
    Réponses: 18
    Dernier message: 22/11/2006, 13h23
  4. [2D] Questions sur le jeu Slayers Online
    Par Extra-Nitro dans le forum Développement 2D, 3D et Jeux
    Réponses: 5
    Dernier message: 04/02/2006, 19h32

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