
C言語入門|STEP9:セーブ・ロードとイベント処理-RPGらしさを完成させる
はじめに:RPGに欠かせない「続きから遊ぶ」仕組み
STEP8では、2次元配列を使ったマップ探索を実装しました。
STEP9では、RPGらしさを決定づける重要な要素、
セーブ・ロードと各種イベント処理 を扱います。
RPGは一気にクリアするものではありません。
- 今日は少しだけ遊ぶ
- 強くなったらまた挑戦する。
- 失敗してもやり直せる。
こうした遊び方を可能にするのが、
セーブとロードの仕組み です。

今回のRPGでセーブする情報とは?
まずは、「何を保存する必要があるか」を整理しましょう。
このRPGでは、
ゲームの状態すべてを保存 しています。
| 保存する情報 | 内容 |
|---|---|
| プレイヤー位置 | px, py |
| マップ | 25×25の探索状況 |
| パーティ | キャラのHP・MP・レベル |
| 所持アイテム | 各アイテムの個数 |
| クリア状態 | ボス撃破フラグ |
これらを保存すれば、
完全に同じ状態から再開 できます。
ゲーム状態を1つにまとめている理由
このRPGでは、
ゲーム全体の状態を 1つの構造体 にまとめています。
この設計があるおかげで、
- セーブ処理が非常に簡単
- fwrite / fread で丸ごと保存できる。
- 保存漏れが起きにくい。
という、大きなメリットがあります。
RPG制作では、
状態管理をどう設計するかが非常に重要 です。
セーブ処理の基本的な考え方
セーブ処理で行っていることは、実はとても単純です。
- ファイルを開く
- ゲーム状態構造体を書き込む
- ファイルを閉じる。
これだけで、
現在の冒険状況がファイルに保存 されます。
特別な形式や難しい処理は使っていません。
バイナリ保存を使っている理由
このRPGでは、
テキストではなく バイナリ形式 でセーブしています。
その理由は次のとおりです。
| 理由 | 内容 |
|---|---|
| 実装が簡単 | 構造体をそのまま保存 |
| 高速 | 文字変換が不要 |
| データ量が少ない | ファイルが小さい |
学習用としては、
一番分かりやすいセーブ方式 と言えます。
ロード処理の流れ
ロード処理も、セーブとほぼ同じ考え方です。
- セーブファイルを開く
- 構造体を読み込む
- ゲーム状態に反映する
もし、
- ファイルが存在しない。
- 読み込みに失敗した。
場合は、
エラーメッセージを表示して処理を中断します。
セーブ・ロードをコマンドで行う理由
今回のRPGでは、
- s キーでセーブ
- l キーでロード
という方式を採用しています。
これは、
- いつでも保存できる。
- どこからでも再開できる。
- 操作が分かりやすい。
という利点があります。
特に学習用RPGでは、
自由に試行錯誤できる設計 が大切です。
セーブ後・ロード後にEnter待ちを入れる理由
セーブやロードを行った直後は、
Enterキー待ち を入れています。
これは、
- 成功・失敗メッセージを読める。
- 画面がすぐ切り替わらない。
ようにするためです。
こうした細かな配慮が、
遊びやすさを大きく向上 させます。
宿と教会のイベント処理
STEP9では、
マップ上の イベントマスの処理 も重要なポイントです。
宿(I)の役割
宿に入ると、
- 生存している仲間全員の
- HPとMPが全回復
します。
探索とバトルを安心して続けられる、
安全地帯 のような存在です。
教会(C)の役割
教会では、
- 戦闘不能の仲間を復活
- HPを半分で復帰
- MPは0から再スタート
という処理を行います。
これにより、
- 全滅を避けられる。
- 回復アイテムに頼りすぎなくて済む。
という、RPGらしいバランスが生まれます。
イベント処理をシンプルに保つコツ
イベント処理で大切なのは、
やることを増やしすぎない ことです。
今回のRPGでは、
- マスに入ったら即イベント
- 処理が終わったらEnter待ち
- マップに戻る。
という流れに統一しています。
これにより、
- プログラムが複雑にならない。
- デバッグがしやすい。
- 動作が安定する。
というメリットがあります。
ゲームオーバー時の処理
全滅した場合は、
- ゲームオーバー表示
- タイトル画面へ戻る
- 初期状態にリセット
という流れになります。
ここでも、
- キャラクター初期化
- マップ再読み込み
といった 既存の処理を再利用 しているのがポイントです。
セーブ機能があることで学習しやすくなる
この章のセーブ機能は、
プレイヤーのためだけでなく、学習者のため でもあります。
- 途中まで作って動作確認
- 失敗してもすぐ再開
- バグ修正の検証が楽
という、大きなメリットがあります。
STEP9で理解しておきたいポイントまとめ
STEP9で押さえておきたいポイントはこちらです。
- ゲーム状態は1つの構造体で管理する。
- セーブは構造体を丸ごと保存するだけ
- ロードは失敗時の処理が重要
- イベント処理はシンプルに統一する。
- Enter待ちは遊びやすさを向上させる。
ここまで来ると、
RPGとして「最後まで遊べる形」 が整いました 👍
