\b;Ćwiczenie
Napisz program umożliwiający robotowi znalezienie wszystkich \l;niebieskich plusów\u object\waypoint; leżących na ziemi. Plusy znikają po przejściu przez nie robota. Oto główna zasada działania programu:

Powtarzaj w nieskończoność:
	o  Szukaj plusa
	o  Jeśli nie ma żadnego, zatrzymaj program.
	o  Oblicz kierunek do plusa.
	o  Ustaw prędkości silników tak, aby robot dotarł do znalezionego plusa.

\b;Program
Użyj pętli \c;\l;while\u cbot\while;\n; do wielokrotnego powtarzania instrukcji:
\s;\c;while ( true )
\s;{
\s;	\n;instrukcje...\c;
\s;}
\n;
Instrukcja \c;\l;radar\u cbot\radar;\n; wykryje niebieskie plusy i umieści ich opis w zmiennej, na przykład \c;spot\n;. W tym przypadku instrukcja \c;\l;radar\u cbot\radar;()\n; potrzebuje tylko jednego parametru, to jest kategorii obiektu, który musi znaleźć:
\s;\c;spot = radar(WayPoint);
\n;
Po znalezieniu wszystkich plusów, instrukcja \c;radar\n; zwróci wartość \c;\l;null\u cbot\null;\n;. Konieczne będzie sprawdzanie tego warunku instrukcją \c;\l;if\u cbot\if;\n; i odpowiednie reagowanie:
\s;\c;if ( spot == null )  // nie ma więcej?
\s;{
\s;	motor(0, 0);  // zatrzymaj silniki
\s;	break;        // zatrzymaj pętlę
\s;}
\n;Instrukcja \c;\l;break\u cbot\break;\n; zatrzyma nieskończoną pętlę \c;while (true)\n;.

Użyj instrukcji \c;\l;direction\u cbot\direct;()\n; do obliczenia kąta obrotu, jaki musi wykonać robot, aby iść w kierunku niebieskiego plusa. Współrzędne obiektu są podawane przez \c;spot.position\n;. Następujący wiersz umieści kąt niezbędnego obrotu w \l;zmiennej\u cbot\var; \c;dir\n;:
\s;\c;dir = direction(spot.position);
\n;
Wartość kąta jest dodatnia, gdy niebieski plus jest po lewej stronie a ujemna, gdy jest po prawej. Jeśli plus jest po lewej stronie, należy ustawić pełną prędkość prawego silnika i zmniejszyć prędkość lewego silnika w zależności od kąta:

    kierunek = \c;  0\n; -> prędkość = \c; 1.0\n;
    kierunek = \c; 45\n; -> prędkość = \c; 0.5\n;
    kierunek = \c; 90\n; -> prędkość = \c; 0.0\n;
    kierunek = \c;135\n; -> prędkość = \c;-0.5\n;
    kierunek = \c;180\n; -> prędkość = \c;-1.0\n;

Poniższy schemat pokazuje zależność prędkości lewego i prawego silnika, ustawianego instrukcją \c;\l;motor\u cbot\motor;\n;, od kąta:

\image radar2 14 10;
Jeśli plus jest wprost przed robotem, kąt jest równy 0 stopni. Prędkości obu silników zostaną ustawione na 1, czyli pełną prędkość naprzód. Jeśli plus jest za robotem, prędkość prawego silnika zostanie ustawiona na -1, co obróci robota dookoła. Można użyć \l;wyrażenia\u cbot\expr; \c;1+dir/90\n; w celu obliczenia niezbędnej prędkości silników:
\s;\c;if ( dir < 0 )  // po prawej stronie?
\s;{
\s;	motor(1, 1+dir/90);  // skręca bardziej lub mniej
\s;}
\n;
Użyj tej samej metody w przypadku dodatniej wartości kąta, w przedziale od 0 do 180 stopni. Do Ciebie należy napisanie dokładnych instrukcji do wykonania:
\s;\c;else  // po lewej stronie?
\s;{
\s;	\n;do Ciebie należy wypełnienie tego...\c;
\s;}
\n;
Na początku programu musisz zadeklarować wszystkie zmienne. \c;spot\n; jest typu \c;\l;object\u cbot\object;\n;, podczas gdy \c;dir\n; jest typu \c;\l;float\u cbot\float;\n;.

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