Domácí úkol 5 Počet bodů za úlohu: 40 Termín: 7.12.2022, 23:59 Zadání: Hra Blokování Pravidla hry: ● Hra se hraje na čtverečkovaném plánu obdélníkových rozměrů. ● Na začátku hry je plán volný. Hráči se střídají. Ve svém tahu hráč zahraje na některé z volných polí, tímto se toto pole a všechny sousední pole (i diagonálně) stanou zablokovanými. ● Hráč, který nemůže hrát, prohrál. Ilustrace hry a možnost zahrát si zde: http://www.papg.com/show?2XMX Úkol: Implementujte jak hru člověka proti počítači, tak hru dvou počítačových strategií proti sobě. Implementujte minimálně jednu, pro plný bodový zisk tři různé počítačové strategie: ● Náhodná strategie. Hraje na náhodně zvolené prázdné pole. ● Maximálně blokující strategie. Hraje na takové pole, které zablokuje co nejvíce ostatních polí. ● Inteligentní zakončovač. Pokud má k dispozici tah, kterým zablokuje všechna zbývající pole (a tudíž vyhraje), tak tento tah zvolí, jinak hraje náhodně. ● Bonus: Lichý chytrouš. Na plánech, kde výška i šířka jsou lichá čísla a kde začíná, vždy vítězí, protože hraje optimální výherní strategii („hrát doprostřed a pak symetricky“). Na ostatních plánech hraje náhodně. Bonus 2: Analyzujte pro různé velikosti herního plánu, jestli má výhodu první, nebo druhý hráč. Tuto analýzu proveďte pro souboje různých strategií. Analýzu neprovádějte „ručně“, ale programem (funkce, která systematicky vyhodnotí opakovaná zápasy na plánech různé velikosti). Rady: Rada 1: Otestujte si, že program korektně funguje na obdélníkových plánech. Častá chyba u podobných úloh je, že testování proběhne pouze na čtvercových plánech. Rada 2: V Pythonu můžete předávat jako parametr i jméno funkce. Můžeme tedy mít: def play_game(width, height, strategy1, strategy2): … kterou následně voláme například: play_game(6, 4, strategy_random, strategy_maxblock) kde strategy_random, strategy_maxblock jsou jména funkcí implementujících strategie. Ještě lépe pak můžeme mít def play_game(width, height, strategies) kde strategies je dvojice (či dvojprvkový seznam) strategií. Tyto aspekty Pythonu však není nezbytné používat, úlohu lze řešit i jinými způsoby. Rada 3: Pro náhodnou strategii se mohou hodit další funkce z knihovny random ( https://docs.python.org/3/library/random.html), konkrétně třeba shuffle. Příklad výstupu: Player 1 moves Move: 1 1 X*.... **.... ...... ...... Player 2 moves Move: 2 3 X*.... ***... *O*... ***... Player 1 moves Move: 6 3 X*.... ***.** *O*.*X ***.** Player 2 moves Move: 4 1 X**O*. ****** *O*.*X ***.** Player 1 moves Move: 6 1 X**O*X ****** *O*.*X ***.** Player 2 moves Move: 4 3 X**O*X ****** *O*O*X ****** Player 2 wins.