fill_out_level()はよくわからない。
部屋に扉がない場合(どこにもつながってない壁がある)、
行き止まりの通路を作成してる?
まぁ、ローグの部屋と通路の作成方法はこれでわかった、ということでいっかな。

このアルゴリズムのキモは“空間を3x3に分割する”ということに尽きますね。
これで部屋の重なりを防げるし、ある程度のばらつきを保証できるわけです。