Semestrální práce z předmětu A6M33AST Závěrečná zpráva Hledání správné cesty Nela Grimová, Lenka Houdková 2015/2016 1. Zadání Naším úkolem bylo vytvoření úlohy Hledání cesty, kterou by bylo možné použít pro podpornou léčbu dětí s autismem nebo strabismem (viz Malá zpráva), která by byla součástí již existujícího prostředí pro rehabilitační hry. V tomto textu nejdříve popíšeme, jak úloha vypadá a jaké je její ovládání, v další části vysvětlíme, jakým způsobem byla implementována a na závěr shrneme, jak se nám zadání podařilo naplnit a v čem by se hra dala dále vylepšit. 2. Popis úlohy a ovládání Hru je možné spustit pouze jako součástí již zmíněného prostředí, kde si uživatel vybere z většího množství her, kterou si chce zahrát (popřípadě mu je doporučena odborníkem podle uživatelova omezení). Při zvolení hry Hledání cesty se nejdříve objeví dialogový dialog (viz Obrázek 1), kde si uživatel zvolí, jak velké bludiště si přeje. Pokud uživatel nezvolí žádnou velikost, bude vygenerováno bludiště o defaultní velikosti (tedy počet řádků bude roven třem, počet sloupců pěti). Obrázek 1: Okno Nastavení
Následně se zobrazí hrací plocha (viz Obrázek 2). V levém dolním rohu je obrázek (většinou) zvířete, které se snaží podle šipek dostat k předmětu v pravém horním rohu. Zvíře i předmět vždy spolu souvisí (např. kravička se snaží dostat za trsem trávy, králík se snaží dostat za mrkví, myš naopak za sýrem) a jsou vybrány tak, aby se dětem líbily a děti tak měly motivaci úlohu vyřešit. Obrázek 2: Ukázka hrací plochy Kliknutím na tlačítko Spustit nahoře vlevo se spustí časomíra. Úkolem uživatele je klikat na body po směru šipek tak, aby se dostal k předmětu v pravém horním rohu. Z počátečního do konečného bodu vede pouze jedna správná cesta, v bludišti ale existují cesty, které nikam nevedou a které mají za úkol uživatele zmást. Na Obrázku 3 je vidět, co se stane, pokud uživatel zvolí špatnou cestu v tomto případě bod zčervená, ozve se varovný tón a uživateli jsou odečteny body. Pro další pokračování ve hře je nutné stisknout tlačítko X2Zpet, které vrátí poslední zahraný tah. Situace po zvolení správného bodu je vyobrazena na Obrázku 4.
Obrázek 3: Ukázka špatného tahu Obrázek 4: Ukázka správného tahu Po celou dobu může uživatel na horním panelu sledovat svou úspěšnost. Při správně označeném bodu se k průběžnému hodnocení přičte procentuální hodnota, kterou bod má. Pokud uživatel neudělá žádnou chybu, na konci bude jeho hodnocení rovné stům. Pokud se uživatel úspěšným klikáním dostane až k cíli, v tom případě se ozve fanfára a hra končí. Následně si uživatel může vybrat, že chce pokračovat v další hře, popřípadě skončit (Obrázek 5).
Obrázek 5: Konec hry Vždy během hry je možné si znovu zobrazit nastavení velikosti hrací plochy stisknutím tlačítka X2VlastniNastaveni a vygenerovat si tak novou hru o změněné velikosti. Další možností pro uživatele je změnit si úrovně hry, což je možné udělat kliknutím na tlačítka + a na horním panelu. Čím je obtížnost vyšší, tím je v bludišti více cest, které nepatří do správné cesty. 3. Implementace Úloha byla implementována v jazyce C#, frameworku.net v4.5, aby se dala snadno přidat k již zmíněnému prostředí pro hry. Generování zadání Jednou z nejdůležitějších věcí při implementaci této úlohy bylo právě generování nového bludiště, ve kterém uživatel bude hledat správnou cestu od startu k cíli. Bludiště je vygenerováno v metodě generujzadani() v souboru HledaniCestyMain.cs. Přesné umístění bodů je náhodné, pevné umístění mají pouze počáteční a koncový bod, ostatní body jsou umístěny do mřížky, každý má vymezenou určitou oblast, kam může být umístěn, jeho přesné umístění určí generátor náhodných čísel. To, že jsou body umístěny (i když náhodně) v určité mřížce je důležité i pro generování správné cesty, které následuje teď. Každý bod může být spojený hranou pouze se svými přímými sousedy v mřížce. Toto pravidlo je zahrnuto proto, aby výsledné bludiště bylo přehledné. Nejdříve se vygeneruje správná cesta k cíli. Algoritmus probíhá následovně:
while není vygenerovaná cesta zpracovávaný bod := startovní bod inicializuj pole zakázaných hran inicializuj cestu while zpracovávaný bod se nerovná koncovému najdi všechny vhodné sousedy zpracovávaného bodu if žádní sousedi nenalezeni break end if zvol náhodného souseda aktualizuj pole zakázaných hran přidej souseda do cesty zpracovávaný bod := soused end while if zpracovávaný bod se rovná koncovému cesta je vygenerovaná end end while Dalším bodem je vygenerování dalších, slepých, hran, jejichž počet se zvyšuje se zvyšující se úrovní. Počet hran, které budou vygenerovány, se určí pomocí následujícího vzorečku: x = počet_řádků. počet_sloupců. 0,15 počet_hran = počet_řádků. počet_sloupců. 0,5 + (úroveň 1)x Algoritmus pro generování dalších hran využívá pomocné pole contactwithpath o velikosti počtu řádků x počtu sloupců, ve kterém jsou ukládány o každém bodě následující informace: a) pokud je přímo součástí vygenerované cesty k cíli, b) pokud z tohoto bodu vede hrana do cesty, c) pokud do tohoto bodu vede hrana z cesty, d) pokud nevede žádná hrana do ani z cesty a e) pokud z bodu nebo do něj vede hrana, která ale není spojená s cestou. Zároveň se používá proměnná missed, kam se přičte jednička, pokud nebyla vygenerovaná hran. Algoritmus probíhá následovně: nastav pole contactwithpath, missed = 0 while počet_hran < celkový počet hran v grafu, missed < threshold vyber náhodný bod if je možné vést hranu z bodu do jeho souseda missed = 0 přidej nově vzniklou hranu do seznamu všech hran přidej nově vzniklou hranu do seznamu zakázaných hran aktualizuj pole contactwithpath else
end if end while missed += 1 4. Shrnutí Podařilo se nám splnit zadání, tedy vytvořit použitelnou hru, která by se dala použít jako podpora léčby nebo pouze pro zábavu dětských uživatelů. Pro uvedení do praxe by bylo ale nutné hru podrobit odbornému testování s případnými uživateli, aby jim hra byla skutečně ušita přímo na míru.