====== 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. ===== ZIP archiv s podpůrnými kódy ===== Stáhněte si {{ :courses:b3b33kui:cviceni:reversi:reversi_2023l.zip |}} ZIP obsahuje soubory implementující prostředí, ve kterém se bude hrát. Pro zahrání samotné hry jsou k dispozici dvě prostředí: grafické ''reversi_creator.py'', nebo terminálové ''headless_reversi_creator.py''. Modul ''player.py'' obsahuje šablonu vašeho hráče (viz níže). Podrobnosti k těmto souborům najdete v README. ===== 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 ''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ů.| | ''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ě ''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 z ''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.