colobot-data/help/R/tdragst.txt

65 lines
5.1 KiB
Plaintext
Raw Normal View History

\b;Упражнение
Достигните финишной площадки (25 м перед вами) как можно быстрее, используя инструкцию \c;motor( , )\n;. В конце движения вы должны будете постепенно снизить свою скорость, или бот подорвется на \l;минах\u object\mine;.
Вы можете ничего больше не писать кроме \c;\l;move\u cbot\move;(25);\n;, это должно сработать просто идеально. Тем не менее, это упражнение преследует цель изучить использование инструкции \c;\l;motor\u cbot\motor;\n;.
Эта инструкция запрашивает два значения:
1) Скорость левостороннего мотора.
2) Скорость правостороннего мотора.
\s;\c; motor( left, right );
\n;
Значения должны быть между -1 и 1:
-1 = полная тяга назад
0 = стоп
1 = полная тяга вперед
Например, \c;motor(0.5, 0.5);\n; будет двигать машину вперед на среднем ходу, пока она не получит дальнейших инструкций.
С помощью инструкции \c;motor(0.5, 0.6);\n;, можно заставить бота двигаться вперед на среднем ходу, одновременно медленно поворачиваясь влево: правосторонний мотор движется немного быстрее (\c;0.6\n;), чем левосторонний мотор (\c;0.5\n;).
\b;Обший принцип
Чтобы переместиться вперед точно на 25 метров и остановиться, вы должны двигаться первые 23 метра на полной скорости, а после этого снизить скорость на последнем отрезке длиной два метра.
\l;Переменная\u cbot\var; \l;position\u cbot\object; в любой момент сообщает вам о текущей позиции бота, а инструкция \c;\l;distance\u cbot\dist;( , );\n; выдает расстояние между двумя точками. Лучший способ узнать ваше текущее положение заключается в сохранении текущей позиции перед тем, как задать \l;переменную\u cbot\var;. Например, переменную, которая называется \c;start\n;. После этого вы сможете высчитать расстояние между начальной позицией и вашей текущей позицией: \c;distance(позиция, старт)\n;.
\b;Программа
1) задание переменных
\s;\c; point start;
\s; float len;
\n;
2) сохранение стартовой позиции
\s;\c; start = position;
\n;
3) start full throttle :
\s;\c; motor(1, 1);
\n;
4) Бесконечный цикл \c;\l;while\u cbot\while;\n;:
\s;\c; while ( true )
\s; {
\s; len = distance(позиция, старт);
\s; if ( len > 25-2 )
\s; {
\s; motor( меньше, чем раньше ! );
\s; }
\s; }
\n;
Пока расстояние между стартовой и текущей позициями меньше 23 метров, инструкция в скобках после \c;\l;if\u cbot\if;\n; выполняться не будет, поэтом моторы будут продолжать на максимальной мощности, как им и было приказано инструкцией \c;\l;motor\u cbot\motor;(1,1);\n;.
Чтобы постепенно снизить скорость, скорость моторов должна быть пропорциональной оставшемуся расстоянию:
o \c;2.0\n; метра осталось -> скорость = \c;1.00\n; (максимум)
o \c;1.5\n; метра осталось -> скорость = \c;0.75\n;
o \c;1.0\n; метр остался -> скорость = \c;0.50\n;
o \c;0.5\n; метра осталось -> скорость = \c;0.25\n;
o \c;0.0\n; метров осталось -> скорость = \c;0.00\n; (стоп)
\image tdragst1 12 6;
Вы можете использовать следующее \l;выражение\u cbot\expr; \c;(25-len)/2\n; чтобы высчитать значение для инструкции скорости, которая должна быть дана моторам.
Теперь вы должны сложить все это вместе и проверить программу.
\b;Комментарий
Вы можете использовать значения больше 1 для инструкции \c;\l;motor\u cbot\motor;();\n;, но от этого бот быстрее двигаться не будет.
\t;См. также
\l;Программирование\u cbot;, \l;типы\u cbot\type; и \l;категории\u cbot\category;.