STEP15:ゲーム全体像の解説(探索→イベント→戦闘→成長→クリアの流れ)

STEP15では、完成したマップ探索RPGが 「どんな順番で動いているか」 を、上から下まで一本の流れとして整理します。
コードを読むときも改造するときも、まずはここを押さえると迷子になりません。

ゲーム全体フロー(超要約)

このゲームは、ざっくり言うと次のループです。

  1. タイトル画面
  2. 初期化(所持品・パーティ・マップ)
  3. 探索(移動)
  4. マスのイベント発生(敵・宝箱・施設・ボス)
  5. 戦闘 → 勝利報酬 → 経験値で成長
  6. ボス撃破でクリア → エンディング

全体像を「1枚の流れ図」で把握する

探索→イベント→戦闘→成長→クリア

フェーズ主な場所主役の層何が起きる?
タイトルui.cuiスタート/遊び方/終了
初期化main.citems / characters / map所持品初期化・パーティ作成・マップ生成
探索ループmain.c + map.cmap / input / uiマップ描画→入力→移動
イベント判定main.cmap / services / items / battle止まったマスが何かで処理分岐
戦闘battle.cbattle / enemies / characters / itemsターン制、AI、勝利処理
成長characters.ccharacters経験値→レベルアップ→魔法追加
クリアui.cuiボス撃破→エンディング

探索フェーズの流れ(探索ループの心臓)

探索ループは main.c の中でずっと回っています。

探索ループがやっていること

手順内容関連関数
1画面クリアしてマップ表示clear_screen / map_draw
2ステータス表示characters_print_status
3入力受付(8/2/4/6/M/I/Q)input_read_command
4移動先の判定(壁なら拒否)map_get / map_in_bounds
5移動成功→イベント判定へTileKind で分岐

イベント判定(止まったマスの種類で分岐)

マス表示起きること主な関数
#通れないmap_get
.何も起きない-
E戦闘開始→勝てば床になるbattle_random_encounter / map_set
宝箱C固定アイテム獲得→開封済みになるmap_open_chest / items_add
宿Iお金を払って全回復services_inn
教会Hお金を払って復活services_church
ボスBマスタードラゴン戦→勝てばクリアbattle_boss_master_dragon

イベントフェーズの見どころ(宝箱と施設)

宝箱(固定配置+固定報酬)

宝箱は map.c が「座標で中身を決める」方式です。

  • map_open_chest(m, x, y)
    • 未開封なら opened を true にする
    • 座標ごとの固定報酬を返す
  • main.c 側で items_add して所持品に入れる

ポイント
「固定配置」は演習向きです。毎回同じ場所に同じ報酬があるので、デバッグしやすいです。

宿(全回復)と教会(復活)

施設条件効果関数
宿所持金が足りるパーティ全員HP/MP全回復characters_full_heal
教会戦闘不能がいる+所持金死亡キャラをHP50%で復活characters_revive

ゲーム体験としての役割

  • 宿:探索を続けるためのリセット地点
  • 教会:全滅後に立て直す救済(ただし費用が高い)

戦闘フェーズの流れ(battle.cの全体像)

戦闘は battle.c の battle_core が中心です。

戦闘開始まで

種類呼び出し元戦闘開始関数敵の準備
通常戦探索でEに乗るbattle_random_encounterenemies_create_random_by_floor
ボス戦Bに乗るbattle_boss_master_dragonenemies_create_boss_master_dragon

ターン制の基本構造

1ターンの中でやることはこうです。

  1. 生存チェック(全滅/敵全滅)
  2. 行動順を作る(SPD+ランダム補正で並べ替え)
  3. 順番に行動
  4. ターン終了処理(防御解除、バフ残りターン減少)
  5. 次ターンへ

味方の行動(プレイヤー選択)

行動内容主な処理
Attack対象を選んで物理ダメージdo_attack_char_to_enemy
Skill魔法(攻撃/回復/強化/防御強化)cast_spell_char
Itemポーション/エーテル等を使用use_item_in_battle
Defend被ダメ軽減(次ターンで解除)defending フラグ
Run逃走(通常戦のみ想定)※改善ポイントあり

装備補正

  • 物理攻撃:武器 power をATKに加算
  • 魔法攻撃:杖 magpow をMAGに加算
  • 防御:盾 power をDEFに加算

敵AI(HP割合・ランダム性・防御行動)

敵AIは「完全固定」だと単調になるので、ランダムを混ぜています。

AIの判断意味
HPが低いなら回復優先HP<=35%で回復を狙う生存力を上げる
たまに防御15%でdefend長期戦になる
たまに攻撃魔法20%で攻撃魔法単調さを消す
ボスは周期技3ターンごとにブレス“ボスっぽさ”演出

成長フェーズ(勝利→報酬→レベルアップ)

敵を倒すと battle.c が報酬をまとめ、characters.c に経験値を渡します。

勝利報酬の流れ

処理内容主な関数
勝利判定敵が全滅したら勝ちalive_enemy_count
報酬合計EXP/GOLDを合算distribute_rewards
お金加算所持金が増えるinv->gold +=
経験値付与生存メンバーに付与characters_gain_exp
レベルアップ必要経験値を越えたら成長level_up

レベルアップで何が変わる?

変化内容
最大HP/MP増加戦闘が安定する
ATK/DEF/MAG等増加火力や耐久が上がる
魔法追加(条件付き)例:Hero Lv4で全体回復など

クリアまでの“導線”を整理する(プレイの目的)

このゲームの目的はシンプルです。

  • 探索して強くなる。
  • 宝箱で回復や装備を揃える。
  • 宿と教会で立て直しながら進む。
  • 最奥のBでボスを倒す。
  • エンディングへ

迷ったら「右下(MAP_H-3, MAP_W-3)付近にB」があります。

改造・拡張するときの読み順(おすすめ)

「どこから読めばいいか」を迷わないための順番です。

  1. main.c(探索ループの本体)
  2. map.c(イベントが置いてある)
  3. battle.c(戦闘の全体構造)
  4. characters.c(成長と魔法)
  5. enemies.c(敵の種類とボス)
  6. items.c / services.c / ui.c(周辺要素)

改善ポイント

この完成版は学習向けに簡潔に作っているので、次の拡張が自然です。

  • Run(逃走)を戻り値で正しく処理(battle_coreに「逃走成功」を返す)
  • 装備変更UIを追加(インベントリ→装備/外す)
  • 敵マスを「ランダム湧き」にする(一定歩数でE生成)
  • 状態異常(毒/麻痺/沈黙)
  • スキルの属性(炎/氷)と弱点