ローグライクマップ自動生成
ネットのどこかにすでにあるかもしれませんが、↓こちらのサイトのアルゴリズムを参考にローグライク(不思議のダンジョン)系マップ自動生成プログラムをAS2で作成しました。
http://racanhack.sourceforge.jp/rhdoc/intromaze.html (Racanhack コード解説)
コードファイル一覧はこちらです。
・サンプルファイル game.zip
■使用方法
import game.automap.*; var am:AutoMap = AutoMap._instance; //インスタンス取得 am.init(); //初期化&マップ生成 am.traceMap(); //マップ状態をtrace出力
■実行時のtrace出力内容例
□□□□□□□□□□□□□□□□□□☆□□□□□□□□□□□ □□□□□□□□□□□□□□□□□□☆□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□☆□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□☆□□□□□□□□□□□ □□□□□□■■■■■■■■■■■■■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□■■■■■■■■■■■□■□□□□□□□□□□□ □□□□□□□□□□□□■□□□□□■□□□□□□□□□□□ ☆☆☆☆☆☆■■■■■■■☆☆☆☆☆■□□□□□□□□□□□ □□□□□□■□□□☆□□□□□□□■□□□□□□□□□□□ □■■■■■■■■□☆□□□□□□□■□□□■■■■■■■□ □■■■■■■■■□☆□□□□□□□■■■■■■■■■■■□ □■■■■■■■■□☆□■■■■■□☆□□□■■■■■■■□ □■■■■■■■■□■■■■■■■□☆□□□■■■■■■■□ □■■■■■■■■□■□■■■■■□☆□□□□■□□□□□□ □■■■■■■■■□■□■■■■■□☆☆☆☆☆■■■■■☆☆ □■■■■■■■■□■□■■■■■□☆□□□□□□□□■□□ □■■■■■■■■■■□□■□□□□☆□□□□□□□□■□□ □■■■■■■■■□☆☆☆■■☆☆☆☆□□□□□□□□■□□ □■■■■■■■■□☆□□□■□□□☆□□□□□□■■■■□ □■■■■■■■■□☆□■■■■■□☆□□□□□□■■■■□ □■■■■■■■■□☆□■■■■■□☆□□□□□□■■■■□ □■■■■■■■■□☆□■■■■■□☆□□□□□□■■■■□ □□□□□□□□□□☆□□□□□□□☆□□□□□□□□□□□
黒い四角(■)は キャラクターが通れる場所、白い四角(□)が通れない場所、☆は暫定的に表示させているもので 上記サイトにある処理時に必要となる区切り線です(白い四角と同じ通れない場所です)。
デフォルトでマップサイズが30x30、部屋の最小サイズが3x3となっています。変更したい場合は、AutoMap.initメソッドに引数を設定します。
処理の流れとしては、AutoMap.initメソッドを実行すると、TipListクラスのlistプロパティにTipクラスのインスタンスが二次元配列(30x30)で格納されます。横から5番目、縦から10番目のTipクラスを取得したい場合、AutoMap.initメソッド呼出し後、以下のように記述します。
var tip:Tip = TipList._instance.getTip(5, 10);
Tipクラス内には、自身が通行可能な場所なのか、通行不可能な場所なのかの情報が格納されています。
今回のサンプルは、全ての部屋が必ずどこかの部屋に接続されるだけのものとなっています。ここからマップ構造に面白みを出していくためにランダムで通路をどこかに繋げたり、敵やアイテムをランダム配置するような処理を組み込んでいくことになります。
ソースコード内のSingletonの使い方は間違っているかもしれませんが、その時はごめんなさい。