Featured image of post ダンジョン生成に迷路やテーマを足すとクラスが掛け算で増える。PerlとMooのBridgeで直す全7回【目次】

ダンジョン生成に迷路やテーマを足すとクラスが掛け算で増える。PerlとMooのBridgeで直す全7回【目次】

Perl と Moo でダンジョン生成を作り、迷路型やテーマを継承で足すとクラスが掛け算で増える。そこを Bridge パターンで足し算に直す全7回の連載の目次です。困りごとからも選べます。

Perl と Moo で、ローグライク風のダンジョンを自動生成する全7回の連載です。壁と床の二次元配列を ASCII art で描くところから始め、迷路型の生成と見た目のテーマを継承で足していくと、アルゴリズム×テーマの数だけクラスが増えます。そこで、両者を別々のクラス階層に分けて委譲でつなぐ Bridge パターンに組み替え、新しいテーマとアルゴリズムが1クラスずつで足せることを確かめます。

各回は前の回のコードに手を足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。

どこから読むか

  • 第1回 — 最初から順に作るなら。壁と床の二次元配列を ASCII art で描く。前提は Moo の has と with の基本
  • 第3回 — なぜ Bridge が要るのかを先に見たいなら。テーマを足すたびにクラスが増え、3×4=12クラスになる
  • 第4回 — Bridge の組み方だけ知りたいなら。アルゴリズムを Role に、テーマを基底クラスにして、委譲でつなぐ

困りごとから探す

種類を足すたびに、クラスが掛け算で増える

  • 第3回 — テーマ×アルゴリズムが、継承だと6、9、12クラスと増えていく様子を再現する
  • 第4回 — 2つの軸を別の階層に分け、足し算で済む形にする

新しい種類を足したいが、既存のコードは触りたくない

  • 第5回 — テーマを足すのは1クラスだけ
  • 第6回 — 生成アルゴリズム(BSP)を足すのも1クラスだけ

似たクラスにコードをコピーしている

  • 第2回 — 迷路型を足したら、サイズ・マップ・表示のコードが前回のクラスと重なる

Bridge を使うべきか、Adapter や Strategy で足りるのか

  • 第7回 — 構成要素の対応と、Adapter・Strategy との違い、使う場面の条件

全話一覧

完成サンプル

完成したダンジョンジェネレーターでは、テーマとアルゴリズムを自由に組み合わせられます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
█████████████████████████████████████████
█░█░░░░░█░░░░░█░░░░░░░█░█░░░░░█░░░░░░░░░█
█░█░███░█░███░█░█████░█░█░███░█░███████░█
█░█░░░█░█░░░█░█░█░░░█░█░█░█░░░█░░░░░░░█░█
█░███░█░███░█░█░█░█░█░█░█░█░█████████░█░█
█░░░░░█░░░░░█░░░█░█░░░█░░░█░░░░░░░░░░░█░█
█████░█████░█████░█░███████████████░███░█
█░░░█░░░░░█░░░░░█░█░█░░░░░░░░░░░░░█░░░█░█
█░█░█████░█████░█░█░█░███████████░███░█░█
█░█░░░░░░░░░░░░░█░░░█░░░░░░░░░░░░░░░█░░░█
█████████████████████████████████████████

城テーマ × 迷路型アルゴリズムの例です。 4テーマ × 3アルゴリズム = 12通りの組み合わせが楽しめます。

対象読者

  • Perl入学式を卒業した方
  • 「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方
  • デザインパターンに興味がある方
comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。