\b;Objectif
Adaptez la hauteur de vol du \l;tireur organique volant\u object\botoj; à la topologie du terrain.

\t;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.

\t;Voir aussi
\l;Exercice précédent\u tant4;, \l;programmation\u cbot;, \l;types\u cbot\type; et \l;catégories\u cbot\category;.
