colobot-data/help/F/tant5.txt

54 lines
2.3 KiB
Plaintext

\b;Objectif
Adaptez la hauteur de vol du \l;orgaShooter volant\u object\botoj; à la topologie du terrain.
\b;Programme
Voici encore une fois le programme de l'exercice précédent qui tire sur les \l;fourmis\u object\ant;:
\c;
\s;extern void object::Chasseur1()
\s;{
\s; object chose;
\s;
\s; aim(-20);
\s; jet(0.2);
\s; while ( position.z < 10 )
\s; {
\s; wait(0.2);
\s; }
\s;
\s; while ( true )
\s; {
\s; while ( radar(AlienAnt, 0, 360, 0, 20) == null )
\s; {
\s; chose = radar(AlienAnt);
\s; turn(direction(chose.position));
\s; motor(1,1);
\s; wait(0.2);
\s; }
\s; fire(1);
\s; }
\s;}
\n;
Le robot reste toujours à une altitude de 10 mètres au-dessus du niveau de la mer. Dans le relief accidenté du présent exercice, ceci ne suffit pas, il faut pouvoir s'adapter au terrain. Juste avant le \c;wait(0.2);\n; on peut tester si l'altitude est trop basse ou trop haute et réagir en conséquence.
Nous avons vu que \c;position.z\n; donne l'altitude au-dessus du niveau de la mer. \c;\l;topo\u cbot\topo;(position)\n; donne l'altitude du terrain à la position du robot. Si nous voulons rester à une altitude comprise entre 6 et 9 mètres au-dessus du sol, il faut traiter les cas suivants: si \c;position.z-topo(position)\n; est plus petit que 6, on monte avec \c;jet(1);\n;. Si \c;position.z-topo(position)\n; est plus grand que 9, on descend avec \c;jet(-1);\n;. Pour programmer ces tests, on utilise l'instruction \c;\l;if\u cbot\if;\n;, qui exécute les instructions entre les accolades une seule fois si la condition est remplie:
\c;
\s; jet(0);
\s; if (position.z-topo(position) < 6)
\s; {
\s; jet(1);
\s; }
\s;
\s; if (position.z-topo(position) > 9)
\s; {
\s; jet(-1);
\s; }
\n;
Il faut commencer par stabiliser l'altitude avec \c;jet(0);\n; pour que dans le cas où l'altitude est comprise entre 6 et 9 mètres, on reste à cette altitude. Si ensuite un \c;jet(1);\n; ou un \c;jet(-1);\n; est exécuté, cette instruction annulera le \c;jet(0);\n; précédent.
Il suffit d'insérer ces quelques lignes avant le \c;wait(0.2)\n; pour que le robot s'adapte au relief. On peut alors effacer les premières lignes qui font monter le robot à une altitude de 10 mètres.
\key;\key help;\norm; permet de revoir ces instructions en tout temps!
\t;Voir aussi
\l;Exercice précédent\u tant4; et \l;programmation\u cbot;.