Zadání třetí domácí úlohy (skupina 23) ====================================== Poznámky k vypracování: ----------------------- Řešení domácí úlohy odevzdejte jako soubor du03.py do příslušné odevzdávárny v ISu. Řešení musí být běhuschopná v jazyce Python verze 3. Soustřeďte se na vhodné členění kódu a smysluplné anglické komentáře důležitých částí kódu. Zejména se vyhněte zbytečnému duplikování kódu. Zadání: ------- Hlavním cílem je vytvořit simulátor hry Lodě, který bude možné používat v režimu počítač-člověk i režimu počítač-počítač s možností analyzovat délku průměrné partie a zobrazení průběhu partie. Řiďte se těmito pokyny 1. Hrací pole reprezentujte jako seznam seznamů o velikosti n x n (pro n >= 10). Při výpisu hracího plánu řádky označte písmeny od "a" (horní řádek) a sloupce od "1" (levý sloupec) 2. Počítač na hracím plánu náhodně umístí jendu loď délky 4, dvě lodi délky 3, tři lodi délky 2 a jednu loď délky 1 a to tak, aby se lodi nepřekrývaly ani nedotýkaly. Dotýkat se nesmí vertikálně, horizontálně ani diagonálně. 3. V režimu počítač-člověk počítač náhodně umístí lodě na hrací plán dle bodu 2 a člověk postupně hádá umístění lodě. Po zadání korektního vstupu (je třeba se ptát tak dlouho, dokud hráč nezadá validní řetězec nějakého políčka plánu) počítač oznámí buď Hit nebo Miss, podle toho, zda se hráč trefil nebo ne a zobrazí na obrazovce aktuální stav partie. "X" označuje zásah lodi (Hit), "." označuje zásah vody (Miss) a "?" zatím neprozkoumané políčko. Hra s ukončí ve chvíli, kdy člověk zasáhne všechny lodě. 4. V režimu počítač-počítač nehádá polohu lodí člověk, ale počítač. Přitom musí "projevovat" alespoň základní inteligenci, tj. nehádat znovu stejná políčka, nehádat políčka diagonálně sousedící s částí lodě, apod. Průběh této partie musí být možné zobrazit (vypsat na obrazovku). 5. Proveďte jednoduchou simulaci počítač-počítač a zjistěte průmeřný počet tahů, které vámi naprogramovaná strategie vyžaduje k nalezení všech lodí. Při opakovaném spouštění simulace se průběh partií nevypisuje a vypíše se až výsledek Doporučení: ----------- Hlavní funkci pro spuštění hry pojmenujte play_game(n, output, human), kde n je velikost plánu, output indikuje, zda se má průběh hry vypisovat a human indikuje, zda pozice má hádat počítač nebo člověk. Pokud bude nastaveno human na True tak na začátku funkce nastavte na True i output (bez výpisu hra počítač-člověk nemá moc smysl). Funkci pro analýzu počtu tahů pojmenujte analyze_game(num_iter, n), kde n je počet simulovaných her a n velikost plánu Příklad výstupu naleznete v souboru du3_output.txt pro hru počítač-člověk a souboru du3_output_pc.txt pro hru počítač-počítač včetně výsledku analýzy na základě 1000 her.