Cilem cviceni je pouziti metod za ucelem rozdeleni problemu na podproblemy. Zaroven se budou pouzivat knihovny z Java Core a na sve si prijdou i zaklady trigonometrie.
Prectete si zadani a skuste se podivat i na poznamky k cviceni 1. V tomto cviceni totiz jde o to, aby jste logiku robota rozdelili do znovupouzitelnych metod.
Vytvorte metodu, ktere poslete souradnice [x,y] jakehokoliv bodu v arene a ona vypocita a vrati uhel, o ktery se robot musi otocit aby smeroval k tomu mistu.
Pak vytvorte metodu, ktera spocita vzdalenost momentalni pozice k souradnicim [x,y].
Tyto metody pak pouzijte v robotovi, ktery bude nahodne chodit po arene tak, ze nejprv nahodne vygeneruje sourednice nejakeho bodu v arene, pak se tam otoci, pujde tam a kdyz tam bude, tak vygeneruje dalsi bod a podobne (nahodne generovani sourednic udelejte taky jako metodu).
Kdyz robot spatri nepritele, vystreli na nej.
Modifikace:
Prvym ukolem je zjistit uhel, o ktory se musi robot otocit k danym sourednicim. Na obrazku je situace, kdy nas robot stoji na sourednicich [x,y] a ma se dostat na [x1,y1]. Souradnice robota zjistite pomoci volani metod z tridy Robot (ktere to jsou?). Zakladem je pak vypocet uhlu a.
To zjevne bude a = atan((x1-x)/(y1-y)). Zatim nas nebude zajimat, kam se diva nas robot, ale zjistime, jaky uhel otoceni je k bodu [x1,y1] od nejakeho pevneho pocatku. V Robocode je absolutni 0 stupnu primo nahore na severu. Takze zjistime uhel b.
Tady je b = 180 - a. Je vsak zrejme, ze pro kazdy kvadrant bude vypocet uhlu b z uhlu a trochu jiny. To necham na vas.
No a jeste musime zjistit, o jaky uhel se ma robot otocit podle toho, kam se diva. Smer robota zjistime volanim metody h = getHeading(), a pak je jednoduche vypocitat rozdil uhlu:
x = b - h, samozrejme jen v tomto pripade. Osetreni vsech (dvou) stavu zustava na vas.
Druhou metodou je zjisteni vzdalenosti [x1,x2] od momentalni pozice robota. S prvnim obrazkem a Pythagorovou pomoci to jiste zvladnete sami:).
Kazdou cinnost (vypocet uhlu a vzdalenosti, generovani bodu a pod.) umistnete do samostatne metody. Pak tyto metody volne pouzivejte:).
Pravidla rozdeleni kodu do metod jsou priblizne nasledovna: