
C言語入門|STEP2:キャラクターと職業を定義しよう-構造体と列挙型でパーティを作る
はじめに:RPGの主役はキャラクター
STEP1では、バトルRPG全体の流れと構成を確認しました。
STEP2では、いよいよ RPGの主役であるキャラクター をプログラムで表現していきます。
RPGでは、
- 勇者はバランス型
- 戦士は攻撃力が高い
- 魔法使いは魔法が得意
といったように、職業ごとに役割がはっきり分かれています。
この個性をC言語で表現するのが、STEP2のテーマです。

今回のパーティ構成を確認しよう
今回のRPGでは、パーティは固定で 3人 です。
| キャラクター | 職業 | 特徴 |
|---|---|---|
| 勇者 | HERO | 攻守バランス型 |
| 戦士 | WARRIOR | 高HP・高攻撃力 |
| 魔法使い | MAGE | 高MP・高魔力 |
この3人を 配列+構造体 で管理します。
職業を列挙型で定義する理由
まずは「職業」をどう表すかを考えましょう。
C言語では、
文字列で "勇者" や "戦士" を扱うこともできますが、
数値で管理したほうが安全で高速です。
そこで使うのが 列挙型(enum) です。
職業の定義イメージ
| 値 | 意味 |
|---|---|
| 0 | 勇者 |
| 1 | 戦士 |
| 2 | 魔法使い |
これを enum でまとめることで、
- 書き間違いを防げる。
- switch や if で分岐しやすい。
- 配列インデックスとして使える。
といったメリットがあります。
キャラクターを構造体で表現する
次に、キャラクターそのものを表現します。
RPGのキャラクターは、
名前・HP・MP・攻撃力・レベルなど、
たくさんの情報をひとまとめで扱う必要があります。
そこで登場するのが 構造体(struct) です。
キャラクター構造体が持つ情報
今回のキャラクター構造体には、次のような情報が含まれています。
| 項目 | 内容 |
|---|---|
| 名前 | 表示用のキャラ名 |
| 職業 | 勇者・戦士・魔法使い |
| レベル | 現在の成長段階 |
| HP / MP | 体力と魔力 |
| 最大HP / 最大MP | 上限値 |
| 攻撃力 | 物理攻撃の基礎 |
| 魔力 | 魔法ダメージの基礎 |
| 装備補正 | 武器・杖による上昇分 |
| 生存状態 | 戦闘不能かどうか |
| 経験値 | レベルアップ用 |
| 防御状態 | 次の被ダメージ軽減 |
| 魔法 | そのキャラ専用の魔法 |
このように見ると、
RPGキャラクターの要素がすべて詰まっていることが分かりますね。
なぜ base と 装備 を分けているのか
構造体を見ると、
- base_atk
- weapon_atk
- base_magic
- staff_magic
のように、能力値が分かれています。
これはとても重要な設計です。
分けておくメリット
| 項目 | 理由 |
|---|---|
| 基礎能力 | レベルアップで増える。 |
| 装備補正 | 武器を変えたら差し替えるだけ。 |
| 合計値 | 計算式で簡単に求められる。 |
これにより、
- 装備を外しても基礎能力は戻る。
- 強い武器を持たせても処理が簡単
- 将来の拡張がしやすい。
という、ゲームらしい設計が実現できます。
パーティを配列で管理する考え方
今回のRPGでは、キャラクターは 最大3人 と決まっています。
そこで、
- キャラクター構造体 × 3
- 配列でまとめて管理
という方法を使います。
パーティ管理のイメージ
| インデックス | キャラクター |
|---|---|
| 0 | 勇者 |
| 1 | 戦士 |
| 2 | 魔法使い |
この方法なら、
- for文で全員処理できる。
- 生存チェックが簡単
- バトル処理がスッキリ
といった利点があります。
キャラクター初期化の考え方
ゲーム開始時には、
全キャラクターを初期状態に戻す処理が必要です。
ここで行っているのは、
- 名前の設定
- 職業の設定
- 初期HP / MPの設定
- 生存状態を生きているにする。
- 魔法リストの初期化
といった処理です。
初期化を1か所にまとめておくことで、
- ゲームオーバー後の再スタート
- ロード失敗時のリセット
なども、簡単に対応できます。
魔法データをキャラクターが持つ理由
今回の設計では、
魔法はキャラクターごとに4つ固定で持つ形になっています。
これは、
- 職業ごとの個性を明確にする。
- バトル中の選択肢をシンプルにする。
- 複雑な魔法管理を避ける。
ためです。
結果として、
- 勇者は回復も攻撃もできる。
- 戦士は自己強化が得意
- 魔法使いは攻撃魔法と回復を担当
という役割分担が自然に表現できます。
STEP2で理解しておきたいポイントまとめ
STEP2で押さえておきたいポイントはこちらです。
- 職業は enum で定義すると安全
- キャラクターは struct でまとめて管理
- 能力値は 基礎 と 装備 を分ける
- パーティは配列で扱うと処理が楽
- 初期化処理は関数にまとめると便利
ここまで理解できれば、
RPGの登場人物をC言語で表現できるようになったと言えます 👍
