pátek 20. února 2015

Rébus s hledáním min

Chystám se naučit se programovat aplikace pro android. Moje první aplikace by měla být jednoduchá a zároveň i k něčemu. Napadlo mě proto udělat něco jako Minesweeper, ale ne jako hru, protože těch jsou stovky a hra je to celkem jednoduchá. Minesweeper, podobně jako šachy, lze hrát i jako rébus. Dostanete herní plochu s několika označenými čísly a úkol je zakreslit miny tak, aby čísla seděla. Žádná další políčka hráč nemůže odkrýt (může si je nějak označit, ale, zda je tam mina nebo kolik jich je v okolí, se už nedoví). Je to o dost zábavnější než prosté hledání min a existují zadání, které dají opravdu zabrat.

Aplikace a její logika bude příjemně jednoduchá, ale automaticky vygenerovat náhodnou hru s jednoznačným řešením a zároveň s dostatečnou složitostí je tvrdý oříšek. Zatím si s ním nevím zcela rady. Napsal jsem program, který řeší úlohu tak, jak by ji řešil člověk. To mi dovoluje změřit složitost. Program zároveň dokáže, zda má úloha právě jedno řešení. Pomocí tohoto programu lze v náhodně vygenerované hře postupně odkrývat políčka tak dlouho, až má hra jednoznačné řešení. Dostatečnou složitost však takto zaručit nelze. Náhodně vygenerované hry mívají složitost poměrně nízkou, i když generátoru pomáhám různými heuristikami. Krom toho vše trvá nesmírně dlouho a generování musí být provedeno předem na slušném počítači, protože na mobilním zařízení by byla brzy vyčerpána buď trpělivost uživatele, anebo baterie.

Následují ukázky vygenerovaných her. Jsou dost jednoduché a složitostí mnoho nepřesahují obvyklé nerébusové hraní minesweeperu. Poslední hra není bohužel ode mne. Tak by to mělo vypadat. Složitost je slušná a hra mi dala docela zabrat. Zatímco moje hry mají složitost 2, tahle má složitost 4.
| ? ? 1 2 ? ? ? ? 1 1 |
| ? 0 1 ? ? ? 1 ? ? 2 |
| ? ? ? ? ? 3 2 ? ? ? |
| 2 ? ? ? 2 3 ? 1 ? 1 |
| 3 ? 2 ? 1 ? ? ? 1 ? |
| ? ? 2 ? ? ? ? ? ? 1 |
| ? 4 3 ? ? 1 1 1 ? ? |
| ? ? 4 ? 4 ? ? ? ? 2 |
| ? 4 ? ? 4 2 ? ? 2 ? |
| 2 ? 2 ? ? ? ? ? ? 2 |


| 2 ? 3 ? ? 0 ? ? ? ? |
| 2 ? 4 ? ? ? ? ? 0 ? |
| ? ? 3 ? ? 2 1 ? ? ? |
| 3 ? 4 ? ? 2 ? ? 1 1 |
| ? ? 3 ? ? 2 2 ? ? 3 |
| ? ? ? ? ? ? 2 ? ? ? |
| 2 2 ? 3 ? ? ? ? ? 2 |
| ? 3 1 3 ? 5 ? 1 ? ? |
| ? ? ? ? ? ? ? ? 2 1 |
| 2 ? 1 ? 1 ? 1 ? ? 1 |


| 0 ? ? ? 1 ? ? 2 3 ? |
| ? 2 ? ? 3 ? 2 2 ? ? |
| 1 ? 5 ? 4 ? ? ? ? ? |
| 2 ? ? ? 4 ? ? 0 ? 1 |
| ? 3 3 ? ? 2 ? ? ? ? |
| ? 2 ? ? 2 1 ? ? 3 2 |
| ? 2 3 ? 1 ? 1 2 ? 2 |
| ? ? ? ? ? ? ? ? ? ? |
| ? 3 2 2 1 3 ? ? ? ? |
| 1 ? ? 1 1 ? ? 3 ? 0 |


| 1 ? 0 ? ? 1 ? ? 2 ? |
| ? ? ? 2 ? ? 1 ? ? ? |
| ? ? ? ? 1 1 ? 1 2 ? |
| 2 ? 3 ? 1 ? 1 ? 2 ? |
| 2 ? 2 ? ? ? 3 3 ? ? |
| ? ? ? ? 2 ? ? ? ? 2 |
| 3 ? ? ? ? 3 ? ? 3 ? |
| 3 4 ? 3 ? ? 2 ? 3 ? |
| ? ? ? 3 ? ? ? ? 3 ? |
| 3 ? ? 1 ? 1 ? ? 1 ? |

Žádné komentáře: