5. velký domácí úkol Měkký deadline: 16. 12. 23:59 Tvrdý deadline: 23. 12. 23:59 Drogové kartely spolu soupeří o nadvládu nad Brnem. Každý z kartelů se snaží vydělat prodejem drog co nejvíce peněz a vysílá do ulic své dealery. Nic nezvedne drogovému baronovi žluč víc, než když se dealer vrátí s nepořízenou, protože v jeho lokalitě féťáci nakoupili zboží od dealera nepřátelského klanu; aby tomu zabránil, snaží se na nepřátelské dealery poštvat policii. V tomto úkolu implementujete hru, ve které se spolu utkají baroni znepřátelených kartelů, Hra probíhá na dvourozměrném plánu a hraje proti sobě libovolný počet baronů, nejméně však jeden. Baroni se postupně střídají a v každém tahu mohou do města umístit buď svého dealera, nebo poslat policii anonymní udání místa, na kterém prodává drogy nepřátelský dealer. Hraje se tak dlouho, dokud jeden z baronů nevydělá určité množství peněz, nebo dokud nejsou všechna pole plánu obsazená buď dealery, nebo policisty; potom vyhrává baron, který doteď vydělal nejvíce peněz. V každém tahu může baron na libovolné volné místo na plánu umístit buď svého dealera, nebo policejního strážníka. Dealer prodává drogy na devíti políčcích ve svém okolí a vydělává svému klanu peníze, strážník hledá dealery na všech políčcích na kříži vodorovné a svoslé osy, v jehož středu stojí, každému dealerovi, kterého objeví, udělí pokutu, a tím klan o peníze připraví. Pokud na jednom políčku prodává drogy více dealerů, každý vydělá stejný podíl z celkové hodnoty políčka. Je na vás, kolik peněz půjde z jednoho políčka vydělat, jak vysoké bude strážník udílet pokuty, a kolik peněz bude potřeba k vítězství. Hodnota políček a výška pokud je pevně daná. Na začátku uživatel zadá počet hráčů, velikost herního plánu (může být i obdélníkový), a u každého hráče specifikuje značku, kterou používají jeho dealeři, a jestli jej ovládá člověk, nebo počítač. Člověk tahy zadává ručně, počítač volí tahy jednou ze tří strategií. Výchozí strategie počítače je pevně daná, uživatel nemůže strategii zvolit bez zásahu do kódu, očekává se ale, že změny půjde dosáhnout přepsáním hodnoty jediné globální konstanty. V první strategie táhne počítač na první volné políčko, které objeví, ve druhé na náhodné volné políčko. Ve třetí spočítá pro všechna políčka zisk a vybere to nejvýhodnější. Pokud úkol odevzdáte do měkkého deadlinu, nebudete muset třetí strategii implementovat, v opačném případě bude pro zisk plného počtu bodů implementace třetí strategie nezbytná. Při načítání vstupu kontrolujte, jestli uživatel zadal správnou hodnotu, pokud ne, výzvu k zadání hodnoty opakujte. Volba konstant, které budete používat, je na vás, formát výzev a výpisu plánu také. Rady, kterými se můžete a nemusíte řídit: Pro reprezentaci herního plánu použijte 2d pole trojic – vlastník políčka; počet dealerů, který zde prodává; počet strážníků, který zde hlídkuje. Pro reprezentaci hráčů použijte seznam trojic – znak hráčových dealerů; informace, zda je hráč kontrolován člověkem, nebo počítačem; hráčův výdělek. Počty dealerů a strážníků přepočítávejte v každém tahu jen na ovlivněných místech, celkový zisk počítejte vždy ze všech políček. Jeden tah reprezentujte funkcí, kterou si předáte jako hodnotu, tak budete moct snadno přepínat mezi různými strategiemi počítače. Do seznamu hráčů si na první pozici uložte trojici neexistujícího hráče – strážníka; usnadní vám to výpis plánu a nebudete muset hráče indexovat od nuly.