
C言語入門|STEP8:マップ探索の実装-2次元配列でフィールドを歩き回る
はじめに:RPGらしさを生むのは「探索」
STEP7では、アイテムと装備システムを実装しました。
STEP8では、いよいよ プレイヤーが世界を歩き回る「マップ探索」 を扱います。
RPGにおいて探索は、
- 次にどこへ行くか考える楽しさ
- 敵や宝箱に出会うワクワク感
- ボスに近づいていく緊張感
を生み出す、とても重要な要素です。
このSTEPでは、
- マップの表現方法
- プレイヤーの移動処理
- マスごとのイベント判定
を順番に見ていきましょう。

今回のRPGにおけるマップの仕様
まずは、マップの基本仕様を整理します。
| 項目 | 内容 |
|---|---|
| サイズ | 縦25 × 横25 |
| 表現方法 | 文字の2次元配列 |
| 移動方式 | 上下左右のみ |
| 壁 | 通過不可 |
| イベント | マスの記号で判定 |
シンプルですが、
RPGとして必要十分な構成 になっています。
2次元配列でマップを表現する考え方
今回のマップは、
char型の2次元配列 で表現されています。
考え方はとてもシンプルです。
| 文字 | 意味 |
|---|---|
| # | 壁 |
| 空白 | 通路 |
| E | 敵 |
| T | 宝箱 |
| I | 宿 |
| C | 教会 |
| B | ボス |
「1マス=1文字」と考えることで、
マップを直感的に扱えるようになります。
マップをテンプレートとして用意する理由
マップは、
あらかじめ完成した形をテンプレートとして用意 しています。
これにより、
- 毎回同じ地形で遊べる。
- デバッグがしやすい。
- 宝箱やボスの位置を固定できる。
といったメリットがあります。
学習用RPGとして、とても扱いやすい設計です。
プレイヤー位置を数値で管理する
プレイヤーの位置は、
- 縦方向
- 横方向
を 2つの整数値 で管理しています。
位置管理のイメージ
| 変数 | 意味 |
|---|---|
| px | 縦方向の位置 |
| py | 横方向の位置 |
マップ配列の添字と一致しているため、
位置判定やイベント処理がとても簡単になります。
移動操作の考え方
移動操作は、昔ながらの テンキー方式 です。
| 入力 | 移動方向 |
|---|---|
| 8 | 上 |
| 2 | 下 |
| 4 | 左 |
| 6 | 右 |
入力に応じて、
- 仮の移動先を計算
- マップ範囲内かチェック
- 壁でなければ移動確定
という流れで処理しています。
壁判定を入れる理由
移動処理で最も重要なのが 壁判定 です。
壁判定を入れないと、
- マップ外に出てしまう
- 壁をすり抜けてしまう
といった問題が起こります。
そのため、
- マップ範囲チェック
- 壁文字かどうかの確認
を必ず行っています。
マップの描画処理の考え方
マップ表示は、
- 上から順に
- 左から右へ
2重ループで描画しています。
描画時には、
- プレイヤー位置なら @
- それ以外はマップの文字
を表示します。
さらに、
記号ごとに色を変えて表示 することで、
視認性を高めています。
マスに入ったときのイベント判定
プレイヤーが移動したあと、
今いるマスの文字を調べてイベントを発生 させます。
| マス | 発生する処理 |
|---|---|
| T | 宝箱を開く |
| I | 宿で回復 |
| C | 教会で復活 |
| E | 敵とバトル |
| B | ボス戦 |
この仕組みがあることで、
マップとゲーム進行が自然につながる ようになります。
宝箱を一度きりにしている理由
宝箱を開けたあとは、
そのマスを 空白に書き換え ています。
これにより、
- 同じ宝箱を何度も開けられない。
- 一度きりのイベントになる。
という、RPGらしい挙動になります。
敵の再出現処理について
敵と戦って勝利すると、
- そのマスの敵は消える。
- 別の場所に新しい敵が配置される。
という処理が行われます。
これにより、
- マップが敵だらけにならない。
- 探索と戦闘のバランスが保たれる。
ようになっています。
ボスマスを特別扱いする理由
ボスがいるマスは、
- 通常の敵とは別処理
- 勝利するとエンディングへ
という 特別な扱い をしています。
ただし、
- 移動
- マップ判定
の仕組み自体は同じなので、
プログラムが複雑になりすぎません。
マップ探索がゲーム全体をつないでいる
STEP8までで分かるように、
マップ探索は、
- バトル
- アイテム
- 回復
- ボス戦
といった すべての要素をつなぐハブ になっています。
2次元配列というシンプルな仕組みでも、
ここまでRPGらしい世界を作れるのは、
C言語学習としても大きなポイントです。
STEP8で理解しておきたいポイントまとめ
STEP8で押さえておきたいポイントはこちらです。
- マップは2次元配列で表現できる。
- プレイヤー位置は数値で管理する。
- 移動前に範囲と壁チェックが必須
- マスの文字でイベントを判定する。
- 探索がRPG全体の流れを支えている。
ここまで来ると、
RPGとしての骨格はほぼ完成 しています 👍
