Začínáme s Robocode
první robot, základy řízení
Robot je v podání Robocode jednoduchý tank se dvěma pásy, otočným dělem a radarem. Ukážeme si, jak vytvořit kontroler a vysvětlíme si základní příkazy pro jeho ovládání. Po přečtení tohoto článku byste měli být schopni vytvořit ovládací program robota, který bude schopen jednoduchých pohybů a detekce nepřátelských tanků včetně „akcí nutných pro přežití”
Download a instalace
Prvním krokem, pokud si budete chtít Robocode vyzkoušet, je samozřejmě jeho instalace. Jak
na to se dozvíte nejlépe na
domácí stránce. Informace jsou sice v angličtině, ale jsou natolik jednoduché, že by to
měli zvládnout i neangličtináři.
První robot
Součástí instalace Robocode je poměrně použitelný editor textových souborů, který v sobě
obsahuje šablonu pro jednoduchého robota. Stačí vybrat menu
File->New->Robot, zadat jméno
robota a vaše iniciály a příslušný soubor je vám nabídnut k editaci. Při prvním spuštění
si editor provede detekci Java kompilátoru (umí používat javac z Java SDK nebo zabudovaný
Jikes). Právě vytvořeného robota můžete zkompilovat pomocí menu
Compiler->Compile a ihned i vyzkoušet. Na to je třeba v okně původní aplikace
Robocode (ne editoru) vybrat menu Battle->New a vybrat vašeho nového robota
a jeho soupeře.
Anatomie robota
Anatomie robota |
Robot, se kterým můžete pracovat, má podobu
klasického tanku. Jako takový je řízen diferenciálně (více
o modelech kolových vozidel). Na tanku je umístěno
otočné dělo a na něm otočný radar. Dělo a radar se mohou otáčet nezávisle.
Standardně se ale radar dívá tam, kam dělo.
Základní příkazy
Vzhledem k tomu, že Robocode má sloužit k výuce programování v Javě, je k dispozici
i velmi jednoduché ovládání robota vhodné pro začátečníky (ať jsou to začátečníci
v programování nebo v robotice).
Pohyb
turnRight(double stupnu)
a stejně takturnLeft(double stupnu)
otočí robota o požadovaný počet stupňůahead(double vzdalenost)
aback(double vzdalenost)
přesune robota o příslušný počet pixelů, pokud v cestě nestojí okraj hřiště (stěna) nebo jiný robotturnGunRight(double stupnu)
aturnGunLeft(double stupnu)
otočí dělo o požadovaný počet stupňů (relativně vůči aktuální orientaci robota)turnRadarRight(double stupnu)
aturnRadarLeft(double stupnu)
otočí radar relativně vůči dělu
Volání všech těchto funkcí je synchronní, což znamená, že se nevrátí kontrola zpět
vašemu programu, dokud se požadovaný manévr nedokončí. Standardní chování funkcí na
otáčení můžete změnit pomocí volání
setAdjust*
(více v dokumentaci Robocode API).Senzory
getX()
agetY()
vrací souřadnice robota v pixelechgetHeading()
,getGunHeading()
agetRadarHeading()
vrací příslušné orientace ve stupníchgetBattleFieldWidth()
agetBattleFieldHeight()
vrací rozměry hrací plochy
Střelba
Každý robot začíná hru se stejným možstvím energie. Robot se považuje za
zničeného, pokud jeho energie klesne na nulu. Střílet může takzvané energetické kulky.
Ty mají několik charakteristických vlastností:
- 1 – 3 jednotky energie — čím více energie do kulky vložíte, tím větší způsobí škodu při zásahu protivníka
- kulky letí relativně pomalu — pokud tedy vystřelíte, když vídíte protivníka na radaru, neznamená to, že ho trefíte (může ujet)
- roboti nemají možnost letící kulky detekovat a nemohou se jim tudíž přímo vyhýbat
Tyto vlastnosti, přestože se na první pohled mohou zdát zvláštní, dávají hře zajímavé
kouzlo. Umožňují totiž vyvíjet zajímavé strategie střelby a pohybu u nichž není dopředu jasné,
jak budou úspěšné. Více o těchto strategiích si povíme v některém z dalších dílů tohoto
povídání.
Události (events)
Během hry dochází k některým událostem, které ovlivňují existenci vašeho robota a je tedy
vhodné na ně reagovat. Základní třída
Robot
obsahuje obslužné metody pro většinu
těchto událostí, které patří do kategorie tzv. „do nothing”. Ve vašem kontroleru si
je ovšem můžete předefinovat. Zde je několik nejčastějších událostí s příslušnými metodami
a podmínkami, kdy nastávají:ScannedRobotEvent
[onScannedRobot()
] — když váš radar detekuje cízího robotaHitByBulletEvent
[onHitByBullet()
] — když vášeho robota zasáhne kulkaHitRobotEvent
[onHitRobot()
] — když narazíte do jiného robotaHitWallEvent
[onHitWall()
] — když narazíte do zdi
Závěr
S instalací Robocode získáte i spoustu vzorových robotů, na kterých se můžete naučit
zajímavé věci. Mnoho jiných kontrolerů je také k dispozici ke stažení (některé i se zdrojovými kódy).
Také existují
diskusní fóra,
emailové konference
a podobně, takže dalších informací pro objevování světa Javy & robotů & Robocode
je poměrně dostatek.