ローグライクマップ自動生成3
■パーツ配置処理実装
自動生成したマップに、プレイヤー、次のフロアへ行くための階段、敵、背景パーツ、アイテム、グループ背景パーツをランダム配置可能にしました。
【 自動生成したマップ 】 □□□□□□□□□☆□□□□□□□□☆□□□□□☆□□□□□ □□□□□□□□□☆□□□□□□□□☆□□□□□☆□●■●□ □□□□□□□□□☆□□□□□□□□☆□●■●□◆◆◆◆◆□ □□□□□□□□□☆□□□□□□□□◆◆◆◆◆◆◆□●■■□ □□□□□□□□□☆□●■■■■●□◆□●◆●□☆□■■■□ □□□□□□□□□☆□■■■■◆◆◆◆□■◆■□☆□■■■□ □□□□□□□□□☆□■■■■◆●□☆□●◆●□☆□●■●□ □□□□□□□□□☆□■■■■◆■□☆□□◆□□☆□□□□□ □□□□□□□□□☆□●■■■◆■□☆☆☆◆◆◆☆☆☆☆☆☆ □□□□□□□□□◆◆◆◆◆■◆■□☆□□□□◆□□□□□□ □□□□□□□□□◆□●■◆■◆●□☆□●■●◆●■■■●□ □●■■■■■●□◆□■■◆■◆◆◆◆◆◆■■◆■■■■■□ □■■■■■■■□◆□■■◆◆◆●□☆□●■■◆■■■■■□ □■■■■■■■□◆□●●◆●■●□☆□●■■◆■■■■●□ □■■■■■■●□◆□□□◆□□□□☆□□□□□□□□□□□ □■■■■■◆◆◆◆☆☆☆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆☆☆ □■■■■■◆●□☆□□□□□□□□□□□□□□□□□◆□□ □■■■■■◆■□☆□□□□□□□□□□□□□□□□□◆□□ □■■■■■◆■□☆□□□□□□□□□□□□□□□□□◆□□ □■■■◆◆◆■□☆□□□□□□□□□□□□□□□□□◆□□ □●■●◆●■●□☆□□□□□□□□□□□□□□□□□◆□□ □□□□◆□□□□☆□□□□□□□□□□□□□□□□□◆□□ ☆☆☆☆◆☆☆☆☆☆□□□□□□□□□□□□□□□□□◆□□ □□□□◆□□□□☆□□□□□□□□□□□□□□□□□◆□□ □●■●◆●■●□☆□□□□□□□□□□□□□□□●●◆●□ □■■■◆■■■□☆□□□□□□□□□□□□□□□■■◆■□ □■■■◆■■●□☆□□□□□□□□□□□□□□□●■◆■□ □■■■◆■■◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆■◆■□ □●■■◆■■●□☆□□□□□□□□□□□□□□□●■◆●□ □□□□□□□□□☆□□□□□□□□□□□□□□□□□□□□ 【 各パーツ配置 】 ■■■ ■I2■ ■■■■■ ■■■■■■■ ■E1■ ■■■■E3■ ■ ■■■ B1■E1 B2■■■■■■■ ■■■ ■■■ ■■■■■■ ■■■ ■■■ ■■■■■■ ■ ■■■■■■ ■■■ ■■■■■■■■ ■ ■ ■■■■■■ ■■■■■■■■■ ■■■■■■■ ■ ■■■■■■■■■■■■■■■■■■ ■■■■■■■ ■ ■I1■■■■ B1■■■■■■■■ ■■■■■■■ ■ ■■■■■■ ■■■■■■■■■ ■■■■■■■ ■ ■ ■■■■■■■■■ ■■■■■■■■■■■■■■■ ■E2■■■■■ ■ ■■■■■■■ ■ ■■■■■PE1 ■ ■■E3■■■■ ■ ■■■■■E2■ ■ ■ ■ ■ ■ ■ ■ ■■■■■■■ ■■■■ ■■■■■■■ ■B2■■ ■B5B6■■■■ ■■■■ ■B7B8■■■■■■■■■■■■■■■■■■■■■■■S■ ■■■■■■■ ■■■I1 P : プレイヤー S : 階段 En : 敵 In : アイテム Bn : 背景パーツ nはIDを示す 10以上のIDはXと表示される
登場させたい各パーツのID一覧をメインクラスに渡すことでランダム配置されるように処理しています。
プレイヤーと階段は、すべての部屋が繋がるための通路上に配置されます。プレイヤーと階段以外は、すべての部屋が繋がるための通路上には配置されません。(ローグライクマップ自動生成2参照)
グループ背景パーツは、複数チップで構成される大きな背景パーツを配置したい場合に指定します。上記例ではB5~b8の四つの背景パーツが固まっている箇所がグループ背景パーツとなっています。
配置処理順序は以下のようにしています。
1.指定した各パーツを最低ひとつずつ配置
2.各パーツをランダム数配置
パーツ配置可能なチップがなくなった時点で配置処理は終わります。
グループ背景パーツに関しては、配置可能なチップをランダムで探索させているため、特定の探索数を上回った場合、配置はとりやめになるように処理しています。よって、グループ背景パーツを配置するように指定したにもかかわらず、フロア上には配置されない事もあります。FlashLiteでは1フレーム内で実行する処理行数はさほど多くはないと思われるので、探索可能上限はあまり大きく設定はできません。
■敵登場位置設定
1フロア内で一定以下の敵の数になったら敵がどこかに登場するようにします。
一歩一歩プレイヤーが歩くたびに敵がどこに登場するかを決定する処理は行わず、あらかじめどの位置に敵が登場するかを設定して処理軽減を行います。
設定したマップは以下のようになります。
■■■ ■E■ ■■■■■ ■■■■■■■ ■■■ ■■■■■■ ■ ■■■ ■■■ ■■■■■■■■ ■■E ■■■ ■■■E■■ ■■■ ■E■ ■■■■■■ ■ ■■■■■■ ■■■ ■■■■■■■■ ■ ■ ■■■E■■ ■■■■■■■■■ ■■■■■■■ ■ ■■■■■■■■■■■■■■■■■■ ■■■■■■■ ■ ■■■■■■ ■■■■■■■■E ■■■■■■■ ■ ■■■■■■ ■E■■■■■■■ ■■■■■■■ ■ ■ ■■■■■■■■■ ■■■■■■■■■■■■■■■ ■■■■■■■ ■ ■■■■■■■ ■ ■■■■■■■ ■ ■■■■■■■ ■ ■■■■■■■ ■ ■ ■ ■ ■ ■ ■ ■■■■■■■ ■■■■ ■■■■■■■ ■■■■ ■■■■■E■ ■■■■ ■■■■■E■■■■■■■■■■■■■■■■■■■■■■ ■■■■■E■ ■■■■
指定した数値分、敵登場位置が設定されます。
これにてローグライクマップ自動生成処理はほぼ完成。