Perl と Moo で、ローグライク風のダンジョンを自動生成する全7回の連載です。壁と床の二次元配列を ASCII art で描くところから始め、迷路型の生成と見た目のテーマを継承で足していくと、アルゴリズム×テーマの数だけクラスが増えます。そこで、両者を別々のクラス階層に分けて委譲でつなぐ Bridge パターンに組み替え、新しいテーマとアルゴリズムが1クラスずつで足せることを確かめます。
各回は前の回のコードに手を足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。
どこから読むか
- 第1回 — 最初から順に作るなら。壁と床の二次元配列を ASCII art で描く。前提は Moo の
hasとwithの基本 - 第3回 — なぜ Bridge が要るのかを先に見たいなら。テーマを足すたびにクラスが増え、3×4=12クラスになる
- 第4回 — Bridge の組み方だけ知りたいなら。アルゴリズムを Role に、テーマを基底クラスにして、委譲でつなぐ
困りごとから探す
種類を足すたびに、クラスが掛け算で増える
新しい種類を足したいが、既存のコードは触りたくない
似たクラスにコードをコピーしている
- 第2回 — 迷路型を足したら、サイズ・マップ・表示のコードが前回のクラスと重なる
Bridge を使うべきか、Adapter や Strategy で足りるのか
- 第7回 — 構成要素の対応と、Adapter・Strategy との違い、使う場面の条件
全話一覧
- ダンジョンを二次元配列で持ち、ASCII art で描く。ランダムに床を掘る最初の一歩(Perl・Moo)
- 迷路型の生成を足したら、クラスの中身が前回の丸写しになった。再帰的バックトラック法で作る
- テーマを1つ足すたびに、アルゴリズムの数だけクラスが要る。継承で作ると6クラスから12クラスに増える
- アルゴリズムとテーマを別々に持たせ、掛け算で増えるクラスを足し算にする【Bridge】
- 新しいテーマの水中神殿は1クラスを足すだけ。既存コードを書き換えずに増やす【Bridge】
- 新しい生成アルゴリズム(BSP)も1クラスで足せる。テーマ4種×3通りの12組み合わせを動かす
- Bridge はどんなときに使うか。Adapter・Strategy との違いと、連載の振り返り
完成サンプル
完成したダンジョンジェネレーターでは、テーマとアルゴリズムを自由に組み合わせられます。
| |
城テーマ × 迷路型アルゴリズムの例です。 4テーマ × 3アルゴリズム = 12通りの組み合わせが楽しめます。
対象読者
- Perl入学式を卒業した方
- 「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方
- デザインパターンに興味がある方
