Featured image of post ログも実績もサウンドも足すたびに攻撃処理が膨らむPerlのローグライクを、Mooで通知の仕組みに分けてObserverパターンにたどり着く全10回【目次】

ログも実績もサウンドも足すたびに攻撃処理が膨らむPerlのローグライクを、Mooで通知の仕組みに分けてObserverパターンにたどり着く全10回【目次】

Perl と Moo で作るローグライクの攻撃処理に、ログ・実績・サウンド・統計を足すたびに if/else が膨らむ困りごとを、通知先のクラス分けと登録の仕組みで解いて、最後に Observer パターンと名前を付ける全10回の連載の目次です。どこから読むか、困りごとからも選べます。

Perl と Moo で作るテキストのローグライクに、通知の仕組みを育てていく全10回の連載です。敵を倒したらログに残すだけの素朴な実装から始め、実績を足したところで if/else が膨らむ困りごとを確かめ、通知を受け取るクラスの分離、update の約束(Moo::Role)、通知先を管理する Emitter、実行中の付け外し、型チェックと進めて、統計の追加と対話的な CLI で完成させます。最後の第10回で、作ったものが Observer パターンだったと名前を付けます。

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

どこから読むか

  • 第1回 — 最初から順に作るなら。敵を倒したらログに残す処理を、say で直接出力する素朴な実装で書く
  • 第2回 — 機能を足すたびにコードが膨らむ困りごとを、先に体感したいなら。ログに実績を足して、if/else が増える様子を確かめる。前提は第1回のコード
  • 第10回 — Observer パターンの役割と、Pub/Sub・Mediator との違いから知りたいなら。第9回までに作ったクラスを、パターンの役割に対応づける

困りごとから探す

機能を足すたびに、1つのメソッドが膨らむ

  • 第2回 — ログに実績を足したら、攻撃のメソッドが if/else だらけになった
  • 第3回 — ログと実績の処理を、メソッドから切り離したい
  • 第5回 — 通知先を呼ぶ処理を、ゲーム側に直接書きたくない

通知を受け取るクラスの書き方を揃えたい、間違いを早く見つけたい

  • 第4回 — update を書き忘れたクラスが、通知の時に初めて落ちる
  • 第7回 — 関係ないオブジェクトを登録しても、エラーにならない

実行中に通知先を切り替えたい

  • 第6回 — ゲームの実行中に、サウンドを ON/OFF したい

既存のコードに触れずに、機能を足したい

  • 第8回 — 統計の集計を、ゲーム本体を変えずに足したい
  • 第9回 — 全機能をまとめて、ダンジョンを探索できる CLI にしたい

全話一覧

対象読者

  • Perl入学式を卒業したばかりの入門者
  • 「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方
  • デザインパターンを実践的に学びたい方
  • ゲームを作りながらプログラミングを学びたい方

前提知識

  • Perlの基本文法(変数、配列、ハッシュ、サブルーチン)
  • Mooによるクラス定義(has、sub、new)

これらは前シリーズ「Mooで覚えるオブジェクト指向プログラミング」で学べます。

デザインパターンの名前は、第10回まで出しません。必要になる順に作ってから、最後に名前を付けます。

関連シリーズ

変数とサブルーチンだけのPerlを、Mooのクラスで整理する(このシリーズの前提)

状態ごとに処理を分けて、if/else の分岐を減らす全10回(State パターン)

comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。