colobot-data/help/R/tdragst.txt

65 lines
5.1 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;Упражнение
Достигните финишной площадки (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;.