krouzek:bludiste_hledani

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
krouzek:bludiste_hledani [2022/04/27 06:53] adminkrouzek:bludiste_hledani [2023/11/15 20:54] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
-=== Bludiště - rekapitulace ===+===== Bludiště - rekapitulace =====
 ==== Zadání ==== ==== 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í. 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 ==== ==== 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). V kódu pro lepší přehlednost je možné souřadnici mít jako objekt:  ''%%{x:5, y:3}%%''.+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
  
-Každá buňka bludiště má nějaký výchozí stav (například že jde o prázdné místo nebo zeď). V našem kódu tyto výchozí stavy máme 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 hrac = %%{x: 3, y:2}%%''. O kombinaci mapy a těchto dynamických objektů se stará funkce ''%%vykresli%%''  
  • krouzek/bludiste_hledani.1651042435.txt.gz
  • Poslední úprava: 2023/11/15 20:54
  • (upraveno mimo DokuWiki)