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