Hlavní navigace

Robocode - Java hrou

Martin Švihla 15. 12. 2003

Build the best. Destroy the rest. Naprogramujte robota. Vypustite ho do arény. Len na vašom programátorskom umení záleží, či sa ešte vráti. Do boja po vašom boku vyráža dedičnosť a polymorfizmus, chrbát vám budú kryť udalostne orientované programovanie s princípmi distribuovaného výpočtu.

Robocode je simulátor tankovej bitky od IBM, ktorý má za úlohu naučiť vás základy programovania v jazyku Java. Na prvý pohľad je zrejmé, že autori zvolili zábavnú formu. Na druhý pohľad uvidíte, že by to mohlo byť vážne. Ale nepredbiehajme.

Inštalácia

Na to, aby ste sa mohli s Robocode zabávať, potrebujete počítač s ekvivalentom PII-400, 64MB RAM a 10MB diskového priestoru. A samozrejme systém, na ktorom pobeží Java(TM:)2 v1.3+, alebo radšej v1.4+.

Inštalácia je veľmi dobre vymyslená. Sprievodca inštaláciou na stránkach Robocode vás prevedie podľa vášho operačného systému a nainštalovanej verzie Java všetkými krokmi inštalácie.

Pre Linux je to triviálna záležitosť (predpokladám to isté na iných platformách, ale neskúšal som). Ak náhodou ešte nemáte nainštalovanú Javu, nájdete ju tu. Potom stiahnete inštalačný balík a spustíte ho príkazom  java -jar robocode-setup.jar.

Po zadaní cieľového adresára sa aplikácia rozbalí a vy ju môžete spustiť. ./robocode.sh

Čo to vlastne je?

Robocode je kompletné IDE, ktoré obsahuje všetko, čo budete potrebovať na vytváranie a ničenie robotov. Pozitívne je, že IDE neobsahuje nič, čo potrebovať nebudete a tak začínajúcich algoritmizátorov nebudú miasť zbytočnosti. Súčasťou aplikácie je editor na písanie programov robotov, kompiler (Jikes), kompletné Robocode API vo forme Javadoc a samozrejme aréna, v ktorej sa súboje odohrávajú. Celá aplikácia je napísaná v Jave (Jikes samozrejme nie:), pre GUI je použité AWT a Java2D.

Robocode IDE

Ako to funguje?

Robot, ktorého budete písaním Java kódu pripravovať na vojnové peklo, sa skladá z podvozku, kanónu a radaru. Každú z týchto častí môžete nezávisle na ostatných otáčať. Okrem toho máte k dispozícii metódy na pohyb ( void ahead(double distance)…), na zistenie stavu robota ( double getX(), double getEnergy()…) a samozrejme na streľbu ( void fire(double power)…).

Reakcie robota na okolie ošetrujete pomocou udalostí, príkladom môžu byť ScannedRobotEvent, HitByBulletEvent alebo HitRobotEvent.

Na písanie programu robota používate normálne konštrukcie jazyka Java, na jeho ovládanie slúži vyššie spomínané Robocode API.

Kód jednoduchého robota potom vyzerá takto:

package man;
import robocode.*;

public class MyFirstRobot extends Robot {
  public void run() {
    while (true) {
      ahead(100);
      turnGunRight(360);
      back(100);
      turnGunRight(360);
    }
  }
    public void onScannedRobot(ScannedRobotEvent e) {
    fire(1);
  }
} 

Samozrejme, takýto nezmysel v aréne dlho nevydrží. Postupom času sa však naučíte, ako používať základné API, kód robota sa začne rozrastať a vy ho budete deliť do samostatných tried a tie skladať do jar balíkov.

A keď vám prestane stačiť jednoduchá trieda Robot, môžete skúsiť programovanie s jej potomkom AdvancedRobot, ktorý umožňuje asynchrónne volania API.

Princípy, pravidlá, taktika

Každý robot beží vo vlastnom vlákne. Správca arény prideľuje každému robotovi toľko „strojového“ času, aby stihol vykonať aj zložitejšie výpočty. Robot teda vykonáva príkazy v metóde run() a jeho vlákno zaspí, až keď robot zavolá funkciu z Robocode API, prípadne po uplynutí maximálneho povoleného časového intervalu (ktorý je tam zrejme pre prípad nekonečných cyklov:).

Keď všetci roboti vykonajú svoje výpočty a vybavia udalosti čakajúce v zásobníku udalostí, scéna sa prekreslí a boj pokračuje ďalším kolom.

Stratégia vyplýva z pravidiel v aréne. Keď vystrelíte, uberie to robotovi takú energiu, akú ste použili na výstrel. Ak trafíte, protivníkovi sa energia uberie a vášmu robotovi sa znovu pridá. Zrážky s ostatnými robotmi a so stenami rovnako uberajú energiu.

Takže akú taktiku by ste zvolili? Je možné posúvať sa popri stenách, skrývať sa v rohoch, stopovať protivníkov. Ak máte viac energie ako súper, môžete agresívne útočiť a v opačnom prípade sa zbabelo vyhýbať boju.

Tímová práca

Ak majstrovsky zvládnete boj robota proti robotovi, prečo neskúsiť veliť celej armáde. Robocode ponúka možnosť vytvárať skupiny spolupracujúcich robotov. K tomu je vytvorená trieda TeamRobot. Jej rozšírením získate rôznych členov tímu, ktorí si môžu medzi sebou vymieňať správy vami vytvoreným komunikačným protokolom.

Príkladom robota-špecialistu je napríklad Druid (implementujeme rozhranie Druid), ktorý nemá radar (je odkázaný na správy od iných robotov), ale má viac energie.

Aké poučenie z toho plynie?

Robocode vyzerá spočiatku ako nevinná zábavka. Začínajúci programátori sa pomocou neho môžu naučiť volať knižničné metódy, čítať Javadoc, pracovať s udalosťami a používať základné koncepty objektového programovania (dedičnosť a polymorfizmus).

No roboti vás nenechajú pri zemi. Časom od vás budú chcieť, aby ste zvládli zložitejšie postupy návrhu algoritmov, znovupoužívali kód. Na poriadnu orientáciu v priestore či streľbu sa budete musieť potrápiť s trigonometrickými výpočtami. Komunikácia medzi členmi tímu vás privedie k princípom distribuovaných systémov.

Pri troche hlbšieho záujmu sa z tejto jednoduchej hry múže stať veľmi účinný pedagogický nástroj.

Robocode teda nie je nevinná zábavka. Je to skutočná zábava.

Poznámka na okraj

Robocode je pôvodne súkromná aktivita jedného z programátorov IMB, Mata Nelsona. Program bol vydaný vo februári 2001 a zakrátko si získal neočakávanú popularitu, takže od IBM to teraz vyzerá ako skvelý marketingový ťah:). Vo svete sa organizujú ligy a turnaje, fanúšikovia sa združujú okolo diskusných fór a webových databáz robotov.

V súčastnosti je k dispozícii príjemne stabilná verzia 1.0.6; viac informácií o tomto virtuálnom svete nájdete na nižšie uvedených linkách.

To je zatiaľ všetko, podrobnejšie sa na niektoré výukové aspekty Robocode pozrieme v pokračovaní tohto článku.

Linky

Domáca stránka Robocode
Databáza robotov
Zoznam ďalších odkazov

Našli jste v článku chybu?

17. 12. 2003 18:32

sss (neregistrovaný)

na sunu si muzete stahnout zdrojaky JVM a specifikace jsou dostupne - ten clovek mluvil fakticke nesmysly

17. 12. 2003 18:30

sss (neregistrovaný)

mno to je jen tim ,ze i ti nejchytrejsi ,kteri jsou dodavani s tou hrou jsou dost blbi - ja jsem si postavil toho co prezije bitvu se kterymkoliv ze dodavane sady po 3 dnech - stahnete si boty z internetu - to uz je jine kafe. a to jsem ani nemluvil o tech co jsou vytvareni pomoci AI....

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Lupa.cz: Seznam mění vedení. Pavel Zima v čele končí

Seznam mění vedení. Pavel Zima v čele končí

Podnikatel.cz: Babiše přesvědčila 89letá podnikatelka?!

Babiše přesvědčila 89letá podnikatelka?!

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

Měšec.cz: Jak levně odeslat balík přímo z domu?

Jak levně odeslat balík přímo z domu?

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

DigiZone.cz: ČRa DVB-T2 ověřeno: Hisense a Sencor

ČRa DVB-T2 ověřeno: Hisense a Sencor

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Vitalia.cz: Dáte si jahody s plísní?

Dáte si jahody s plísní?

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky