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 :

Déplacement vers un point aléatoire qui change à chaque tour


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 14
    Par défaut Déplacement vers un point aléatoire qui change à chaque tour
    Bonjour!

    J'ai un petit casse-tête à soumettre:

    Le contexte:
    Un aquarium contient des éléments ( cailloux, algues, poissons) qui barbotent gaiement dans l'eau. Les poissons (éléments mobiles) se déplacent vers une destination calculée aléatoirement à l'aide d'une méthode go().

    Un timer (classe Time) applique dans une boucle infinie la méthode go() sur un aquarium. La méthode go() est donc "relancée à chaque tic".

    Le problème:
    La destination aléatoire est recalculée à chaque "tic". La méthode de déplacement (move) n'est appelée qu'une fois avant que tout soit relancé et la destination recalculée... Le poisson n'a jamais la possibilité d'arriver à destination.
    La contrainte principale c'est que target(), qui calcule cette position, ne peut être appliquée que sur un MobileItem ( et bien sur il y a dans le vector parcouru des "non MobileItem" en plus des MobileItems.

    J'ai l'impression d'avoir tout essayé dans tous les sens : des while, des if, rien y fait. Je désespère, alors je fait appel à vous. J'espère que quelqu'un pourra m'aider un peu.


    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
     public void go(){    // fait bouger (move) les objets vers une destination (target)
     
     
    		 Point destination = null;
     
    		 for(int i=0; i < this.items.size() ; i++){  // on parcourt la collection d'objet
     
     
    		   if(this.items.elementAt(i) instanceof MobileItem){  // si l'objet est mobile
     
    			 destination = ((MobileItem) this.items.elementAt(i)).target(null);  // on définit une destination aléatoire pour l'objet
     
     
     
    			   ((MobileItem) this.items.elementAt(i)).move(destination);  // l'objet se déplace vers la destination	 
     
    		   }
     
      try{
    		          Thread.sleep(100);
    		        }
    		        catch(InterruptedException e){}
     
    		        this.repaint();
    		 }
    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
     
    	public boolean move(Point destination){  // cette fonction déplace l'item vers une destination, et retourne un booléen indiquand s'il est arrivé à destination
     
     
     
     
     
    			if( this.position.x != destination.x){
    				if(this.position.x < destination.x){
     
    					this.position.x += 5;
     
    					}
    				else
    					this.position.x -= 5;
     
    			}
     
    // même chose pour les y
     
     
    		if (this.position == destination)
    		return true;
    		else
    			return false;
     
    	}

  2. #2
    Invité
    Invité(e)
    Par défaut
    Hello,

    Alors une petite idée comme ça en passant : pourquoi ne pas ajouter un attribut "destination" a ton MobileItem ? Ainsi :
    • Au départ tu définis une valeur "destination" a chaque poisson (monPoisson.setDestination(destination) ou via le constructeur, je ne sais pas comment ta liste de poissons est gérée)
    • Dans ta méthode go(), tu vérifies pour chaque poisson s'il est arrivé a destination (positionActuelle == monPoisson.getDestination()).
      • Si c'est le cas, alors tu génères une nouvelle destination et tu l'associes a ton instance de MobileItem via un monPoisson.setDestination(nouvelleDestination).
      • Sinon bah rien de spécial.


    Voila comment je ferais
    En espérant t'avoir aidé

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    333
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 333
    Par défaut
    Salut,

    J'ai l'impression d'avoir tout essayé dans tous les sens : des while, des if, rien y fait. Je désespère, alors je fait appel à vous. J'espère que quelqu'un pourra m'aider un peu.
    A mon sens et comme le dit pierreAd, tu as plus un problème de conception que d'algorithmique.

    Le comportement de ton objet mobilImpl (poisson) doit être géré par lui même et non par son conteneur (aquarium).Ce qui est plus cohérent avec la réalité ... c'est le poisson qui choisit et sait où il va

    Ta méthode principale devrait être de la forme suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     if(this.items.elementAt(i) instanceof MobileItem){ 
     
     Mobilitem lMobilItem = ((MobileItem) this.items.elementAt(i));
    lMobilItem.target(); 
    lMobilItem.move();  
    }
    avec la méthode target comme ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public voit target(){
     
    if (destination == null){
    // choisir la destination
    destination = toto;
    }
    // sinon rien
    }
    Par contre il me semble curieux que le calcul de destination soit dans la même boucle que l'action de déplacement .... les premiers sont avantagés

    à ta place je ferrais 2 boucles :
    - les poissons choisissent leurs cibles
    - puis ils bougent
    enfin avec 2 boucles si tu as des prédateurs ils ne mangeront jamais :p

    Bonne chance

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/03/2012, 18h05
  2. Réponses: 2
    Dernier message: 14/09/2011, 16h17
  3. Creer un rapport qui change chaque semaine.
    Par amne26 dans le forum IHM
    Réponses: 5
    Dernier message: 03/12/2008, 14h13
  4. [JMeter] Récupration d'une variable qui change à chaque process
    Par vendeeman dans le forum Tests et Performance
    Réponses: 3
    Dernier message: 11/12/2007, 12h00
  5. Slogan qui change chaque mois
    Par Ercohuma59 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 30/08/2007, 17h42

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