地図/創発/グリッド

同じ格子で地形を彫る — 多数決の平滑化

ばらけた点を「周りの多数派に飲まれる」という雑なルールで更新すると、孤立点が均されて塊になる。生死の「ちょうど」の判定でなく、近傍の壁の数が閾値を超えたかどうかだけで自分の状態を決める。

多数決平滑化のルール。各セルが「周りに壁が一定数以上あれば自分も壁、なければ床」で更新する。8近傍の壁を数え、判定を生死の「ちょうど」でなく「過半が壁か」という閾値にする。ランダムな初期配置から数回くり返すと孤立点が消え、連結した空間が残る。盤外を壁とみなすと外周が壁で囲まれ、洞窟状のマップ生成にそのまま使える。

まず初期状態を撒く。各マスを確率 fill で壁にし、外周のマスは無条件で壁にする。下は数十フレームごとに撒き直している。セルは正方形のまま、列数と行数を画面の縦横に合わせて全面に敷く。

壁と床が fill の比率で散らばった砂嵐になる。外周だけは毎回壁で揃う。fill を上げると壁が増え、下げると床が広がる。

次に、この砂嵐へ多数決を入れる。各マスで8近傍の壁の数 around を数え、around >= 5、または既に壁で around >= 4 なら壁にする。盤外は壁として数える。stepgen が 6 になるまでくり返し、最後の盤面を少し止めてから撒き直す。

砂嵐の孤立点が一世代ごとに消え、壁が寄り集まって連結した空間に固まっていく。grid を読んで next に書き、最後に入れ替えるのは、全マスを同じ盤面から一斉に進める同期更新のため。wallsout ? 1 : ... で盤外を壁として数えるので、外周がいつも壁で閉じる。fill と更新回数の二つで開け具合が決まる。回数を 0 にすると撒いた砂嵐のまま、増やすほど角が取れて境界がなめらかになる。

同じ8近傍の壁カウントで、判定を「ちょうど」から「多数派」に替えるだけで、生成アートの CA がダンジョンを掘る道具になる。