colobot-data/help/P/tant3.txt

41 lines
2.1 KiB
Plaintext

\b;Zadanie
Aby zapobiec marnowaniu energii przystosuj program \c;Tower1\n; tak, aby nie strzelał do mrówek będących poza zasięgiem.
\t;Program
Program \c;Tower1\n; strzela w kierunku najbliższej mrówki, nawet jeśli wciąż jest ona poza zasięgiem:
\c;
\s;extern void object::Tower1()
\s;{
\s; object item;
\s;
\s; jet(0.2);
\s; while(position.z < 20)
\s; {
\s; wait(0.2);
\s; }
\s; jet(0);
\s;
\s; while(true)
\s; {
\s; item = radar(AlienAnt);
\s; turn(direction(item.position));
\s; fire(1);
\s; }
\s;}
\n;
Jeśli robot musi wykonać to samo zadanie co poprzednio z dostępnym jedynie \l;zwykłym ogniwem elektrycznym\u object\power;, wstaw pętlę oczekującą na wystarczające zbliżenie się mrówki (czyli mniej niż 40 metrów). Wtedy dla każdej mrówki wystarczy jedna seria strzałów.
Instrukcji \c;\l;radar\u cbot\radar();\n; można podać więcej parametrów (liczb) oznaczających gdzie radar powinien szukać mrówek. Na przykład \c;radar(AlienAnt,0,360,0,40);\n; będzie szukał tylko mrówek będących bliżej niż 40 metrów. Dwie pierwsze liczby określają, że radar powinien szukać we wszystkich kierunkach, dwie ostatnie określają, że radar powinien wykrywać tylko mrówki w odległości od 0 do 40 metrów. Jeśli nie zostanie znaleziona mrówka będąca bliżej niż 40 metrów, instrukcja \c;\l;radar\u cbot\radar();\n; zwróci wartość \c;null\n;. Wobec czego można więc napisać pętlę warunkową podobną do napisanej w poprzednim ćwiczeniu, która czeka na pojawienie się mrówki bliżej niż 40 metrów:
\c;
\s; while (radar(AlienAnt, 0, 360, 0, 40) == null)
\s; {
\s; wait(0.2);
\s; }
\n;
Zauważ, że podwójny znak równości "==" jest konieczny do wykonania sprawdzenia równości stron.
Aby robot czekał ze strzałem, aż mrówka będzie bliżej niż 40 metrów, wystarczy wstawić te dwie linie przed instrukcją \c;fire(0);\n;,. Wtedy nawet zwykłe ogniwo elektryczne wystarczy do zabicia wszystkich mrówek.
\t;Zobacz również
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.