Featured image of post ゲームオーバーで最初からやり直しになるPerlのRPGに、Mooでセーブ機能を足してMementoパターンにたどり着く全10回【目次】

ゲームオーバーで最初からやり直しになるPerlのRPGに、Mooでセーブ機能を足してMementoパターンにたどり着く全10回【目次】

Perl と Moo で、HP・所持金・位置を持つ Player のRPGを作り、ゲームオーバーで最初からやり直しになる困りごとを、スナップショット・復元・複数スロット・オートセーブで解決して、最後に Memento パターンと名前を付ける全10回の連載の目次です。どこから読むか、困りごとからも選べます。

Perl と Moo で作ったRPGに、セーブ機能を足していく全10回の連載です。ゲームオーバーで最初からやり直しになるところから始め、単純な変数コピーが参照コピーで失敗する様子を確かめ、状態を不変のスナップショットにまとめて保存し、復元・複数スロット・オートセーブ・書き換えの防止を足して、セーブ機能付きの CLI 版RPGを完成させます。最後の第10回で、作ったものが Memento パターンだったと名前を付けます。

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

どこから読むか

  • 第1回 — 最初から順に作るなら。HP・所持金・位置を持つ Player クラスと、移動・戦闘が動くゲームループを作る
  • 第2回 — 状態を保存する方法をまず試したいなら。変数へのコピーがなぜ失敗するかを確かめる。前提は第1回の Player クラス
  • 第10回 — Memento パターンの3役と、Command パターンとの違いから知りたいなら。第9回までに作ったクラスを、パターンの役割に対応づける

困りごとから探す

状態を保存したいが、変数にコピーするだけではうまくいかない

  • 第2回 — 保存したつもりの値が、元のオブジェクトを変えると一緒に変わる
  • 第3回 — 保存した状態を、後から書き換えられない形で持ちたい
  • 第4回 — 保存した状態から、プレイヤーを元に戻したい

セーブを複数持ちたい、自動でセーブしたい

  • 第5回 — セーブデータが1つしか持てない
  • 第6回 — セーブし忘れても、ボス戦前やエリア移動の時点に戻りたい
  • 第8回 — スロットを選んでセーブ・ロードしたい

セーブデータを守りたい

  • 第7回 — セーブデータを外から書き換えられたくない

作ったものを1本にまとめたい、設計として説明したい

  • 第9回 — 全機能をメニュー付きの CLI 版RPGにまとめたい
  • 第10回 — 状態を保存して戻す設計に名前を付けたい。Command パターンの Undo と何が違うのか知りたい

全話一覧

対象読者

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

前提知識

  • Perlの基本文法(変数、配列、ハッシュ、サブルーチン)
  • Mooによるクラス定義(has、sub、new)
  • プロパティのアクセス制御(is => 'ro'、is => 'rw')

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

学習目標

  • 状態の保存と復元: オブジェクトの状態を、カプセル化を保ったまま保存・復元する
  • スナップショット: 状態を丸ごと、不変のオブジェクトとして持つ
  • 履歴管理: 複数のセーブスロットとオートセーブを管理する
  • Memento パターン: 作ってきたものを3つの役割に対応づける
  • Command パターンとの違い: 同じ「元に戻す」でも、状態を保存する方式と操作を取り消す方式の違いを知る

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

関連シリーズ

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

同じ「元に戻す」を、操作ごとの取り消しで作る全10回(Command パターン)

設定を上書きして戻せない困りごとを、時点ごとの保存で直す(Memento)

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