====== Reversi II ====== [[courses:b4b33rph:internal:cviceni:program_po_tydnech:tyden_06|Učitelská verze stránky]] ===== Výsledky učení ===== Po tomto cvičení student * má implementovaného základního hráče Reversi, který umí hrát validní tahy (nebo má jasný plán, jak jej implementovat); * umí použít dodané Reversi GUI a zahrát si hru proti svému hráči nebo nechat hrát dva hráče proti sobě; * pracuje s 2D maticí v Pythonu s větší jistotou: umí např. implementovat Game of Life. ===== Program ===== * Dotazy a odpovědi * Hádanka * Diskuze Reversi, cvičný upload korektně hrajícího hráče * Programovací úlohy ===== Diskuse řešení DÚ: region_size ===== * Zvládli jste vyřešit DÚ? * Zvládli jste ho vyřešit bez několikanásobného opakování prakticky stejného kódu? * Jak řešení dekomponovat na jednotlivé směry? ===== Hádanka ===== Zadání hádanky se dozvíte na cvičení. ===== Diskuse Reversi ===== * Formulace a implementace funkce hodnotící proveditelnost tahu. * Jaké jsou základní strategie? * Jaká jsou důležitá pole? * Jaké vlastnosti by měla mít má strategie (krom toho, že každého vždy porazí)? ===== Programovací úlohy: Game of Life ===== V dnešním cvičení budete mít za úkol naimplementovat jednoduchou hru s názvem Game of Life (Hra života), viz [[https://cs.wikipedia.org/wiki/Hra_%C5%BEivota|wikipedia]] nebo [[https://www.youtube.com/watch?v=Kk2MH9O4pXY|dokument na YouTube]]. Jedná se o jednoduchý dvourozměrný celulární automat s těmito čtyřmi pravidly: - každá živá buňka s méně než dvěma živými sousedy zemře, - každá živá buňka se dvěma nebo třemi živými sousedy zůstává žít, - každá živá buňka s více než třemi živými sousedy zemře, - každá mrtvá buňka s právě třemi živými sousedy oživne. Začněte stažením neúplného programu {{:courses:b4b33rph:cviceni:program_po_tydnech:game_of_life.py|Game of Life}}. Nejdůležitějším atributem třídy ''GameOfLife'' je ''self.population'', který obsahuje stav aktuální generace ve 2D seznamu. Živá buňka má hodnotu 1 a mrtvá buňka hodnotu 0. Doimplementujte následující dvě metody třídy ''GameOfLife'': * ''num_life_around(self, r, c)'' - určí počet živých buňek v okolí buňky na pozici ''r''-tého řádku a ''c''-tého sloupce. * ''life(self)'' - vytvoří novou generaci pomocí výše uvedených čtyř pravidel a uloží ji do ''self.population''. Všimněte si že je v této metodě dobré využít předem implementovanou metodu ''num_life_around''. ([[https://www.youtube.com/watch?v=Kk2MH9O4pXY|Dokument o Game of Life]]) ===== Domácí úkol ===== ==== Odevzdání ==== Nadcházející neděli do 23:59:59 je třeba odevzdat první verzi hráče Reversi s korektním pokládáním kamene. [[courses:b4b33rph:cviceni:reversi:specifikace|specifikace]] Pokud vám něco není jasné, váš triviální hráč není schopen hrát, je nejvyšší čas to řešit. ==== Příprava na další cvičení ==== Přečtěte zbytek vašeho vybraného Python tutorialu. Nemusíte úplně rozumět všemu, ani si pamatovat vše zpaměti. Měli byste mít natrénován postup jak si dohledat potřebné informace, mít natrénovanu práci s např. [[http://docs.python.org/py3k/tutorial/index.html|Python 3 tutoriálem]], nebo jiným podobným zdrojem veškeré moudrosti ;-) /*Na příštím cvičení budeme využívat následující věci:*/ > {{section>courses:b4b33rph:cviceni:spam:krok1#priprava&noheader}}