krouzek:bludiste_hledani

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 Sokoban = hrdina posouvá bedny na cílová místa. Exotičtější varianta je třeba Boulder Dash ve kterém se pracuje i s jednoduchou gravitací.

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.

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.

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

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

bludiste-hledani.zip - verze s funkčním hledáním, okomentováno

  • krouzek/bludiste_hledani.txt
  • Poslední úprava: 2023/11/15 20:54
  • autor: 127.0.0.1