\b;Zadanie
Zestrzel wszystkie osy nieco efektywniej niż w poprzednim programie.

\b;Program
Oto program z poprzedniego ćwiczenia, który zabija wszystkie osy, jednak po bardzo wielu nieudanych próbach:
\c;
\s;extern void object::Wasp1()
\s;{
\s;	\l;object\u cbot\type;    item;
\s;	
\s;	\l;aim\u cbot\aim;(0);
\s;	
\s;	\l;while\u cbot\while; (true)
\s;	{
\s;		\l;while\u cbot\while; (\l;radar\u cbot\radar;(AlienWasp, 0, 360, 0, 20) == null)
\s;		{
\s;			item = \l;radar\u cbot\radar;(AlienWasp);
\s;			\l;turn\u cbot\turn;(\l;direction\u cbot\direct;(item.position));
\s;			\l;motor\u cbot\motor;(1,1);
\s;			
\s;			\l;jet\u cbot\jet;(0);
\s;			\l;if\u cbot\if; (position.z > item.position.z)
\s;			{
\s;				\l;jet\u cbot\jet;(-0.3);
\s;			}
\s;			
\s;			\l;if\u cbot\if; (position.z < item.position.z - 1)
\s;			{
\s;				\l;jet\u cbot\jet;(0.3);
\s;			}
\s;			
\s;			\l;wait\u cbot\wait;(0.2);
\s;		}
\s;		item = \l;radar\u cbot\radar;(AlienWasp);
\s;		\l;turn\u cbot\turn;(\l;direction\u cbot\direct;(item.position));
\s;		\l;fire\u cbot\fire;(1);
\s;	}
\s;}
\n;
Wiele niecelnych strzałów jest spowodowanych faktem, że osa odleciała, zanim doleciał do niej pocisk. Jedynym sposobem usprawnienia programu jest ustawienie mocy obu silników oraz silnika odrzutowego w ten sposób, aby robot podążał tą samą trasą co cel podczas strzału.

Bezpośrednio przed strzałem program po raz ostatni reguluje kierunek instrukcją \c;turn(direction(item.position));\n;. Aby podążać za osą w trakcie strzelania, należy "zapamiętać" kąt ostatniego obrotu: jeśli był on dodatni(obrót w lewo), robot powinien się obracać w lewo podczas strzelania; jeśli był ujemny, robot powinien obracać się w prawo.

Do "zapamiętania" kąta ostatniego obrotu potrzebna będzie zmienna, zawierająca tylko jedną liczbę. Jeśli nazwiesz ją \c;angle\n;, należy zdefiniować zmienną za pomocą następującego wiersza na początku programu:
\c;
\s;	\l;float\u cbot\type; angle;
\n;
Zmienna typu \l;float\u cbot\type; jest zmienną typu, który może przechowywać każdą liczbę, całkowitą bądź rzeczywistą. Zobacz \l;tekst o typach zmiennych\u cbot\type; jeśli chcesz wiedzieć więcej o różnych typach zmiennych oraz co one zawierają.

Bezpośrednio przed instrukcją \c;fire(1);\n;, zamiast pisać \c;\l;turn\u cbot\turn;(\l;direction\u cbot\direct;(item.position));\n;, umieść kąt obrotu w zmiennej \c;angle\n;:
\c;
\s;	angle = direction(item.position);
\n;
Następnie wykonaj obrót i ustaw moc silników tak, aby robot kontynuował poruszanie się:
\c;
\s;	turn(angle);
\s;	if (angle < 0)
\s;	{
\s;		motor(1,0.5);
\s;	}
\s;	else
\s;	{
\s;		motor(0.5,1);
\s;	}
\n;
Instrukcja \c;else\n; określa jakie instrukcje powinien wykonać program jeśli warunek podany instrukcji \c;if\n; jest fałszywy.

Następnie trzeba ustawić moc silników odrzutowych, aby robot utrzymywał również tą samą wysokość co osa:
\c;
\s;	jet(0);
\s;	if(position.z > item.position.z)
\s;	{
\s;		jet(-0.3);
\s;	}
\s;	
\s;	if(position.z < item.position.z - 1)
\s;	{
\s;		jet(0.3);
\s;	}
\n;
Każdy zauważy, że ten program jest o wiele skuteczniejszy od poprzedniego!

\t;Zobacz również
\l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.
