\b;Ćwiczenie Podążaj za \l;robotem celem\u object\bottr; niosącym ładunek wybuchowy. Bądź ostrożny, gdyż zderzenie z nim grozi wybuchem. Podczas każdego zatrzymania robota celu należy być odpowiednio blisko niego (mniej niż 10 metrów). Gdy uda się być w pobliżu robota 10 razy z rzędu, ćwiczenie zakończy się wraz z jego dotarciem na platformę końcową. Przy każdym zatrzymaniu robot cel sprawdza, czy śledzący go robot jest odpowiednio blisko. Jeśli nie, liczenie zaczyna się od początku. \b;Ogólny algorytm Powtarzaj w nieskończoność: o Znajdź robot cel. o Oblicz odległość do robota. o Jeśli odległość jest mniejsza niż 5 m, cofnij się. o W przeciwnym przypadku oblicz kierunek do robota celu i idź w jego stronę. Podobnie jak poprzednio użyj nieskończonej pętli \c;\l;while\u cbot\while; (true)\n;: \s;\c;while (true) \s;{ \s; \n;instrukcje, które mają być powtarzane ...\c; \s;} \n; Znajdź robot cel instrukcją \c;\l;radar\u cbot\radar;\n;: \s;\c; target = radar(TargetBot); \n; Nie musisz sprawdzać, czy robot znalazł cel: na pewno tam jest. Użyj instrukcji \c;\l;distance\u cbot\dist;( , )\n; do obliczenie odległości między dwoma punktami. Pierwszym jest pozycja Twojego robota, podana przez \c;position\n;. Drugim jest pozycja robota celu, podana przez \c;target.position\n;. \s;\c;len = distance(position, target.position); \n; Jeśli odległość od robota celu jest mniejsza niż 5 metrów, oddal się od niego z prędkością odwrotnie proporcjonalną do odległości: im bliżej jest robot, tym szybciej należy się cofać. Odległość = 5.0 metrów -> prędkość = 0.0 Odległość = 2.5 metra -> prędkość = -0.5 Odległość = 0.0 metrów -> prędkość = -1.0 Aby to uzyskać, możesz użyć \l;wyrażenia\u cbot\expr; \c;distance/5-1\n;, wspólnie z instrukcją \c;\l;if\u cbot\if;\n; sprawdzającą, czy cel jest bliżej niż 5 m: \s;\c;if ( len < 5 ) // za blisko? \s;{ \s; motor(len/5-1, len/5-1); // cofnij \s;} \n; Jeśli odległość do celu jest większa niż 5m, poruszaj się w jego kierunku. Najpierw oblicz kąt niezbędny do obrócenia się w jego kierunku używając instrukcji \c;\l;direction\u cbot\direct;\n;. Następnie dostosuj prędkości prawego i lewego silnika, aby Twój robot podążał za celem: \s;\c;else \s;{ \s; dir = direction(target.position); \s; if ( dir >= 0 ) // cel po lewej stronie? \s; { \s; motor(1-dir/90, 1); \s; } \s; else // cel po prawej stronie? \s; { \s; \n;do Ciebie należy uzupełnienie tego\c; \s; } \s;} \n; Gdy cel jest po lewej stronie, zmienna \c;dir\n; ma wartość dodatnią, pomiędzy 0 i 180. \l;Wyrażenie\u cbot\expr; \c;1-dir/90\n; zwraca prędkość w zakresie pomiędzy 1 i -1 w zależności od kierunku: kierunek = 0 -> prędkość = 1.0 kierunek = 45 -> prędkość = 0.5 kierunek = 90 -> prędkość = 0.0 kierunek = 135 -> prędkość = -0.5 kierunek = 180 -> prędkość = -1.0 \image radar2 14 10; Gdy cel jest po prawej stronie, zmienna \c;dir\n; ma wartość ujemną, pomiędzy 0 i -180. Jedynym zadaniem jakie jeszcze Ci zostało jest zadeklarowanie \l;zmiennych\u cbot\var; używanych w programie. \c;target\n; jest typu \c;object\n;, podczas gdy \c;dir\n; i \c;len\n; są typu \c;float\n;. \t;Zobacz również \l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.