
C言語入門|STEP4:魔法とスキルの実装-勇者・戦士・魔法使いの個性を作る
はじめに:魔法とスキルがRPGを面白くする
STEP3では、レベルアップと成長の仕組みを実装しました。
STEP4では、いよいよ バトルRPGの花形要素である「魔法とスキル」 を扱います。
単に攻撃力で殴り合うだけでは、RPGは単調になりがちです。
魔法やスキルがあることで、
- 回復するか、攻撃するか
- 強化するか、防御するか
- MPを温存するか、一気に使うか
といった 戦略的な選択 が生まれます。

今回のRPGにおける魔法の基本ルール
まずは、今回のRPGでの魔法ルールを整理しましょう。
| 項目 | 内容 |
|---|---|
| 魔法数 | 各キャラ4つ |
| 使用条件 | MPを消費 |
| 種類 | 攻撃・回復・強化 |
| 職業依存 | 職業ごとに内容が違う |
魔法は「誰でも自由に覚える」のではなく、
職業ごとに最初から決め打ち されています。
これは、学習用としても、ゲーム設計としても分かりやすい構成です。
魔法の種類を列挙型で表現する
魔法には、役割の違いがあります。
- 敵にダメージを与える魔法
- 仲間を回復する魔法
- 自分を強化する魔法
これらを区別するために、魔法タイプ という考え方を導入します。
魔法タイプの考え方
| 種類 | 役割 |
|---|---|
| ダメージ | 敵にダメージを与える。 |
| 回復 | 仲間のHPを回復する。 |
| 強化 | 攻撃力上昇・防御状態 |
列挙型を使うことで、
- 処理の分岐が分かりやすい
- if や switch が整理される
- 魔法の種類が増えても対応しやすい
という利点があります。
魔法を構造体で表現する理由
魔法には、名前だけでなく、
さまざまな情報が必要です。
今回のRPGでは、魔法1つにつき次の情報を持っています。
| 項目 | 内容 |
|---|---|
| 名前 | 表示用の魔法名 |
| タイプ | 攻撃・回復・強化 |
| 消費MP | 使用時に減るMP |
| 威力 | ダメージ量や回復量 |
これらをひとまとめに扱うために、魔法専用の構造体を使います。
構造体にしておくことで、
- 魔法を配列で管理できる。
- キャラクターに簡単に持たせられる。
- 処理を共通化できる。
といったメリットが生まれます。
キャラクターが魔法を持つ設計
今回の設計では、
魔法はキャラクター構造体の中に直接持たせています。
つまり、
- キャラクター1人につき
- 魔法4つ分の配列
を保持している形です。
この設計により、
- 魔法リストを毎回探す必要がない。
- 職業ごとの個性を明確にできる。
- バトル処理がシンプルになる。
という利点があります。
職業ごとの魔法構成を見てみよう
ここで、各職業の魔法構成を確認してみましょう。
勇者の魔法
| 種類 | 役割 |
|---|---|
| 回復魔法 | 仲間を回復できる |
| 攻撃魔法 | 魔法攻撃も可能 |
| 防御系 | 被ダメージ軽減 |
| 高威力 | MP消費が重い |
万能型 らしく、何でもこなせる構成です。
戦士のスキル
| 種類 | 役割 |
|---|---|
| 攻撃スキル | 物理寄りの強攻撃 |
| 強化 | 攻撃力アップ |
| 防御 | 防御状態付与 |
| 高威力技 | 一撃が重い |
戦士は 自己強化と前線維持 が得意です。
魔法使いの魔法
| 種類 | 役割 |
|---|---|
| 属性攻撃 | 安定した魔法ダメージ |
| 高威力魔法 | MP消費が大きい |
| 回復魔法 | パーティの支援 |
| 魔力依存 | MAGが重要 |
魔法使いは 火力と支援を担う後衛 という位置付けです。
魔法使用時に行われる処理の流れ
魔法を使うとき、プログラムでは次のような処理が行われます。
- 魔法番号の選択
- MPが足りているか確認
- MPを消費
- 魔法タイプに応じた処理
- 結果を画面に表示
この流れを 1つの共通関数 にまとめているのがポイントです。
攻撃魔法の処理の考え方
攻撃魔法では、
- キャラクターの魔力
- 魔法の威力
を組み合わせて、ダメージを計算します。
さらに、
- 敵が防御中ならダメージ半減
- HPが0未満にならないよう補正
といった ゲーム的な配慮 も入っています。
回復魔法の処理の考え方
回復魔法では、
- 回復対象を選択
- HPを増やす。
- 最大HPを超えないよう制限
という処理を行います。
このとき、
- 戦闘不能の仲間は回復できない
というルールを入れることで、
教会イベントの意味 が生きてきます。
強化・防御系魔法の扱い方
強化系魔法では、
- 攻撃力を一時的に上げる。
- 防御状態フラグを立てる。
といった処理を行います。
特に防御状態は、
- 次の攻撃1回だけ有効
- ダメージ計算時に半減
というシンプルな設計になっています。
これにより、
処理が複雑になりすぎず、分かりやすい挙動になります。
なぜ魔法数を4つに固定しているのか
魔法を自由に増やせる設計も可能ですが、
今回は あえて4つに固定 しています。
その理由は次のとおりです。
| 理由 | 内容 |
|---|---|
| 学習向け | 配列サイズが分かりやすい。 |
| UI簡単 | 選択肢が多すぎない。 |
| 処理簡潔 | バグが入りにくい。 |
まずは 確実に動く設計 を作ることが大切です。
STEP4で理解しておきたいポイントまとめ
STEP4で押さえておきたいポイントはこちらです。
- 魔法は攻撃・回復・強化に分類できる。
- 列挙型で魔法タイプを管理すると分かりやすい。
- 魔法は構造体で定義すると扱いやすい。
- キャラクターが魔法を直接持つ設計はシンプル。
- 共通の魔法処理関数で実装すると拡張しやすい。
ここまで来ると、
RPGらしい戦略性が一気に増してきます 👍
