C言語入門|STEP4:魔法とスキルの実装-勇者・戦士・魔法使いの個性を作る

はじめに:魔法とスキルがRPGを面白くする

STEP3では、レベルアップと成長の仕組みを実装しました。
STEP4では、いよいよ バトルRPGの花形要素である「魔法とスキル」 を扱います。

単に攻撃力で殴り合うだけでは、RPGは単調になりがちです。
魔法やスキルがあることで、

  • 回復するか、攻撃するか
  • 強化するか、防御するか
  • MPを温存するか、一気に使うか

といった 戦略的な選択 が生まれます。

今回のRPGにおける魔法の基本ルール

まずは、今回のRPGでの魔法ルールを整理しましょう。

項目内容
魔法数各キャラ4つ
使用条件MPを消費
種類攻撃・回復・強化
職業依存職業ごとに内容が違う

魔法は「誰でも自由に覚える」のではなく、
職業ごとに最初から決め打ち されています。

これは、学習用としても、ゲーム設計としても分かりやすい構成です。

魔法の種類を列挙型で表現する

魔法には、役割の違いがあります。

  • 敵にダメージを与える魔法
  • 仲間を回復する魔法
  • 自分を強化する魔法

これらを区別するために、魔法タイプ という考え方を導入します。

魔法タイプの考え方

種類役割
ダメージ敵にダメージを与える。
回復仲間のHPを回復する。
強化攻撃力上昇・防御状態

列挙型を使うことで、

  • 処理の分岐が分かりやすい
  • if や switch が整理される
  • 魔法の種類が増えても対応しやすい

という利点があります。

魔法を構造体で表現する理由

魔法には、名前だけでなく、
さまざまな情報が必要です。

今回のRPGでは、魔法1つにつき次の情報を持っています。

項目内容
名前表示用の魔法名
タイプ攻撃・回復・強化
消費MP使用時に減るMP
威力ダメージ量や回復量

これらをひとまとめに扱うために、魔法専用の構造体を使います。

構造体にしておくことで、

  • 魔法を配列で管理できる。
  • キャラクターに簡単に持たせられる。
  • 処理を共通化できる。

といったメリットが生まれます。

キャラクターが魔法を持つ設計

今回の設計では、
魔法はキャラクター構造体の中に直接持たせています

つまり、

  • キャラクター1人につき
  • 魔法4つ分の配列

を保持している形です。

この設計により、

  • 魔法リストを毎回探す必要がない。
  • 職業ごとの個性を明確にできる。
  • バトル処理がシンプルになる。

という利点があります。

職業ごとの魔法構成を見てみよう

ここで、各職業の魔法構成を確認してみましょう。

勇者の魔法

種類役割
回復魔法仲間を回復できる
攻撃魔法魔法攻撃も可能
防御系被ダメージ軽減
高威力MP消費が重い

万能型 らしく、何でもこなせる構成です。

戦士のスキル

種類役割
攻撃スキル物理寄りの強攻撃
強化攻撃力アップ
防御防御状態付与
高威力技一撃が重い

戦士は 自己強化と前線維持 が得意です。

魔法使いの魔法

種類役割
属性攻撃安定した魔法ダメージ
高威力魔法MP消費が大きい
回復魔法パーティの支援
魔力依存MAGが重要

魔法使いは 火力と支援を担う後衛 という位置付けです。

魔法使用時に行われる処理の流れ

魔法を使うとき、プログラムでは次のような処理が行われます。

  1. 魔法番号の選択
  2. MPが足りているか確認
  3. MPを消費
  4. 魔法タイプに応じた処理
  5. 結果を画面に表示

この流れを 1つの共通関数 にまとめているのがポイントです。

攻撃魔法の処理の考え方

攻撃魔法では、

  • キャラクターの魔力
  • 魔法の威力

を組み合わせて、ダメージを計算します。

さらに、

  • 敵が防御中ならダメージ半減
  • HPが0未満にならないよう補正

といった ゲーム的な配慮 も入っています。

回復魔法の処理の考え方

回復魔法では、

  • 回復対象を選択
  • HPを増やす。
  • 最大HPを超えないよう制限

という処理を行います。

このとき、

  • 戦闘不能の仲間は回復できない

というルールを入れることで、
教会イベントの意味 が生きてきます。

強化・防御系魔法の扱い方

強化系魔法では、

  • 攻撃力を一時的に上げる。
  • 防御状態フラグを立てる。

といった処理を行います。

特に防御状態は、

  • 次の攻撃1回だけ有効
  • ダメージ計算時に半減

というシンプルな設計になっています。

これにより、
処理が複雑になりすぎず、分かりやすい挙動になります。

なぜ魔法数を4つに固定しているのか

魔法を自由に増やせる設計も可能ですが、
今回は あえて4つに固定 しています。

その理由は次のとおりです。

理由内容
学習向け配列サイズが分かりやすい。
UI簡単選択肢が多すぎない。
処理簡潔バグが入りにくい。

まずは 確実に動く設計 を作ることが大切です。

STEP4で理解しておきたいポイントまとめ

STEP4で押さえておきたいポイントはこちらです。

  • 魔法は攻撃・回復・強化に分類できる。
  • 列挙型で魔法タイプを管理すると分かりやすい。
  • 魔法は構造体で定義すると扱いやすい。
  • キャラクターが魔法を直接持つ設計はシンプル。
  • 共通の魔法処理関数で実装すると拡張しやすい。

ここまで来ると、
RPGらしい戦略性が一気に増してきます 👍