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

  1. \b;Exercice
  2. Vous devez programmer le \l;robot\u object\bottr; d'entraεnement pour suivre la caisse d'explosifs, mais sans la toucher, car elle est trΦs fragile. Chaque fois que la caisse s'arrΩte 2 secondes, vous devez Ωtre α proximitΘ immΘdiate (moins de 10 mΦtres). AprΦs 10 arrΩts, la caisse s'approche de la plate-forme d'arrivΘe, pous vous y ammener.
  3. A chaque arrΩt, la caisse vΘrifie que vous Ωtes bien lα. Si ce n'est pas le cas, le compteur est remis α zΘro. Vous devez donc rΘussir 10 fois consΘcutives !
  4.  
  5. \b;Principe
  6. RΘpΘter α l'infini :
  7.     o  Chercher la caisse.
  8.     o  Calculer la distance jusqu'α la caisse.
  9.     o  Si cette distance est plus petite que 5 mΦtres, reculer.
  10.     o  Sinon, calculer la direction de la caisse et s'y diriger.
  11.  
  12. La boucle infinie s'effectue avec un traditionnel \c;\l;while\u cbot\while;( true )\n;.
  13. \s;\c;while ( true )
  14. \s;{
  15. \s;    \n;instructions α rΘpΘter ...\c;
  16. \s;}
  17. \n;
  18. La recherche de la caisse se fait dans toutes les directions, avec \c;\l;radar\u cbot\radar;\n;  :
  19. \s;\c;    target = radar(TargetBot);
  20. \n;
  21. Normalement, la caisse est toujours trouvΘe. Vous pouvez Θventuellement ajouter un test \c;\l;if\u cbot\if;\n; pour stopper le \l;robot\u object\bottr; et quitter le programme si la caisse n'est plus lα, mais cela devrait Ωtre inutile :
  22. \s;\c;if ( target == null )
  23. \s;{
  24. \s;    motor(0, 0);  // stoppe
  25. \s;    break;  // plus rien α faire
  26. \s;}
  27. \n;
  28. Le calcul de la distance jusqu'α la caisse utilise l'instruction \c;\l;distance\u cbot\dist;(p1, p2)\n;. Cette instruction retourne la distance entre deux points \c;p1\n; et \c;p2\n;. Le premier point sera ici la position du \l;robot\u object\bottr;, obtenue simplement avec \c;pos\n;. La position de la caisse est obtenue α travers la description de l'objet \c;target\n; avec l'expression \c;target.position\n;.
  29. \s;\c;len = distance(pos, target.position);
  30. \n;
  31. Si la distance est infΘrieure α 5 mΦtres, il faut reculer d'une vitesse proportionnelle α la distance. Plus la distance est petite, plus il faut reculer vivement.
  32.     Distance = 5.0 mΦtres -> vitesse =  0.0
  33.     Distance = 2.5 mΦtres -> vitesse = -0.5
  34.     Distance = 0.0 mΦtres -> vitesse = -1.0
  35. Ceci s'obtient trΦs simplement avec l'\l;expression\u cbot\expr; \c;distance/5-1\n;. Donc, avec un \c;\l;if\u cbot\if;\n; :
  36. \s;\c;if ( len < 5 )  // trop proche ?
  37. \s;{
  38. \s;    motor(len/5-1, len/5-1);  // recule
  39. \s;}
  40. \n;
  41. Si la distance dΘpasse 5 mΦtres, on avance en direction de la caisse en calculant l'angle avec \c;\l;direction\u cbot\direct;\n;.
  42. \s;\c;else
  43. \s;{
  44. \s;    dir = direction(target.position);
  45. \s;    if ( dir >= 0 )  // α droite ?
  46. \s;    {
  47. \s;        motor(1, 1-dir/90);
  48. \s;    }
  49. \s;    else  // α gauche ?
  50. \s;    {
  51. \s;        \n;α vous de trouver ...\c;
  52. \s;    }
  53. \s;}
  54. \n;
  55. Lorsque la caisse est α gauche, \c;dir\n; est positif, compris entre 0 et 180 degrΘs. L'\l;expression\u cbot\expr; \c;1-dir/90\n; donne une vitesse comprise entre 1 et -1, selon la direction.
  56.     direction =   0 -> vitesse =  1.0
  57.     direction =  45 -> vitesse =  0.5
  58.     direction =  90 -> vitesse =  0.0
  59.     direction = 135 -> vitesse = -0.5
  60.     direction = 180 -> vitesse = -1.0
  61.  
  62. \image radar2 14 10;
  63. Lorsque la caisse est α droite, \c;dir\n; est nΘgatif, compris entre 0 et -180 degrΘs.
  64.  
  65. \b;└ vous de jouer
  66. Pour que ce programme fonctionne, il faut encore dΘclarer toutes les \l;variables\u cbot\var; utilisΘes.
  67. \c;target\n; est de type \c;object\n;, alors que \c;dir\n; et \c;len\n; sont de type \c;float\n;.
  68.  
  69. \key;\key help;\norm; permet de revoir ces instructions en tout temps !
  70.  
  71. \t;Voir aussi
  72. \l;Commandes\u command; et \l;programmation\u cbot;.
  73.