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;
 
	}