\b;Zadanie Zestrzel wszystkie osy nieco efektywniej niż w poprzednim programie. \b;Program Oto program z poprzedniego ćwiczenia, który zabija wszystkie osy, jednak po bardzo wielu nieudanych próbach: \c; \s;extern void object::Wasp1() \s;{ \s; \l;object\u cbot\type; item; \s; \s; \l;aim\u cbot\aim;(0); \s; \s; \l;while\u cbot\while; (true) \s; { \s; \l;while\u cbot\while; (\l;radar\u cbot\radar;(AlienWasp, 0, 360, 0, 20) == null) \s; { \s; item = \l;radar\u cbot\radar;(AlienWasp); \s; \l;turn\u cbot\turn;(\l;direction\u cbot\direct;(item.position)); \s; \l;motor\u cbot\motor;(1,1); \s; \s; \l;jet\u cbot\jet;(0); \s; \l;if\u cbot\if; (position.z > item.position.z) \s; { \s; \l;jet\u cbot\jet;(-0.3); \s; } \s; \s; \l;if\u cbot\if; (position.z < item.position.z - 1) \s; { \s; \l;jet\u cbot\jet;(0.3); \s; } \s; \s; \l;wait\u cbot\wait;(0.2); \s; } \s; item = \l;radar\u cbot\radar;(AlienWasp); \s; \l;turn\u cbot\turn;(\l;direction\u cbot\direct;(item.position)); \s; \l;fire\u cbot\fire;(1); \s; } \s;} \n; Wiele niecelnych strzałów jest spowodowanych faktem, że osa odleciała, zanim doleciał do niej pocisk. Jedynym sposobem usprawnienia programu jest ustawienie mocy obu silników oraz silnika odrzutowego w ten sposób, aby robot podążał tą samą trasą co cel podczas strzału. Bezpośrednio przed strzałem program po raz ostatni reguluje kierunek instrukcją \c;turn(direction(item.position));\n;. Aby podążać za osą w trakcie strzelania, należy "zapamiętać" kąt ostatniego obrotu: jeśli był on dodatni(obrót w lewo), robot powinien się obracać w lewo podczas strzelania; jeśli był ujemny, robot powinien obracać się w prawo. Do "zapamiętania" kąta ostatniego obrotu potrzebna będzie zmienna, zawierająca tylko jedną liczbę. Jeśli nazwiesz ją \c;angle\n;, należy zdefiniować zmienną za pomocą następującego wiersza na początku programu: \c; \s; \l;float\u cbot\type; angle; \n; Zmienna typu \l;float\u cbot\type; jest zmienną typu, który może przechowywać każdą liczbę, całkowitą bądź rzeczywistą. Zobacz \l;tekst o typach zmiennych\u cbot\type; jeśli chcesz wiedzieć więcej o różnych typach zmiennych oraz co one zawierają. Bezpośrednio przed instrukcją \c;fire(1);\n;, zamiast pisać \c;\l;turn\u cbot\turn;(\l;direction\u cbot\direct;(item.position));\n;, umieść kąt obrotu w zmiennej \c;angle\n;: \c; \s; angle = direction(item.position); \n; Następnie wykonaj obrót i ustaw moc silników tak, aby robot kontynuował poruszanie się: \c; \s; turn(angle); \s; if (angle < 0) \s; { \s; motor(1,0.5); \s; } \s; else \s; { \s; motor(0.5,1); \s; } \n; Instrukcja \c;else\n; określa jakie instrukcje powinien wykonać program jeśli warunek podany instrukcji \c;if\n; jest fałszywy. Następnie trzeba ustawić moc silników odrzutowych, aby robot utrzymywał również tą samą wysokość co osa: \c; \s; jet(0); \s; if(position.z > item.position.z) \s; { \s; jet(-0.3); \s; } \s; \s; if(position.z < item.position.z - 1) \s; { \s; jet(0.3); \s; } \n; Każdy zauważy, że ten program jest o wiele skuteczniejszy od poprzedniego! \t;Zobacz również \l;Programowanie\u cbot;, \l;typy\u cbot\type; i \l;kategorie\u cbot\category;.