Implementace

Základní systém je naprogramován v jazyce Java. Jednotlivé algoritmy budou realizovány jako implementace rozhraní "Strategy". Na této stránce je stručný popis hlavních tříd a zdrojové kódy ke stažení (včetně ukázkové strategie). Implementace poměrně úzce koresponduje se zde uvedenými (podrobnými) pravidly, jména funkcí jsou snad intuitivní.

Popis základních tříd

Třída "World"

Tato třída reprezentuje hrací plán. Poskytuje informace o hracím plánu: velikost plochy, poloha zdí, baterií, pokladů. Také umožňuje získat seznam všech hrajících robotů.

Popis vstupního formátu je uveden níže.

Třída "Robot"

Tato třída reprezentuje jednotlivého robota. Poskytuje zejména informace o poloze robota, jeho energii a počtu bodů.

Implementace strategií - rozhraní "Strategy"

Implementace vaší strategie spočívá v implementaci třídy, která implementuje rozhraní "Strategy". Jedná se zejména o funkci decide(), která na základě informací, které má k dispozici (aktuální stav hracího plánu) rozhodne o další akci svého robota.

Omezení:
  • Není povoleno používat vlákna (thread).
  • Zdrojový kód může mít maximálně 1MB.
  • Program může spotřebovávat maximálně 64MB RAM paměti (na disk nesmí zapisovat vůbec).
  • Implementace může využívat pouze standardní knihovny jazyka Java z java.util.* a java.lang.*.
  • Implementace může být rozdělena do více souborů (styl odevzdávání viz níže). Součástí vašich zdrojových kódů může být i přejatý kód (např. nějaká cizí knihovna), musí však splňovat výše uvedená omezení. Zejména musíte dodržet celkový limit 1MB.
  • Program musí odpovědět do 5 sekund. Pokud tak neučiní, robot v daném tahu nevykoná žádnou akci. Limit 5 sekund je brán jako nadsazený, vaše strategie by měly být výrazně rychlejší (tj. nemělo by rozhodovat, na jakém přesně počítači simulace běží). Pro vaši informaci se však pokusíme časem zveřejnit referenční informace o rychlosti ukázkové strategie na stroji použitém k oficiálnímu vyhodnocování.
  • Cílem soutěže je naprogramovat strategii v souladu s duchem zde uvedených pravidel a nikoliv hledat a zneužívat díry či nedostatečnou specifikaci. Organizační výbor si vymezuje právo pravidla v průběhu soutěže upřesnit a případně i vyloučit ze soutěže strategie, které budou shledány neférovými. Pokud jste na pochybách, zda je určitá věc dovolená, radši to zkonzultujte.

Grafické prostředí pro simulaci

Máte k dispozici grafické prostředí pro simulaci hry. Pomocí tohoto prostředí si můžete vyzkoušet a vyladit svoji strategii. Pro vyhodnocení soutěže bude využito stejné prostředí.

Stažení

Aktuální stabilní verze (branch/stable revize 70)

Poznámky:
  • Zatím se jedná o verzi, která se nadále vyvíjí. Jádro systému, zejména třídy World, Robot a rozhraní Strategy, by však již měli být v téměř finální podobě.
  • Dokumentace, zdrojové kódy a příklad souborů popisujících vstupní situaci jsou dostupne po rozbaleni jar xf fibot.jar (rozbali se do aktualniho adresare).
  • Spuštění simulace: napr. java -jar fibot.jar test.world test.game.
  • Repository s aktuální vývojovou verzí je na http://charon.hkfree.org/fibot/.

Stručný návod na použití

1) V pracovnim adresari vytvorim adresar cz/muni/fi/fibot/jmeno_tymu/

$ mkdir -p cz/muni/fi/fibot/jmeno_tymu/

2) V tomto adresary vytvorim soubor MyStrategy.java (samozrejme, ze se muze
jmenovat i jinak ...)

$ cd cz/muni/fi/fibot/jmeno_tymu/
$ touch MyStrategy.java

a do tohoto souboru vlozim

package cz.muni.fi.fibot.jmeno_tymu;

import cz.muni.fi.fibot.Robot;
import cz.muni.fi.fibot.Strategy;
import cz.muni.fi.fibot.World;

public class MyStrategy implements Strategy {

private World world;
private Robot robot;

public MyStrategy() {
}

public void setWorld(World w) {
this.world = w;
}

public void setRobot(Robot r) {
this.robot = r;
}

public Strategy.BotAction decide() {
return null;
}

}

3) Upravim si metodu decide(), ktera bude vracet, co vlastne bude robot
delat. Prehled o tom jak jsem na tom (tzn. kolik mam energie, kolik bodu,
...) je v objektu robot a to jak vypada svet je v objektu world (jak jsou
na tom ostatni, co je na ktere pozici, kolik ma ktery poklad bodu a pod.)

4) zkompiluji
- stahnu si ze SVN repository build-user.xml a build-strategy.xml, ktery
prejmenuji na build.xml
- a pote

$ ant build

5) upravim parametry hry
- stahnu si a nebo vytvorim .world a .game soubor.
- .world soubor bude obsahovat popis sveta, parametry hry atd.
- prvni radek obsahuje parametry, ktere mohou byt zapsany v libovolnem
poradi
- x - x-ova velikost sveta
- y - y-ova velikost sveta
- p - pocet robot ve hre
- m - maximalni energie
- r - odpocivaci energie
- k - pocet kol
priklad: 30X31Y5P10M5R100K
- dalsi radek obsahuje seznam hodnot pokladu oddelenych carkami
priklad: 1,2,3
- dalsi radky obsahuji vlastni popis mapy sveta - jsou pouzity znaky
- # - zed
- u,d,l,r - robot nejak natoceny (u - up, d - down, l - left, r -
right)
- g - poklad
- b - baterka
- . - prazdne misto
- priklad:
######
#.....
.u.d..
..g...
..##b.

- .game soubor obsahuje seznam strategii, ktere se zucastni teto hry
- priklad:

cz.muni.fi.jmeno_tymu.MyStrategy
cz.muni.fi.jmeno_tymu.MyStrategy
cz.muni.fi.jmeno_jineho_tymu.MyStrategy

6) spustim

$ ant run

Chyby, náměty, ...

Autorem implementace je Jiří Syrový (xsyrovy). V případě nejasností týkajících se implementačních záležitostí, posílejte dotazy přímo jemu (+ kopii garantovi soutěže (xpelanek)).