czech english

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
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ě tak turnLeft(double stupnu) otočí robota o požadovaný počet stupňů
  • ahead(double vzdalenost) a back(double vzdalenost) přesune robota o příslušný počet pixelů, pokud v cestě nestojí okraj hřiště (stěna) nebo jiný robot
  • turnGunRight(double stupnu) a turnGunLeft(double stupnu) otočí dělo o požadovaný počet stupňů (relativně vůči aktuální orientaci robota)
  • turnRadarRight(double stupnu) a turnRadarLeft(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() a getY() vrací souřadnice robota v pixelech
  • getHeading(), getGunHeading() a getRadarHeading() vrací příslušné orientace ve stupních
  • getBattleFieldWidth() a getBattleFieldHeight() 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 robota
  • HitByBulletEvent [onHitByBullet()] — když vášeho robota zasáhne kulka
  • HitRobotEvent [onHitRobot()] — když narazíte do jiného robota
  • HitWallEvent [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.