|
O mojí osobě
Něco ke stažení Články a návody Poezie Odkazy |
Algoritmus generování bludiště: V následujícím textu vám ukážu jednoduchý algoritmus, jak vygenerovat náhodné dvourozměrné bludiště. Dá se použít pro vytvoření jednoduchému procházení (např. bludiště), ale může se použít i pro generování náhodných map do různých složitějších her. Samotná myšlenka je vcelku jednoduchá - vytvoříme si body a hrany mezi nimi, v jednom z nich (libovolném) začneme a budeme je postupně spojovat dohromady. Nakonec můžeme určit nebo náhodně vybrat cíl.
Generování probíhá v cyklu:
V algoritmu používám sice zásobník, ale stejně dobře to jde udělat i pomocí fronty - mělo by pak vyjít více košaté bludiště s kratšími chodbami. Výsledkem celého algoritmu ovšem bude bludiště tvaru strom - tj. povede sice přez všechny možné vrcholy, ovšem nikde nebude kružnice - cesta, kudy by hráč mohl bloudit do kolečka. To se dá ale jednoduše napravit. Stačí náhodně probourat několik zdí. Při programování se dá použít dvourozměrné pole. Jak se dá předchozí povídání o hranách a bodech (vrcholech) snadno přepsat na program, ukážu raději na konkrétním případě.
Zvolím si čísla n a m. Vytvořím pole integerů o rozměrech (2*n+1)X(2*m+1), tj. chci pole vždy o lichých rozměrech. Celé bludiště vyplním číslem znamenající zeď (např. 1, nula bude volná cesta). Okraje pole vyplním číslem cesty (tj. vytvořím cestu okolo celého bludiště. Proč, to vysvětlím později) a zvolím si start. Ten volím vždyv lichém sloupci a lichém řádku, ale ne na okraji (například 2,2 pokud počítám od nuly). Pole o souřadnicích startu vyplním číslem cesty a začnu postupovat podle algoritmu.
Červené kolečko značí bod, do kterého jsme se někdy v průběhu algoritmu dostali. Teď se snažíme najít nějaké nenavštívené sousedy - červený křížek označuje ty navštívené, do kterých nechcem, zelená fajfka ty přípustné. No, a ještě vysvětlení, proč jsme dělali cestu na okraji okolo bludiště - díky ní nemusíme kontrolovat, zda jsme neopustili pole a nepíšeme někam do okolní paměti. Je ale možné tu cestu nakreslit i jinak a potom můžeme vytvořit (skoro) kulaté bludiště, bludiště ve tvaru stromečku nebo jiné tvary. Nakonec malá ukázka, jak tvorba bludiště postupuje: ..................... .XXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXX. .XXXXXXXXXXXXXXXXXXX. ..................... |