Up: No Title
Previous: Classes abstraites : évaluateur
Sous-sections
Une des possibilits intéressantes des objets est de pouvoir
définir une méthode virtuelle à une classe et ensuite, lorsque l'on
définit une sous-classe, de donner une méthode propre à la
sous-classe. Nous allons utiliser cette propriété pour une petite
simulation. Sur un monde découpé en cases se déplacent des robots, il
existe différents types de robots :
- Le robot fou qui se déplace dans une des huits cases
libres qui l'entourent de manière aléatoire.
- Le robot poli qui se déplace tout droit, s'immobilise
lorsqu'il y a un autre robot sur l'une des huits cases qui l'entoure
et tourne à droite lorsqu'il rencontre un des bords du plan.
- Le robot pressé qui ne s'arrête jamais, se déplace tout
droit et tourne à gauche aussitôt qu'il rencontre un obstacle.
- Le robot amical qui choisit un robot et se dirige vers
lui jusqu'à ce qu'il soit sur une case contigüe de ce dernier. Il
choisit alors un autre robot.
Avant de définir les robots, il est nécessaire de définir
l'endroit oé ils se déplacent : le monde. On va définir la classe
virtuel monde qui devra répondre aux exigences suivantes et
dont il faudra donner les signatures :
- 1.
- Ajouter un robot sur le monde : add_robot.
- 2.
- Fournir la liste des robots qui sont présentes sur le
monde : get_roblist.
- 3.
- Déterminer si une case est libre ou pas :
is_free.
- 4.
- Déterminer si une case est valide (si elle existe
vraiment) is_legal et une fonction de normalisation
des coordonnées normalize.
- 5.
- Fournir la liste des cases libres autour d'une position
: free_places.
Pour définir le monde, nous allons avoir besoin de savoir ce
qu'est un robot, nous allons donc fournir la classe abstraite
robot. Un robot doit (et il faudra donner les signatures) :
- 1.
- Fournir sa position : get_x et
get_y et sa vitesse : get_speed.
- 2.
- Se positionner à une position donnée : moveto.
- 3.
- Se déplacer vers une position donnée : rmoveto.
- 4.
- Modifier sa vitesse set_speed.
- 5.
- Indiquer la position de son prochain déplacement en
fonction du monde sur lequel il est : next_position.
Nous allons implanter un monde fermé (un plan) qui sera une
sous-classe de monde.
- 1.
- Définir la classe monde_ferme avec ses champs
internes (mais pas ses méthodes).
- 2.
- Définir la méthode is_legal.
- 3.
- Définir la méthode free_places.
- 4.
- Définir la méthode normalize.
Il reste donc à mettre en place les différents robots et leurs
méthodes :
- 1.
- Définir la classe robot_fixe (qui ne bouge
jamais) et ses méthodes.
- 2.
- Définir la classe robot_fou et ses méthodes.
- 3.
- Définir la classe robot_poli et ses méthodes.
- 4.
- Définir la classe robot_presse et ses méthodes.
- 5.
- Définir la classe robot_amical et ses méthodes.
.
Et pour finir, mettre en place une fonction de simulation
qui prend un monde et le nombre d'itérations et qui retourne le plan
après avoir itéré, et rendre la simulation plus robuste.
Up: No Title
Previous: Classes abstraites : évaluateur
Emmanuel CHAILLOUX
1998-10-20