colobot-data/help/R/tradar1.txt

58 lines
4.9 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

\b;Упражнение
Пусть бот отыщет на земле все \l;синие кресты\u object\waypoint;. Как только бот пройдет над одним из крестов, он исчезнет. Вот общий принцип, который вы должны применить:
Повторять всегда:
o Искать крест
o Если креста нет, остановить программу.
o Рассчитать направление к кресту.
o Установить скорость моторов таким способом, чтобы они могли найти путь к кресту.
\b;Программа
Используйте цикл \c;\l;while\u cbot\while;\n;, чтобы повторять несколько инструкций снова и снова:
\s;\c;while ( true )
\s;{
\s; \n;инструкции...\c;
\s;}
\n;
Инструкция \c;\l;radar\u cbot\radar;\n; будет искать синие кресты и переводить направление к ним в переменную, например \c;spot\n;. В этом случае инструкции \c;\l;radar\u cbot\radar;()\n; необходим всего один параметр, т.е. категория объекта, который он должен искать:
\s;\c;spot = radar(WayPoint);
\n;
Когда будут найдены все кресты, \c;radar\n; возвратит значение \c;\l;null\u cbot\null;\n;. Вы должны будете все это проверить и действовать согласно инструкции \c;\l;if\u cbot\if;\n;:
\s;\c;if ( spot == null ) // no more ?
\s;{
\s; motor(0, 0); // stops the motors
\s; break; // stops the loop
\s;}
\n;Инструкция \c;\l;break\u cbot\break;\n; остановит бесконечный цикл \c;while (true)\n;.
Используйте инструкцию \c;\l;direction\u cbot\direct;()\n; чтобы рассчитать угол, на который должен развернуться бот, чтобы повернуться в направлении синего креста. Координаты объекта задаются \c;spot.position\n;. Следующие строки устанавливают угол необходимого поворота в \l;переменную\u cbot\var; \c;dir\n;:
\s;\c;dir = direction(spot.position);
\n;
Значение угла положительное, если синий крест расположен слева от вас, и отрицательное, если он справа. Если крест расположен слева, вы должны установить максимальную скорость правостороннего мотора и установить левосторонний мотор на более низкие обороты, в соответствии с углом:
направлние = \c; 0\n; -> скорость = \c; 1.0\n;
направлние = \c; 45\n; -> скорость = \c; 0.5\n;
направлние = \c; 90\n; -> скорость = \c; 0.0\n;
направлние = \c;135\n; -> скорость = \c;-0.5\n;
направлние = \c;180\n; -> скорость = \c;-1.0\n;
График внизу отображает скорость левостороннего и правостороннего мотора, как было задано инструкцией \c;\l;motor\u cbot\motor;\n;, в соответствии с углом:
\image radar2 14 10;
Если крест расположен прямо впереди, угол равен 0 градусов. Моторы будут работать на скорости 1 и 1, что означает полный вперед. Если крест сзади, правый мотор будет работать на скорости -1: бот развернется. Вы можете использовать \l;выражение\u cbot\expr; \c;1+dir/90\n; чтобы рассчитать необходимую скорость моторов:
\s;\c;if ( dir < 0 ) // справа?
\s;{
\s; motor(1, 1+dir/90); // поворачивает
\s;}
\n;
Используйте тот же принцип, если угол принимает положительное значение между 0 и 180 градусами. Вы можете использовать или не использовать в точности эти инструкции:
\s;\c;else // слева?
\s;{
\s; \n;здесь идет код, написанный вами...\c;
\s;}
\n;
В самом начале программы вы должны задать переменные. \c;spot\n; относится к типу \c;\l;object\u cbot\object;\n;, а \c;dir\n; к типу \c;\l;float\u cbot\float;\n;.
\t;См. также
\l;Программирование\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.