地図/気まぐれ/プロシージャル生成

土台 — 状態の配列とグリッド

マップは2次元の盤面だけど、配列は1次元の Uint8Array を1本だけ用意して y * N + x で住所を引く。1マスは壁か床かの2値なので、整数しか入らない箱が合う。外周をぜんぶ壁にしておくと、生成の途中でマップの外へはみ出す参照が消える。

盤面の状態を1次元配列に詰めて y * N + x で2次元の住所を引くと、メモリが連続して扱いやすく、キャッシュにも乗りやすい。隣をどう数えるかは2通り。von Neumann 近傍は上下左右の4近傍、Moore 近傍は斜めも入れた8近傍。生成では斜めのつながりを認める Moore 近傍が多く、多数決や孤立点の掃除で塊がまとまりやすい。

外周を壁(1)、内側を確率 density で壁か床(0)に撒く。各マスで周囲8マス(Moore 近傍)の壁の数を数え、盤外は壁とみなす。壁数を明度に焼くと、壁が密集した塊は暗く、開けた床は明るく出る。density で撒き直すたびに砂嵐の配置が入れ替わる。

density0.45 から上げると壁が増えて画面が暗く詰まり、下げると床が増えて明るく開く。wallsAround を上下左右だけの4近傍に削ると、斜めのつながりが拾えず塊の判定が変わる。Uint8Array 一本に壁と床を詰めて Moore 近傍を数えるこの形が、洞窟を彫る多数決でも孤立点を掃除する処理でも、そのまま材料になる。