colobot-data/help/F/twasp2.txt

86 lines
2.9 KiB
Plaintext
Raw Normal View History

2013-10-10 14:10:20 +00:00
\b;Objectif
Attraper des \l;guêpes\u object\wasp; en vol de manière plus efficace qu'avec le programme précédent.
2013-10-10 14:10:20 +00:00
\b;Programme
Voici encore une fois le programme de l'exercice précédent qui tire sur les guêpes:
\c;
2013-10-10 14:10:20 +00:00
\s;extern void object::Guêpes1()
\s;{
2013-10-10 14:10:20 +00:00
\s; object chose;
\s;
2013-10-10 14:10:20 +00:00
\s; aim(0);
\s;
2013-10-10 14:10:20 +00:00
\s; while ( true )
\s; {
2013-10-10 14:10:20 +00:00
\s; while ( radar(AlienWasp, 0, 360, 0, 20) == null )
\s; {
2013-10-10 14:10:20 +00:00
\s; chose = radar(AlienWasp);
\s; turn(direction(chose.position));
\s; motor(1,1);
\s;
2013-10-10 14:10:20 +00:00
\s; jet(0);
\s; if ( position.z > chose.position.z )
\s; {
2013-10-10 14:10:20 +00:00
\s; jet(-0.3);
\s; }
\s;
2013-10-10 14:10:20 +00:00
\s; if ( position.z < chose.position.z - 1 )
\s; {
2013-10-10 14:10:20 +00:00
\s; jet(0.3);
\s; }
\s;
2013-10-10 14:10:20 +00:00
\s; wait(0.2);
\s; }
2013-10-10 14:10:20 +00:00
\s; chose = radar(AlienWasp);
\s; turn(direction(chose.position));
\s; fire(1);
\s; }
\s;}
\n;
2013-10-10 14:10:20 +00:00
Comme vous l'avez constaté, le taux de réussite de ce programme n'est pas très élevé, car les guèpes ont souvent le temps de partir.
2013-10-10 14:10:20 +00:00
Le seul moyen pour rendre le programme plus efficace consiste à régler la vitesse des moteurs de gauche et de droite ainsi que du réacteur de manière à ce que le mouvement du robot pendant la salve de tir accompagne le mouvement de la cible.
2013-10-10 14:10:20 +00:00
Juste avant le tir, le programme fait un dernier ajustement avec un \c;\l;turn\u cbot\turn;(\l;direction\u cbot\direct;(chose.position));\n;. Pour suivre la guêpe, il faut mémoriser l'angle de cette dernière rotation: si l'angle est positif, il faut continuer à tourner à gauche pendant le tir; si l'angle est négatif, il faut continuer à tourner à droite.
Pour mémoriser l'angle de la dernière rotation, nous avons besoin d'une variable qui puisse contenir un simple nombre. Nous définissons donc tout au début du programme une variable \c;angle\n; du type \c;\l;float\u cbot\float;\n;:
\c;
2013-10-10 14:10:20 +00:00
\s; float angle;
\n;
2013-10-10 14:10:20 +00:00
Référez-vous au texte sur les \l;types de variables\u cbot\type; pour en savoir plus.
2013-10-10 14:10:20 +00:00
Juste avant l'instruction \c;\l;fire\u cbot\fire;(1);\n;, au lieu de tourner directement de l'angle nécessaire, nous mettons la valeur dans la variable \c;angle\n;:
\c;
2013-10-10 14:10:20 +00:00
\s; angle = direction(chose.position);
\n;
2013-10-10 14:10:20 +00:00
Puis nous tournons de l'angle nécessaire, et nous réglons la puissance des moteurs pour que le robot continue le mouvement:
\c;
\s; turn(angle);
2013-10-10 14:10:20 +00:00
\s; if ( angle < 0 )
\s; {
\s; motor(1,0.5);
\s; }
\s; else
\s; {
\s; motor(0.5,1);
\s; }
\n;
2013-10-10 14:10:20 +00:00
L'instruction \c;else\n; indique ce qu'il faut faire dans le cas où la condition de \c;\l;if\u cbot\if;\n; n'est pas remplie.
2013-10-10 14:10:20 +00:00
Puis il faut remettre les instructions qui règlent la puissance du réacteur pour que le robot suive le mouvement de la guêpe dans la direction verticale:
\c;
\s; jet(0);
2013-10-10 14:10:20 +00:00
\s; if ( position.z > chose.position.z )
\s; {
\s; jet(-0.3);
\s; }
\s;
2013-10-10 14:10:20 +00:00
\s; if ( position.z < chose.position.z - 1 )
\s; {
\s; jet(0.3);
\s; }
\n;
2013-10-10 14:10:20 +00:00
Comme vous pourrez le constater, le taux de réussite est nettement plus élevé que dans l'exercice précédent.
2013-10-10 14:10:20 +00:00
\key;\key help;\norm; permet de revoir ces instructions en tout temps!