Warning
This page is located in archive.

Reversi

(autoři úlohy: Přemysl Volf, Ondřej Vaněk)

Formulace problému

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.

Formulace úlohy

Naprogramujte hráče, který bude hrát korektně a lépe než hráči všech ostatních.

Hodnocení

  • Do 8.cvičení odezvdat alespoň korekteně hrajícího hráče ⇒ 5 bodů
  • Do 12.cvičení odezvdat nejlépe hrajícího hráče. Automaticky se sehraje turnaj všech naimplementovaných hráčů metodou všichni proti všem. Počet získaných bodů bude záviset na umístění vašeho hráče v celkovém turnaji. Za korektně naimplementovaného hráče, který hraje alespoň o trochu lépe než dummyPlayer získáte 5 bodů, zbytek bodů bude rovnoměrně rozdělen podle umístění. ⇒ max. 20 bodů
  • Pozor! Maximální doba jednoho tahu nesmí přesáhnout 2 vteřiny na stroji s AMD Athlon™ 64 Processor 3200+. Pokud je doba přesažena, hráč automaticky prohrává turnaj.

Odevzdání

  • Odevzdávejte prosím pouze jeden .java soubor (UsernamePlayer.java). Pokud potřebujete více tříd, vytvořte tyto třídy jako vnitřní.
  • Soubor nahrajte do Upload systému.

Instrukce pro úlohu Reversi

  1. Vytvořit ve vašem oblíbeném IDE projekt Reversi
  2. Přidat k projektu závislost na reversi.jar (reversi.jar získám tak, že rozbalím reversi.jar.zip)
    1. Zadejte dotaz na Google “How to add jar in $$$”, kde místo $$$ doplňte název Vašeho oblíbeného IDE (NetBeans, Eclipse, Intellij Idea, …)
    2. Následujte odkazy na Google
  3. Vytvořit balík (package) cz.cvut.agents.rph.reversi.players
  4. V tomto balíku vytvořte třídu s názvem 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ží!)
    1. Tato třída musí dědit od třídy ReversiPlayer
    2. Dále musí implementovat tyto metody:
      1. getName(), která vrátí Vaše uživatelské jméno
      2. 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.
      3. volitelně můžete přetížit i metodu init(…) pro vlastní inicializaci hráče.
  5. JavaDoc dokumentace pro knihovnu reversi.jar dostupná ZDE
    1. Pro návod jak ve Vašem oblíbeném IDE k JAR knihovně připojit její Javadoc dokumentaci použijte Google
    2. Zdrojový kód ke knihovně reversi.jar bude dodán po odevzdání hráče schopného hrát korektní tahy
  6. Spuštění jedné Reversi hry provedete spuštěním třídy cz.cvut.agents.rph.reversi.main.ReversiCreator
    1. Při spuštění máte možnost nadefinovat, kteři hráči spolu budou hrát. Hráče předáte přes argumenty metody main(args) jako názvy třídy.
    2. Jako testovacího oponenta můžete použít hráče DummyPlayer, t.j. hráče, který hraje náhodné validní tahy.
    3. Tj. náš hypotetický student novakja1 by třídu ReversiCreator spustil s parametry cz.cvut.agents.rph.reversi.players.PlayerNovakja1 cz.cvut.agents.rph.reversi.players.DummyPlayer

Tips & Tricks

Č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

Zdrojový kód frameworku je k dispozici ZDE.

Odkazy

courses/a7b33tin/reversi.txt · Last modified: 2013/10/04 13:02 (external edit)