Featured image of post 【目次】PerlとMooでテキストRPG戦闘エンジンを作ろう(全10回)

【目次】PerlとMooでテキストRPG戦闘エンジンを作ろう(全10回)

Perl と Moo でテキスト RPG の戦闘エンジンを作りながら、Command・State・Strategy・Observer を学ぶ全10回の連載。目次を兼ねた案内板で、読む順と各回の内容をまとめています。

勇者とスライムが殴り合うだけの戦闘を、Perl と Moo で作るところから始めます。そこへ防御・魔法・アイテム、敵のAI、ダメージ表示や報酬を足していくと、if/elsif がすぐに手に負えなくなります。その困りごとを1つずつ片付けていくと、Command・State・Strategy・Observer という4つの GoF デザインパターンになります。最後は、コマンドを入力して敵と戦う対話型のバトルが動きます。

このページは目次を兼ねた案内板です。通して作るなら「全10回」を順に、特定の困りごとがあるなら「困りごとから探す」から選んでください。

  • 対象: Perl 入学式を卒業したレベルで、Moo でのオブジェクト指向の入門を終えた方
  • 使うパターン: Command、State、Strategy、Observer

読み方

  • 通して読む: 第1回から順に。コードは前の回の続きで、各回の終わりに次の回で直す問題が示されます
  • パターンだけ知りたい: 第3回で if/elsif の行き詰まりを確かめてから、第4回(Command)→ 第5回(State)→ 第6回(Strategy)→ 第7回(Observer)。前提のコードは第1〜2回にあります
  • 全体像だけ見たい: 第8回の協調の図と、第10回の振り返りの表

全10回

  1. Perl と Moo でターン制 RPG の戦闘を作りたい。まず勇者とスライムが殴り合う最小版を動かす
  2. 攻撃のほかに防御やアイテムも使いたい。行動を1つずつクラスに分ける
  3. 行動の選択を if/elsif で書いたら、魔法とアイテムを足すたびに増えて手に負えない
  4. 行動の if/elsif を片付けたい。行動を Command オブジェクトにして選ぶ処理から切り離す【Command】
  5. 戦闘の開始・プレイヤーの番・敵の番・終了の流れが散らかる。フェーズを State で管理する【State】
  6. 敵がいつも攻撃するだけで単調。攻撃的・防御的・ランダムなAIを Strategy で切り替える【Strategy】
  7. HP が減ったら画面に出したい、勝ったら報酬を渡したい。通知を Observer で任せる【Observer】
  8. Command・State・Strategy・Observer を同時に使うと、どう噛み合うのか。協調の流れを追う
  9. 勇者を自分の手で動かしたい。コマンド入力で敵と戦う対話型バトルに仕上げる
  10. なぜこの4つのパターンで足りたのか。RPG の戦闘を題材に、組み合わせ方の理由を振り返る

困りごとから探す

行動の種類を増やしたい、分岐が伸び続けている

  • 第2回 — 攻撃・防御・アイテムを、行動ごとのクラスに分ける
  • 第3回 — if/elsif で振り分けると、魔法とアイテムを足すたびに増える
  • 第4回 — 行動を Command オブジェクトにして、選ぶ処理から切り離す

戦闘の流れ(フェーズ)が散らかっている

  • 第5回 — 開始・プレイヤー・敵・終了を State で管理する

敵の動きを切り替えたい

  • 第6回 — 攻撃的・防御的・ランダムなAIを Strategy で差し替える

ダメージ表示や報酬など、戦闘に付随する処理を足したい

  • 第7回 — Observer で通知し、戦闘のコードに触れず反応を増やす

パターンの組み合わせ方を知りたい

  • 第8回 — 4つのパターンが1ターンの中でどう噛み合うか
  • 第10回 — なぜこの4つなのか、他の場面への応用
comments powered by Disqus
システム開発・AIワークフローのご相談は Meetsource へ
Hugo で構築されています。
テーマ Stack は Jimmy によって設計されています。