Robocode - cviceni 2

(Metodologisticky pristup)

Zpatky na "Experiment Robocode"

Tema cviceni

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.


Zadani pro samostatnou praci

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:

  1. K zadanemu bodu se muze robot otocit dvema zpusoby: doprava a doleva. Udelejte to tak, ze se bude tocit tam, kde je to efektivnejsi.


Napoveda

Trigonometrie - uhly a vzdalenosti

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:).

O metodach pouziti metod

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:


Napoveda


Zpatky na "Experiment Robocode"