この記事のURL

http://www.dango-itimi.com/blog/archives/2007/000935.html


FLASH tips ローグライクマップ自動生成2

【 ランダム通路作成 】

全ての部屋が繋がるように通路を繋げた後は、各部屋からランダムで通路を延ばします。
その場合の独自に設定した仕様は以下の通りです。

・ランダムで延ばす通路は直進するのみ (処理軽減のため)
・部屋の角には通路は作らない (見た目を整えるため)
・二本以上の通路が隣り合わせることはないようにする (見た目を整えるため)

ランダムで通路を延ばすようにしたマップ自動生成例は次のようになります。

□□□□□□□☆□□□□□□□□□□□□□□□□□□□□□□
□□□□□□□☆□□□□●■■■■■■■■■■■■■■■●□
□□□□□□□◆◆◆◆◆◆■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□●■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□■■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□■■■■■■■■■■■■■■■■■□
□□□□□□□◆□□□□●■■■■■■■■●◆●■■●◆●□
□□□□□□□◆□□□□□□□□□□□□□□◆□□□□◆□□
□□□□□□□◆☆☆☆☆☆☆☆☆☆☆☆☆☆◆◆☆☆☆☆◆☆☆
□□□□□□□◆□□□□□□□□□□□□□◆□□☆□□◆□□
□□□□□□□◆□□□□□□□□□□□□□◆□□☆□□◆□□
□□●■■●□◆□●■■■■■■■■■■●◆●□☆□●◆●□
□□■■■●□◆□■■■■■■■■■■■■■■□☆□■■■□
□□■■■◆◆◆□■■■■■■■■■■■■■■□☆□●■■□
□□■■■●□☆□■■■■■■■■■■■■■●□◆◆◆■■□
□□■■■■□☆□■■■■■■■■■■■■■◆◆◆□●■■□
□□■■■■□☆□●■■●◆●■■■■■■■●□☆□●◆●□
□□■■■■□☆□□□□□◆□□□□□□□□□□☆□□◆□□
□□■■■■□☆☆☆☆☆☆◆◆◆◆◆◆◆◆☆☆☆☆☆☆◆☆☆
□□■■■■□☆□□□□□□□□□□□□◆□□□☆□□◆□□
□□■■■■□☆□□□□□□□□□□□□◆□□□☆□●◆●□
□□■■■■□☆□□□□□□□□□□□□◆□□□☆□■■■□
□□■■■■□☆□□□□□□□□●■■●◆●●□☆□■■■□
□□■■■■□☆□□□□□□□□■■■■■■■□☆□■■■□
□□■■■■□☆□□□□□□□□■■■■■■●□☆□●■■□
□□■■■■□☆□□□□□□□□■■■■■■◆◆◆◆◆■■□
□□■■■■□☆□□□□□□□□■■■■■■●□☆□●■■□
□□■■■■□☆□□□□□□□□■■■■■■■□☆□■■■□
□□●■■●□☆□□□□□□□□●■■■■■●□☆□●■●□
□□□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□

●は上下左右のチップに通路を作成できないチップです。部屋作成時に部屋の四隅に設定しています。また通路を作成する際、通路が開通した位置のチップの両側にあるチップに設定しています。こうすることで、部屋の角には通路は繋がらなくなり、また、通路が二本以上隣り合うことはならないように処理させています。

◆には移動しない背景オブジェクト(木や岩等)を配置できない箇所です。ランダムで背景オブジェクトを設置させたい場合、通路がふさがれて全ての部屋に移動できなくなってしまうことがないように設定しています。


【 部屋内部にも通路作成 】

ランダムで移動しない背景オブジェクトを配置する際、『プレイヤーオブジェクト』や次のフロアへ移動するための『階段』が、背景オブジェクトにふさがれてしまう可能性があることに気付きました。どちかでもふさがれてしまうと、次のフロアへ進むことができなくなってしまいます。

プレイヤーオブジェクトや階段が 背景オブジェクトにふさがれないようにするためには、一本の全ての部屋が繋がる通路を部屋内部にも作成します。通路がある箇所には背景オブジェクトは配置できないようにしているので、その通路上にプレイヤーオブジェクトや階段を配置すれば次のフロアへ進むことができないという事は起こらなくなります。

部屋内部にも通路を作成したマップ自動生成例は次のようになります。
この例ではランダム通路は作成していません。

□□□□□□□□□□□□□□□□☆□□□□□□□□□□□□□
□□□□□□□□□●■■■■●□☆□●■■■■■■■■■●□
□□□□□□□□□■■■■◆◆◆◆□■■■■■■■■■■■□
□□□□□□□□□■■■■◆●□◆□■■■■■■■■■■■□
□□□□□□□□□■■■■◆■□◆□■■■■■■■■■■■□
□□□□□□□□□■■■◆◆■□◆□■■■■■■■■■■■□
□□□□□□□□□●■●◆●●□◆□■■■■■■■■■■■□
□□□□□□□□□□□□◆□□□◆□■■■■■■■■■■■□
☆☆◆◆◆◆◆◆◆◆◆◆◆☆☆☆◆□■■■■■■■■■■■□
□□◆□□□☆□□□□□□□□□◆□■■■■■■■■■■■□
□●◆●●□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■◆◆■□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■■◆■□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■■◆●□☆□□□□□□□□□◆□■■■■■■■■■■■□
□■◆◆◆◆◆□□□□□□□□□◆□■■■■■■■■■■■□
□●◆●●□◆□□□□□□□□□◆□■■■■■■■■■■■□
□□◆□□□◆□●■■■■■●□◆□■■■■■■■■■■■□
☆☆◆☆☆☆◆□■■■■■■■□◆□■■■■■■■■■■■□
□□◆□□□◆□■■■■■■■□◆□■■■■■■■■■■■□
□●◆●●□◆□■■■■■■■□◆□■■■■■■■■■■■□
□■◆■■□◆□■■■■■■■□◆□■■■■■■■■■■■□
□■◆■■□◆□■■■■■■■□◆□●■■■■■■■■■■□
□■◆■■□◆□●■■■■■■□◆◆◆◆◆◆◆◆◆◆◆◆◆□
□■◆■■□◆◆◆◆◆◆◆◆◆□☆□●■■■■■■■■■■□
□■◆■■□☆□●■■■■■■□☆□■■■■■■■■■■■□
□■◆■■□☆□■■■■■■■□☆□■■■■■■■■■■■□
□■◆■■□☆□■■■■■■■□☆□■■■■■■■■■■■□
□■◆■■□☆□■■■■■■■□☆□■■■■■■■■■■■□
□●◆■●□☆□●■■■■■●□☆□●■■■■■■■■■●□
□□□□□□☆□□□□□□□□□☆□□□□□□□□□□□□□

部屋内部に通路が二つ以上ある場合は、それら通路を接続し、通路が一つしかない部屋には、単純に通路がある壁と反対方向の壁まで必須通路を延ばしてします。

部屋内部にも通路開通後、ランダム通路を作成したマップ自動生成例は次のようになります。

□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□□□□□☆□□□□□□□□□□□□□□□□☆□□□□□□□
□●■●□☆□□□□□□□□□□□□□□□□☆□●■■■●□
□■◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆■■■■□
□■◆●□◆□□□□□□□□□□□□□□□□☆□●■■■■□
□■◆■□◆□□□□□□□□□□□□□□□□☆□●■■■■□
□■◆■□◆□□□□□□□□□□□□□□□□◆◆◆◆◆◆■□
□■◆■□◆□□□□□□□□□□□□□□□□◆□●■■◆■□
□■◆■□◆□□□□□□□□□□□□□□□□◆□■■■◆■□
□■◆■□◆□●■■■■■■■■■■■■●□◆□■■■◆■□
□■◆■□◆□●■■■■■■■■■■■■●□◆□■■■◆■□
□■◆■□◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆□●■●◆●□
□■◆■□☆□●■■■■■■■■■■■■●□☆□□□□◆□□
□●◆●□☆□●■●◆●■■■■■■■■●□☆☆☆☆◆◆☆☆
□□◆□□☆□□□□◆□□□□□□□□□□□☆□□□◆□□□
☆☆◆◆☆☆☆☆☆☆◆☆☆☆☆☆☆☆☆☆☆☆☆□□□◆□□□
□□□◆□□□☆□□◆□□□□□□□□□□□☆□□□◆□□□
□●●◆●●□☆□□◆□□□□□□□□□□□☆□□□◆□□□
□■■◆◆●□☆□□◆□□□□□□□□□□□☆□□●◆●●□
□■■■◆◆◆◆□□◆□□□□●■■■■●□☆□□■◆■■□
□■■■■●□◆◆◆◆◆◆◆◆◆◆◆◆◆◆□☆□□■◆■■□
□■■■■■□☆□□□□□□□●■■■■■□☆□□■◆■■□
□■■■■■□☆□□□□□□□■■■■■■□☆□□■◆■■□
□■■■■●□☆□□□□□□□●■■■■■□☆□□■◆■■□
□■■■■◆◆◆◆◆◆◆◆◆◆◆■■■■■□☆□□■◆■■□
□●■■■●□☆□□□□□□□●■■■■●□☆□□●◆■●□
□□□□□□□☆□□□□□□□□□□□□□□☆□□□□□□□

[ FLASH ] [ tips ] 投稿者 siratama : 2007年04月15日 18:28

トラックバック

http://www.dango-itimi.com/blog/mt-tb.cgi/895

コメント

はじめまして。
サイト拝見させていただきました。
実は、只今会社でフラッシュゲームを制作(外注)しようとしているのですが、お見積をいただくことは可能でしょうか?
ドット絵を使おうと思っていたので、是非お話いただければと思ったのですが、宜しければご返事下さい。
可能であれば仕様書をお送り致しますのでお見積を御願い致します。

投稿者 250express : 2007年04月18日 19:19

>250expressさん
どうもはじめまして。
サイトを見ていただきありがとうございます。
返事はメールにてさせていただきます。

投稿者 siratama : 2007年04月18日 19:45

以下コメントを書き込むだけでは、管理人には通知が行われません。通知を行いたい場合、管理人の書き込みに「返信」を押してコメントをしていただくか、あるいは Google+, Twitter へご連絡ください。




[EDIT]