Perl と Moo で作ったRPGに、セーブ機能を足していく全10回の連載です。ゲームオーバーで最初からやり直しになるところから始め、単純な変数コピーが参照コピーで失敗する様子を確かめ、状態を不変のスナップショットにまとめて保存し、復元・複数スロット・オートセーブ・書き換えの防止を足して、セーブ機能付きの CLI 版RPGを完成させます。最後の第10回で、作ったものが Memento パターンだったと名前を付けます。
各回は前の回のコードに手を足していく作りなので、通して読むなら第1回からが早道です。このページは目次を兼ねた案内板です。入口は「どこから読むか」で、困りごとが決まっているなら「困りごとから探す」で、順に追うなら「全話一覧」で選んでください。
どこから読むか
- 第1回 — 最初から順に作るなら。HP・所持金・位置を持つ Player クラスと、移動・戦闘が動くゲームループを作る
- 第2回 — 状態を保存する方法をまず試したいなら。変数へのコピーがなぜ失敗するかを確かめる。前提は第1回の Player クラス
- 第10回 — Memento パターンの3役と、Command パターンとの違いから知りたいなら。第9回までに作ったクラスを、パターンの役割に対応づける
困りごとから探す
状態を保存したいが、変数にコピーするだけではうまくいかない
セーブを複数持ちたい、自動でセーブしたい
セーブデータを守りたい
- 第7回 — セーブデータを外から書き換えられたくない
作ったものを1本にまとめたい、設計として説明したい
全話一覧
対象読者
- Perl入学式を卒業したばかりの入門者
- 「Mooで覚えるオブジェクト指向プログラミング」シリーズを読了した方
- デザインパターンを身近な題材で学びたい方
前提知識
- Perlの基本文法(変数、配列、ハッシュ、サブルーチン)
- Mooによるクラス定義(
has、sub、new) - プロパティのアクセス制御(
is => 'ro'、is => 'rw')
これらは前シリーズ「Mooで覚えるオブジェクト指向プログラミング」で学べます。
学習目標
- 状態の保存と復元: オブジェクトの状態を、カプセル化を保ったまま保存・復元する
- スナップショット: 状態を丸ごと、不変のオブジェクトとして持つ
- 履歴管理: 複数のセーブスロットとオートセーブを管理する
- Memento パターン: 作ってきたものを3つの役割に対応づける
- Command パターンとの違い: 同じ「元に戻す」でも、状態を保存する方式と操作を取り消す方式の違いを知る
デザインパターンの名前は、第10回まで出しません。必要になる順に作ってから、最後に名前を付けます。
