//****************************************************************************************** // Programme de communication entre les herbivores. // Projet Robolife. // Ce programme devra être intégré au comportement de l'herbivore. // Version RCX : 1.5 // Version NQC : 2.1 // Version RcxCC : 3.1 // Auteur : Cyrille Quesson (alias Guonzo) // Date : 02/2001 //****************************************************************************************** /* On considère que le robot est en fonctionnement normal. Port1 : détection parchoc; Port2 : détection lumière; Port3 : détection attaque */ #define CODE_255 SendMessage(255); ClearMessage(); //variables globales: int infos=2; //variable qui va contenir le message à transmettre. 2 c'est neutre // infos == 0 => pas de nourriture trouvé, ne t'active pas // infos == 1 => j'ai trouvé de la nourriture, active toi. int cycle=1; //variable booléenne qui va servir à stopper le cycle de l'herbivore //et à le reprendre int tempo=100; //à definir correctement task main() { //initialisation SetPower(OUT_A+OUT_C,1); //initialisation des taches : start Communication; //Initialisation du cycle de l'herbivore while(true) { while(cycle) { //cycle de l'herbivore OnFwd(OUT_A+OUT_C); } } } task Communication() { while(true) { //d'abord on emet : CODE_255; //Puis on regarde si on reçoit... if(Message()==255) { //un H est dans le coin. Se stopper et arréter l'émission 255 cycle=0; Off(OUT_A+OUT_C); SendMessage(254); //Boucle de temporisation pour attendre une réponse. while(tempo-- != 0) { infos=Message(); if(infos == 0 || infos == 1) tempo=0; } //au moment ou l'on sort de la boucle, infos contient ou 0,1 (voire 2) SendMessage(253); //fin de la com. cycle=1; } //On profite pour un code 255 CODE_255; //Puis on vérifie si l'on recoit if(Message()==254) { //Un herbivore cherche à communiquer: cycle=0; Off(OUT_A+OUT_C); //à ce niveau l'autre est déja à l'arret. La communication peut commencer. SendMessage(infos); infos=0; //on oublie l'info. précedente. SendMessage(253); //on reprend le cycle cycle=1; } CODE_255; if(Message()==253) { //Ben alors, qu'est ce qu'on fait ... On reprend le cycle... cycle=1; } } }