(autoři úlohy: Přemysl Volf, Ondřej Vaněk)
Mějme čtvercovou hrací plochu N x N čtvercových políček. Hrací plocha je ohraničená a hrany hrací plochy spolu nesousedí. Máme hrací kameny dvou barev. Na začátku hry máme ve středu hrací plochy umístěny dva kameny od každé barvy. Hráč, který je na tahu položí na hrací plochu kámen své barvy tak, aby uzavřel souvislou řadu soupeřových kamenů. Tyto kameny se potom stanou kameny hráče na tahu. To je možné provádět vodorovně, svisle a šikmo. Pokud hráč nemůže umístit kámen tak, aby soupeři zabral alespoň jeden kámen, hraje automaticky soupeř. Cílem hry je mít více hracích kamenů než soupeř. Hra končí v okamžiku, kdy je celá hrací plocha zaplněna kameny nebo pokud žádný hráč nemůže položit svůj kámen.
Naprogramujte hráče, který bude hrát korektně a lépe než hráči všech ostatních.
Reversi
cz.cvut.agents.rph.reversi.players
PlayerXxxxxxxx
, kde místo Xxxxxxxx
doplníte Vaše uživatelské jméno, tedy např. student s uživatelským jménem novakja1 pojmenuje svého hráče PlayerNovakja1
(Na velikosti písmen záleží!)
ReversiPlayer
getName()
, která vrátí Vaše uživatelské jméno
makeNextMove(int[][] board)
, která pro daný stav hry (definovaný v proměnné board) vrátí tah obalený třídou ReversiMove
. Pro zjištění Vaší barvy použijte metodu getMyColor()
implementovanou ve tříde ReversiPlayer
.
init(…)
pro vlastní inicializaci hráče.
cz.cvut.agents.rph.reversi.main.ReversiCreator
cz.cvut.agents.rph.reversi.players.PlayerNovakja1 cz.cvut.agents.rph.reversi.players.DummyPlayer
Časový limit, kterým omezujeme délku “přemýšlení” Vašeho hráče si můžete nastavit pomocí parametru timeout. Tento parametr nastavíte pomocí přepínače --timeout=XXX u třídy ReversiCreator
, kde XXX udává maximální dobu v milisekundách, kterou může Váš hráč strávit v metodě makeNextMove()
. Při lazení může být užitečné nastavit tento parametr na vysokou hodnotu, tj. třídu ReversiCreator
spustíte např. s parametry cz.cvut.agents.rph.reversi.players.PlayerNovakja1 cz.cvut.agents.rph.reversi.players.DummyPlayer --timeout=99000000
.
Zdrojový kód frameworku je k dispozici ZDE.