\b;Ćwiczenie
Dotrzyj jak najszybciej do platformy końcowej (25 m przed Tobą), używając instrukcji \c;motor( , )\n;. Przed końcem ruchu musisz stopniowo zwalniać, aby robot nie wpadł na \l;miny\u object\mine; i nie wybuchł.

Równie dobrze możesz napisać jedynie instrukcję \c;\l;move\u cbot\move;(25);\n;, która wykona to samo zadanie, jednak celem tego ćwiczenia jest nauka używania instrukcji \c;\l;motor\u cbot\motor;\n;.

Instrukcja ta potrzebuje dwóch wartości:
1) Prędkości lewego silnika.
2) Prędkości prawego silnika.

\s;\c;	motor( lewy, prawy );
\n;
Wartości muszą się zawierać w przedziale od -1 do 1:
-1 = pełny ciąg wstecz
 0 = silnik zatrzymany
 1 = pełny ciąg naprzód

Na przykład instrukcja \c;motor(0.5, 0.5);\n; będzie poruszała robotem naprzód z połową prędkości, aż do podania silnikom nowych instrukcji.

Po napotkaniu instrukcji \c;motor(0.5, 0.6);\n;, robot będzie się poruszał do przodu z połową prędkości, wykonując w tym samym czasie niewielki obrót w lewo: prawy silnik porusza się nieco szybciej (\c;0.6\n;) niż lewy (\c;0.5\n;).

\b;Ogólny algorytm
Aby przejechać dokładnie 25 metrów, należy jechać z pełną prędkością przez pierwsze 23 metry, a następnie stopniowo zmniejszać prędkość przez ostatnie dwa metry.
\l;Zmienna\u cbot\var; \l;position\u cbot\object; podaje bieżącą pozycję robota, a instrukcja \c;\l;distance\u cbot\dist;( , );\n; oblicza odległość między dwoma punktami. Najlepszy sposób na poznanie własnej pozycji, polega na zachowaniu bieżącej pozycji przed startem w \l;zmiennej\u cbot\var;, nazwanej na przykład \c;start\n;. Następnie można obliczyć odległość między pozycją startową i bieżącą pozycją za pomocą instrukcji \c;distance(position, start)\n;.

\b;Program
1) zadeklaruj zmienne
\s;\c;	point start;
\s;	float len;
\n;
2) zapisz pozycję startową
\s;\c;	start = position;
\n;
3) na początek z pełną mocą:
\s;\c;	motor(1, 1);
\n;
4) wykonaj pętlę nieskończoną \c;\l;while\u cbot\while;\n;:
\s;\c;	while ( true )
\s;	{
\s;		len = distance(position, start);
\s;		if ( len > 25-2 )
\s;		{
\s;			motor( mniej niż poprzednio! );
\s;		}
\s;	}
\n;
Tak długo jak odległość pomiędzy pozycją startową i bieżącą jest mniejsza od 23m, instrukcje w klamrach po instrukcji \c;\l;if\u cbot\if;\n; nie będą wykonywane, więc silniki utrzymają maksymalną prędkość nadaną im instrukcją \c;\l;motor\u cbot\motor;(1,1);\n;.

Aby stopniowo zwalniać, prędkość silników musi być proporcjonalna do pozostałej odległości:
o  zostały \c;2.0\n; metry  -> prędkość = \c;1.00\n; (maksymalna)
o  zostało \c;1.5\n; metra  -> prędkość = \c;0.75\n;
o  został  \c;1.0\n; metr   -> prędkość = \c;0.50\n;
o  zostało \c;0.5\n; metra  -> prędkość = \c;0.25\n;
o  zostało \c;0.0\n; metrów -> prędkość = \c;0.00\n; (zatrzymanie)

\image tdragst1 12 6;
Do obliczenia prędkości, która zostanie podana silnikom możesz użyć następującego \l;wyrażenia\u cbot\expr;: \c;(25-len)/2\n;.

Do Ciebie należy złożenie tego wszystkiego razem i przetestowanie programu.

\b;Uwaga
Możesz używać wartości większych od 1 dla instrukcji \c;\l;motor\u cbot\motor;();\n;, ale robot nie będzie poruszał się szybciej.

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