====== 2. Reversi ====== Vaším cílem bude naprogramovat hráče hry [[https://en.wikipedia.org/wiki/Reversi | Reversi]]. Hru si můžete ozkoušet např. [[http://www.superhry.cz/hra/13494-reversi |zde]]. ====== Problém ====== Reversi je hra na čtvercových hracích polích s hrací deskou o rozměru $n\times n$. Každý hráč má sadu hracích kamenů jedné barvy. Na počátku hry jsou ve středu umístěny dva kameny každé barvy umístěné do plochy 2 x 2 diagonálně. Hráč ve svém tahu umístí jeden kámen na prázdné pole, aby uzavřel souvislou (i jednoprvkovou) řadu kamenů soupeře mezi své kameny. Každá tahem uzavřená řada změní svou barvu. Uzavřít řadu lze ve všech osmi sousedních směrech. Pokud hráč nemůže umístit kámen, kterým by uzavřel nějakou soupeřovu řadu, je na tahu soupeř. Hra končí v okamžiku, kdy je celá hrací plocha zaplněna kameny nebo když žádný hráč nemůže položit kámen uzavírající soupeřovu řadu. Vítězí hráč s nejvíce kameny na hrací ploše. ====== Cíle ====== Touto úlohou se blíže seznámíte s: * Prohledáváním stavového prostoru s oponentem * Problém kombinatorické exploze * Zohlednění efektivity prohledávacích algoritmů Řešení této úlohy lze zobecnit na mnohé podobné klasické hry, i když v některých případech (např. [[https://en.wikipedia.org/wiki/Computer_Go|Go]]) může být nedostačující na porážku dostatečně dobrého lidského soupeře. ====== Úkol: Turnajový hráč ====== Pokusíte se napsat hráče, který se utká s hráči vašich spolužáků. Viz [[.:specifikace|specifikace]] a [[.:hodnoceni|hodnocení]]. Termín odevzdání úlohy je v [[https://cw.felk.cvut.cz/brute/|BRUTE]]. Základní informace o turnaji: * hraje se systémem každý s každým na hracím poli o velikosti $n\times n$, $n \in \{6,8,10\}$ * zápas se skládá ze dvou setů - v prvním začíná hráč "A", v druhém začíná hráč "B" * za vítězství v zápase 2 body, remíza 1 bod, prohra 0 bodů * limit 60s na konstruktor * limit 5s na 1 tah (metoda ''move'') * zahrání neplatného tahu znamená ztrátu zápasu * překročení časového limitu znamená ztrátu zápasu ===== Odkazy ===== * zkuste si zahrát on-line [[https://cardgames.io/reversi/|]], nebo [[http://www.superhry.cz/hra/13494-reversi|]] * zahrajte si proti jiným [[http://www.flyordie.com/reversi/|hráčům]] * pozor, hry nemusí mít stejná pravidla jako ta specifikovaná ve formulaci problému