===== Bludiště - rekapitulace ===== ==== Zadání ==== Na začátku jsme brainstormovali zadání - hra s hrdinou, co se snaží projít bludištěm (do nějakého cílového políčka). Variace je [[https://youtu.be/BGOenvwj3OY?t=26|Sokoban]] = hrdina posouvá bedny na cílová místa. Exotičtější varianta je třeba [[https://youtu.be/FiEVfa1OK_o?t=102|Boulder Dash]] ve kterém se pracuje i s jednoduchou gravitací. ==== Princip ==== Bludiště je čtvercová síť. Představte si čtverečkovaný papír, nebo šachy. Buňky indexujeme dvojicí čísel - například 5,3 jsou souřadnice buňky 5 vpravo a 3 dolů od výchozího bodu (zpravidla levý horní roh je souřadnice 0,0). Každá buňka bludiště má nějaký výchozí stav (například že jde o prázdné místo nebo zeď). Krom toho jsou v bludišti nějaká speciální místa (například start a cíl) a pohybující se věci - hráč a příšery. ==== Implementace ==== V kódu máme pro lepší přehlednost souřadnice většinou jako objekt: ''%%{x:5, y:3}%%''. V našem kódu máme základní neměnnou mapu v dvojitém poli: ''%%mapa[y][x]%%'' tedy například ''%%mapa[3][5]%%'' obsahuje hodnotu ''%%X%%'' což značí zeď. **Pozor - indexy jsou opravdu přehozeny, první y druhé x** - první je totiž index řádku = vnější a druhý index jednotlivé buňky v řádku. Ve hře máme i pohyblivé objekty: hráče a příšery. Pro jednodušší pohybování tyto objekty nejsou uvnitř pole ''%%mapa%%'' (ta může být tedy neměnná po celou hru), ale jsou vyjádřeni souřadnicí například ''let player = %%{x: 3, y:2}%%''. O kombinaci mapy a těchto dynamických objektů se stará funkce ''%%vykresli%%'' - v našem případě je trochu složitější, protože je schopná si ad hoc vytvořit html elementy (buňky) které potřebuje. ==== Postup ==== Co jsme za ten měsíc s bludištěm zkoušeli? * pohyb hráče pomocí kláves * přidání příšer a jejich pohyb * příšery mohou mít různou strategii (ideově "pluginy") * (experiment): přigenerovávání mapy (random zdi) Co ještě nemáme? * ''%%vykresli%%'' si nedovede poradit s jiným počtem příšer než 2 * nedetekujeme že hráč došel na konec * neděláme game over když se příšera a hráč dostanou na stejné políčko ==== Hledání ==== Královskou disciplínou v bludišti je hledání nejkratší cesty - například pro hráče, aby se dostal k cíli. Může jít ale také o hledání cesty příšery k hráči aby ho snědla. Podobný algoritmus se také používá k generování a kontrole automaticky generovaných bludišť. Hledání nemusí být příliš výpočetně náročné, dá se tedy opakovat při každém tahu - a například reagovat na dynamické jevy (překážky, příšery). Ve hrách se spojitým světem se tomu říká //pathfinding// {{ :krouzek:bludiste-hledani.zip |}} - verze s funkčním hledáním, okomentováno