Kdo si hraje, nezlobí – analýza Bejeweled

Herní plocha hry Bejeweled

Bejeweled je jednoduchá oddychová hra. Hraje se na hrací ploše o rozměrech obvykle 8×8, kde je náhodně rozeseto 7 druhů kamenů. Kameny hráč přesouvá tak, aby přesunem vznikla řada (nebo sloupec) alespoň 3 kamenů stejné barvy. Na jejich místě se vygenerují kameny další. Občas se stane, že tyto nové náhodné kameny opět tvoří řadu. Zajímalo mě, jak často to nastane a jaká je závislost počtu těchto náhodných řad v závislosti na velikosti hrací plochy a také na počtu barev hracích kamenů.

 

 

Odstraněna řada 3 žlutých kamenů.

Vznikla z toho jednoduchá víkendová úloha, v javě se to dá napsat za dvě hodinky včetně javadocu.

Program testuje shodu tří a více barev kamenů v řadě či sloupci pro velikosti hrací plochy od 3×3 až po 128×128 a pro zadaný počet barev kamenů.

Pro danou velikost pole a počtu barev kamenů se potom zjištuje počet iterací, tedy počet herních polí v řadě, kde se nalezá alespoň jedna řada kamenů.

Snad jsem to napsal dost srozumitelně. :-) Aby bylo statistice učiněno za dost, pro každou velikost a počet barev kamenů se počet možných iterací zjišťuje 100x a bere se průměrná hodnota. I přes to je výsledný graf dost „zašumněný“, i 100 pokusů je tedy dost málo. Celkově proběhlo 6 druhů kamenů * 125 velikostí polí * 100 pokusů =  75’000 her.

Výsledek je zajímavý a jistě by se k němu dalo dojít i pomocí statistických metod (statistiku neovládám). Zvyšující se velikost pole příliš mnoho příležitostí pro řadu nepřináší. Pro 7 druhů kamenů je asymptota někde kolem 5 iterací.

Graf závislosti počtu iterací na velikosti hrací plochy. Klikněte pro plnou velikost.

Avšak zcela podle očekávání, snížení počtu barev má na pravděpodobnost vzniku spontánní řady vliv daleko větší. Závěr tedy zní, složitost hry příliš nezávisí na velikosti hracího pole, ale velmi významně závisí na počtu barev kamenů.

Ještě graf z gnuplotu, kde je krásně vidět logaritmická asymptotická závislost počtu iterací na velikosti herního pole. Pro 7 barev kamenů je v grafu i nafitovaná fce f(x) = a*ln(b*x)+c , která docela přesně pasuje, ale netuším, zda je to správný model pro tento typ hry.


Příspěvek byl publikován v rubrice Java, Programovací jazyky. Můžete si uložit jeho odkaz mezi své oblíbené záložky.