====== Specifikace ======
Podrobná specifikace toho, co musí agent umět a jak musí vypadat, aby mohl být otestován automatickým evaluačním systémem.
===== Podpůrné kódy =====
Kódy najdete ve studentském repozitáři [[https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi|KUI Reversi]]:
- Vytvořte si někde na svém disku pracovní adresář, např. ''kui-reversi''.
- Kódy do něj můžete dostat dvěma způsoby:
* Pomocí ''git''u:
- Naklonujte si repozitář kui-reversi:
cd kui-reversi
git clone https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi.git .
Nezapomeňte na ''.'' na konci předchozího příkladu: tečka říká ''git''u, aby obsah repozitáře naklonoval do aktuálního pracovního adresáře.
* Pomocí ZIP archivu:
- Stáhněte si kódy z repozitáře [[https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi|KUI Reversi]] jako ZIP soubor (nebo si přímo stáhněte [[https://gitlab.fel.cvut.cz/kui-student-materials/kui-reversi/-/archive/master/kui-reversi-master.zip|kui-reversi-master.zip]]).
- Uvnitř staženého archivu najdete složku ''kui-reversi-master''. Extrahujte její obsah do složky ''kui-reversi''. (Ve složce ''kui-reversi'' byste neměli vidět podadresář ''kui-reversi-master''.)
V podpůrných kódech najdete:
* ''player.py'' - modul se šablonou pro vašeho hráče, a také
* grafické (''reversi_creator.py'') a terminálové (''headless_reversi_creator.py'') prostředí umožňující hru spustit a zahrát.
===== Soubor k odevzdání =====
Odevzdávat budete ZIP archiv obsahující váš modul ''player.py'' a případně další vaše moduly, které modul ''player.py'' potřebuje. **Tyto soubory musí být v kořeni archívu, archív nesmí obsahovat žádné adresáře!** Váš ZIP archív (a jen tento soubor) nahrajete do
[[https://cw.felk.cvut.cz/brute/|BRUTE]]. Se zdrojovými kódy vašeho hráče (a vašich pomocných modulů) můžete nahrát nějaké datové soubory, pokud nutně potřebujete. Ale velikost odevzdávaného ZIP archivu nesmí přesáhnout 1MB.
===== Třída MyPlayer a její metody =====
Balíček také obsahuje soubor ''player.py'' s třídou ''MyPlayer''. V ní upravte metodu ''select_move()'' tak, aby realizovala strategii vašeho hráče.
Docstring popisující třídu MyPlayer je omezen na **80 znaků**, neboť se objeví v tabulce s výsledky. Zkuste v docstringu velice stručně popsat hlavní princip vašeho hráče.
Vašeho hráče (v souboru 'player.py') implementujete ve formě třídy ''MyPlayer'' (soubor '/reversi/player.py' v archivu výše), která obsahuje tyto metody:
^ metoda ^ vstupní parametry ^ výstupní parametry ^vysvětlení ^
| ''%%__%%init%%__%%'' | ''my_color'', ''opponent_color'', ''board_size'' | //žádné// | Vytvoření hráče dané barvy s protihráčem druhé barvy. Velikost hrací plochy máte v konstruktoru pro případnou přípravu heuristických ohodnocení. |
| ''get_all_valid_moves'' | ''board''| seznam souřadnic | Metoda vrátí seznam všech korektních tahů.|
| ''select_move'' | ''board''| souřadnice | Metoda vrátí tuple souřadnic na hrací desce, kam váš hráč chce umístit hrací kámen. **Tuto metodu musíte dopsat.**|
Samozřejmě není vhodné implementovat celou strategii jen v metodě ''select_move()''. Doporučujeme zamyslet se nejprve nad dekompozicí celého problému, ve třídě ''MyPlayer'' implementovat i další metody řešící nějaké podproblémy vaší strategie a tyto metody jen ze ''select_move()'' volat.
===== Další pravidla a omezení =====
* Můžete používat svoje data, které použije konstruktor hráče. Konstruktor hráče (volá se jen 1x, na začátku partie) má limit 60 sekund, takže má dost času si vše promyslet.
* Nepoužívejte vícevláknové algoritmy, respektive, nepomůžete si tím. Virtuální stroj v AE má vyhrazeno vždy jen jedno jádro.
* Odevzdejte hráče v řádném termínu. Možná na konci semestru spustíme ještě dodatečný turnaj, pokud bude potřeba, ale nespoléhejte na to.
* Penalty za pozdní odevzdání se odpočítávají jen 1x.