\b;Задание
Убейте ос с еще большей эффективностью, чем вы делали это с помощью предыдущей программы.

\b;Программа
Вот программа из предыдущего упражнения, которая уничтожила всех ос после многих, многих неудачных попыток:
\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;
Многие ошибки возникали из-за того, что оса уже улетела до того, как пуля могла в нее попасть. Единственный способ улучшить программу- это установить мощность двух моторов и реактивного двигателя таким способом, чтобы во время выстрела бот летел по тому же курсу, что и цель.

Сразу перед выстрелом программа настраивает последнее направление с помощью \c;turn(direction(item.position));\n;. Чтобы лететь за осой во время выстрела, вы должны "запомнить" угол этого последнего поворота: если угол был положительный (поворот влево), бот должен продолжать разворачиваться влево во время выстрела; если же угол был отрицательным, бот должен продолжать поворачиваться вправо.

Чтобы "запомнить" угол последнего поворота, нам нужна переменная, которая может содержать только одно число. Если мы назовем ее \c;angle\n;, мы должны задать переменную со следующей строки в самом начале программы:
\c;
\s;	\l;float\u cbot\type; angle;
\n;
Тип переменной \l;float\u cbot\type; это изменчивый тип, который может содержать любое число, то есть целые числа или вещественные числа. Обратитесь пожалуйста к \l;тексту о типах переменных\u cbot\type; , если вы захотите узнать больше о различных типах переменных и о том, что они могут содержать.

Сразу перед инструкцией \c;fire(1);\n;, вместо того, чтобы писать \c;\l;turn\u cbot\turn;(\l;direction\u cbot\direct;(item.position));\n;, мы установим угол поворота в переменную \c;angle\n;:
\c;
\s;	angle = direction(item.position);
\n;
После этого мы произведем поворот и установим мощность моторов таким образом, чтобы бот продолжил движение:
\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;
Инструкция \c;else\n; определяет то, какую инструкцию должна выполнить программа, если условие, указанное инструкцией \c;if\n;, ложное.

Потом мы должны установить мощность двигателя таким образом, чтобы бот следовал за осой также и в вертикальном направлении:
\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;
Как вы видите, эта программа намного эффективней предыдущей!

\t;См. также
\l;Программирование\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.
