Resp: Jacques Ferber
Warbot est un jeu de guerre entre deux équipe.. La version que nous allons utiliser dans ce TP est celle qui a été crite par Lois Vanhée en NetLogo, afin d'assurer un suivi dans le cours... La version de travail peut être téléchargée ici. La documentation se trouve dedans...
On pourra aussi lire la documentation de l'envoi des messages qui se trouve ici...
Il s'agit de Warlogo, c'est à dire de Warbot en NetLogo. Cette version comprend pas mal de différence avec la version écrite en Java sous Madkit (on peut se reporter à sa description sur le site Warbot.fr)
Voici les différences principales:
- pour décrire un comportement, il suffit de modifier la fonction to-report <type vehicule>-t1-action donnée dans le fichier warbot.nlogo
Donc pour les explorers: to-report explorer-t1-action et idem pour les rocket-launcher, et la base.
Les actions possibles:
+
Actions qui ne prennent pas de temps.. (peuvent être utilisée autant de fois que l'on veut dans le corps d'un comportement d'agent)
La gestion des percepts se fait en utilisant la fonction let percepts perceive-as pour récupérer une bonne fois pour toutes les percepts à chaque tick.
Aller regarder les codes des exemples de fonctionnement des différentes agents.
a) Ecrire un agent explorateur qui récupère de la nourriture
b) Ecrire un agent explorateur qui récupère de la nourriture et la ramène à sa base.. (on supposera pour cette fois que l'explorateur connait la position de sa base...)
c) A partir de la machine à états finis de l'agent récupérateur de nourriture tel qu'on l'a vu en cours, écrire le comportement d'un explorateur qui récupère de la nourriture dès qu'il en voit et retourne immédiatement à la base sans en prendre de nourriture supplémentaire sur son chemin.
d) Modifiez la structure de la machine à états finis de votre robot explorateur pour qu'il continue à récupérer de la nourriture tout en retournant à la base.
a) Ecrire le comportement d'un lanceur de missile qui se déplace de manière aléatoire et qui qui attaque la base ennemie s'il l'aperçoit, en utilisant une implémentation à base de machine à états finis (FSM).
b) Modifier le comportement de ce lanceur de missile (et donc sa FSM) pour qu'en plus, il aille attaquer une base ennemie si un explorateur lui envoie la position de la base ennemie.
Note: Mettez en commentaire le code de l'attaquant que vous venez de créer, car on modifie son code afin qu'il devienne maintenant défenseur. Vous aurez besoin de ce code pour la question suivante..
a) Faire un lanceur de missile qui reste à portée de sa base tout en se déplaçant. (note: cela correspond à un seul état du lanceur de missile)
b) Modifier le comportement de ce lanceur de missile pour qu'il attaque un ennemi qui arrive dans sa zone de vision alors qu'il est en défense. Implémenter son comportement sous la forme d'une FSM
c) Faire en sorte que ce défenseur fuit le combat si son énergie baisse en dessous d'une certaine valeur (idem, on modifie la machine à états finis).