2次元で歩かせる — 踏破の跡
乱数を積むという同じ細工を平面でやると、1次元のうねりが2次元の軌跡になる。1次元のブラウンノイズは時間に沿った値の漂いで、平面では盤面を塗りつぶしていく足跡になる。一歩ごとに上下左右どれかへよろよろ進み、踏んだセルだけを塗っていく。
酔歩(ランダムウォーク)。各ステップで向きを無記憶に選んで現在地に足し込む確率過程。1次元では値が ±1 漂うブラウンノイズそのもので、2次元では平面上の点が漂う。生成アートのダンジョン生成の「酔歩で掘る」手続きと同一で、放任すると原点から距離 √(歩数) の幅で散らばる。中心へ弱いバイアスをかけると盤の外へ逃げず、踏破した領域がまとまる。
一匹を歩かせて、踏んだセルを塗り重ねる。step ごとに乱数で向きを一つ選び、x と y をセル単位で動かす。盤の縁は clamp で内側に留める。踏んだセルを floor に立てて、明るいセルとして塗っていく。
明るい跡がくねくねした通路になって枝分かれする。完全に放任すると、何匹もの足跡が縁へ寄って偏る。x < nx/2 なら右、そうでなければ左、というふうに、向きを選ぶ確率の一部を中心方向へ振ると、踏破がまとまる。一定の割合だけ中心バイアスに割り当て、残りを純粋な乱数で選ぶ。
// 一定割合だけ中心へ寄せ、残りは無記憶の乱数で選ぶ const r = Math.random() if (r < 0.06) dx = walker.x < nx / 2 ? 1 : -1 else if (r < 0.12) dy = walker.y < ny / 2 ? 1 : -1 else if (r < 0.56) dx = Math.random() < 0.5 ? 1 : -1 else dy = Math.random() < 0.5 ? 1 : -1
何匹かを同時に歩かせて、盤の何割かを踏むまで掘り進める。carved が目標に届いたら盤を空にして掘り直す。歩いた跡だけが残るので、くねくねした通路が枝分かれして有機的に広がる。
明るい先頭のセルが掘り進む頭で、その後ろに踏破した通路が伸びる。盤の七割を踏むと掘り直して別の迷路が立つ。音のブラウンノイズも、マップを掘る酔歩も、乱数を積分するという一点で同じ手続きになる。次元が1つ違うだけで、聞こえる音にも、歩けるマップにもなる。