home *** CD-ROM | disk | FTP | other *** search
/ Revista CD Expert 51 / PCGamer51_17Demos.iso / games / colobotdemo / colobotdemo10e.exe / help / tradar1.txt < prev    next >
Text File  |  2001-06-10  |  3KB  |  60 lines

  1. \b;Exercice
  2. Programmez le \l;robot\u object\bottr; pour qu'il trouve toutes les \l;croix bleues\u object\waypoint; posΘes au sol. DΦs que le robot est sur une croix, elle disparaεt. Le principe α utiliser est le suivant :
  3.  
  4. RΘpΘter α l'infini :
  5.     o  Chercher une croix
  6.     o  Si rien n'est trouvΘ, stopper
  7.     o  Calculer la direction de la croix
  8.     o  Donner une consigne de vitesse aux moteurs pour se diriger dans la bonne direction
  9.  
  10. \b;Le programme
  11. La boucle infinie s'Θcrit avec \c;\l;while\u cbot\while;\n; :
  12. \s;\c;while ( true )
  13. \s;{
  14. \s;    \n;instructions...\c;
  15. \s;}
  16. \n;
  17. L'instruction \c;\l;radar\u cbot\radar;\n; dΘtecte un objet. Cette instruction reτoit de 1 α 6 paramΦtres. Dans notre cas, il suffit de spΘcifier le premier paramΦtre, pour dΘtecter toutes les croix :
  18. \s;\c;spot = radar(WayPoint);
  19. \n;
  20. Si toutes les croix sont trouvΘes, \c;radar\n; retourne un \l;objet nul\u cbot\null;, qu'il faut dΘtecter comme suit avec un \c;\l;if\u cbot\if;\n; :
  21. \s;\c;if ( spot == null )  // plus rien ?
  22. \s;{
  23. \s;    motor(0, 0);  // stoppe
  24. \s;    break;
  25. \s;}
  26. \n;L'instruction \c;\l;break\u cbot\break;\n; sort de la boucle infinie \c;while ( true )\n;.
  27.  
  28. Le calcul de la direction est obtenu par l'instruction \c;\l;direction\u cbot\direct;(point)\n;, qui retourne l'angle permettant d'orienter le \l;robot\u object\bottr; vers le point spΘcifiΘ. La coordonnΘe de l'objet s'obtient simplement avec \c;spot.position\n;. La ligne suivante met donc dans la \l;variable\u cbot\var; \c;dir\n; l'angle correspondant α la direction de la croix :
  29. \s;\c;dir = direction(spot.position);
  30. \n;
  31. L'angle obtenu est positif si le point est α gauche, et nΘgatif s'il est α droite. Si la croix α atteindre est α gauche, il faut donner une consigne de vitesse maximale au moteur droite, et une consigne proportionnelle α l'angle au moteur gauche :
  32.  
  33.     direction = \c;  0\n; -> vitesse = \c; 1.0\n;
  34.     direction = \c; 45\n; -> vitesse = \c; 0.5\n;
  35.     direction = \c; 90\n; -> vitesse = \c; 0.0\n;
  36.     direction = \c;135\n; -> vitesse = \c;-0.5\n;
  37.     direction = \c;180\n; -> vitesse = \c;-1.0\n;
  38.  
  39. Le diagramme ci-dessous montre les consignes aux moteurs gauche et droite selon l'angle, pour l'instruction \c;\l;motor\u cbot\motor;\n; :
  40.  
  41. \image radar2 14 10;
  42. Si la croix est droit devant, la direction vaut 0 degrΘs. Les deux moteurs recevront les consignes 1 et 1, ce qui signifie avancer tout droit α la vitesse maximale. Si la croix est derriΦre, la vitesse du moteur droite sera -1. Le \l;robot\u object\bottr; effectue donc un demi-tour par la droite, ce qui est bien le comportement souhaitΘ. L'\l;expression\u cbot\expr; \c;1+dir/90\n; donne exactement le rΘsultat souhaitΘ.
  43. \s;\c;if ( dir < 0 )  // α droite ?
  44. \s;{
  45. \s;    motor(1, 1+dir/90);  // tourne plus ou moins
  46. \s;}
  47. \n;
  48. Le mΩme raisonnement s'applique lorsque la direction est positive, comprise entre 0 et 180 degrΘs, et que la croix est α gauche. A vous de trouver les instructions nΘcessaires.
  49. \s;\c;else  // α gauche ?
  50. \s;{
  51. \s;    \n;α vous de trouver ...\c;
  52. \s;}
  53. \n;
  54. Pour que ce programme fonctionne, il faut encore dΘclarer toutes les variables utilisΘes, au dΘbut. \c;spot\n; est de type \c;\l;object\u cbot\object;\n;, alors que \c;dir\n; est de type \c;\l;float\u cbot\float;\n;.
  55.  
  56. \key;\key help;\norm; permet de revoir ces instructions en tout temps !
  57.  
  58. \t;Voir aussi
  59. \l;Commandes\u command; et \l;programmation\u cbot;.
  60.