SDL2を使ったC++製のローグライクゲームです。 自動生成されるダンジョンを探索し、敵を倒して経験値を得ながら最下層を目指します。
- ゲーム内容
- 操作方法
- ダンジョン生成方法
- キャラクター・敵データ
- 必要環境
- CMakeでのコンパイル・実行方法
- Makefileでのコンパイル・実行方法
- AppImageでの実行方法
- テスト
- ディレクトリ構成
- 設計メモ
- 既知の注意点
プレイヤー born を操作して、ランダム生成されるダンジョンを探索するゲームです。
- ダンジョンは40x40マスで生成されます。
- プレイヤーは敵を倒すとEXPを獲得します。
- 一定EXPを得るとレベルアップします。
- 階段に到達すると次の階層へ進みます。
- 最下層は
10Fです。 - プレイヤーのHPが0以下になるとゲームオーバーです。
- 10Fを突破すると
Congratulations画面へ進みます。
- ターン制で進行します。プレイヤーが1回行動すると、続いて敵全員が行動します。
- 移動先に敵がいる方向へ進もうとすると攻撃になります。
- ダメージは次の式で計算されます。
ダメージ = 攻撃側のATK - (防御側のDEF / 2)
- 計算結果が0以下の場合でも、ダメージは最低1になります。
- 表中の
ATKは内部的な攻撃力(STR)、DEFは防御力(VIT)に対応します。 - プレイヤーは、行動しなかったターン、または3ターンごとにHPが1回復します。
- 倒した敵は、別の種類の敵としてダンジョン内に再出現します。
プレイヤーは以下のEXPでレベルアップします。
必要EXP = 現在のレベル * 100
例:
- Lv.1 → Lv.2: 100EXP
- Lv.2 → Lv.3: 200EXP
- Lv.3 → Lv.4: 300EXP
レベルアップすると、以下のようにステータスが上昇します。
| 項目 | 上昇量 |
|---|---|
| 最大HP | +10 |
| ATK(STR) | +2 |
| DEF(VIT) | +2 |
レベルアップ時は、上昇分だけ現在HPも回復します。
| キー | 内容 |
|---|---|
Esc |
ゲーム終了 |
| キー | 内容 |
|---|---|
S |
ゲーム開始 |
| キー | 内容 |
|---|---|
Enter |
ダンジョンメニューへ移動 |
| キー | 内容 |
|---|---|
1 |
区域分割法のダンジョンを開始 |
2 |
RRAのダンジョンを開始 |
| キー | 内容 |
|---|---|
W / ↑ |
上へ移動 |
A / ← |
左へ移動 |
S / ↓ |
下へ移動 |
D / → |
右へ移動 |
Space |
その場でターン経過 |
Q |
ダンジョンを中断してホームへ戻る |
| キー | 内容 |
|---|---|
1 |
ホーム画面へ戻る |
2 |
ダンジョンメニューへ戻る |
このゲームでは2種類のダンジョン生成方式を選べます。
| 生成方法 | 内容 |
|---|---|
| 区域分割法 | マップ全体を複数の区域に分割し、各区域に部屋と通路を作る方式です。 |
| RRA | Random Room Assignmentの略です。ランダムに部屋を配置し、部屋同士を通路で接続します。 |
| 名前 | アイコン | HP | ATK | DEF | EXP |
|---|---|---|---|---|---|
| born | ![]() |
100 | 20 | 20 | なし |
敵はダンジョン内に同時に10体出現します。 敵はプレイヤーを一定範囲内で発見すると追跡します。
| 敵の種族 | アイコン | HP | ATK | DEF | EXP |
|---|---|---|---|---|---|
| deka | ![]() |
70 | 10 | 20 | 10 |
| guri | ![]() |
30 | 25 | 5 | 17 |
| jelyf | ![]() |
40 | 20 | 5 | 7 |
| yummy | ![]() |
100 | 5 | 5 | 18 |
| crystal | ![]() |
50 | 1 | 30 | 10 |
| grosspider | ![]() |
40 | 7 | 7 | 7 |
| iron | ![]() |
50 | 10 | 10 | 15 |
| tatsu | ![]() |
30 | 20 | 15 | 7 |
| ball | ![]() |
20 | 15 | 20 | 5 |
- C++17対応コンパイラ
- CMake 3.15以上
- SDL2
- SDL2_image
- SDL2_ttf
- SDL2_mixer
テストは tests/include 以下の簡易SDLスタブを使うため、SDL2開発ライブラリが無い環境でも一部ビルドできます。
推奨はCMakeを使ったビルドです。
MSYS2 UCRT64シェルを開き、必要なパッケージをインストールします。
pacman -S --needed \
mingw-w64-ucrt-x86_64-gcc \
mingw-w64-ucrt-x86_64-cmake \
mingw-w64-ucrt-x86_64-ninja \
mingw-w64-ucrt-x86_64-SDL2 \
mingw-w64-ucrt-x86_64-SDL2_image \
mingw-w64-ucrt-x86_64-SDL2_ttf \
mingw-w64-ucrt-x86_64-SDL2_mixer \
mingw-w64-ucrt-x86_64-pkgconfsudo apt install cmake g++ ninja-build \
libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-devcmake -S . -B build -DCMAKE_BUILD_TYPE=Debug
cmake --build buildビルド後、実行ファイルの隣に assets ディレクトリが自動コピーされます。
実行:
./build/rogueWindowsのNinja/Makefiles系ジェネレータでは通常以下です。
.\build\rogue.exeVisual Studioなどのマルチ構成ジェネレータでは、以下のように構成名の下に出力される場合があります。
.\build\Debug\rogue.exeCMake 3.21以上かつNinjaが利用できる環境では、同梱の CMakePresets.json を使えます。
Debugビルド:
cmake --preset debug
cmake --build --preset debug
ctest --preset debugReleaseビルド:
cmake --preset release
cmake --build --preset releaseSDL2なしでテストだけ確認する場合:
cmake --preset tests-only
cmake --build --preset tests-only
ctest --preset tests-only| オプション | 既定値 | 内容 |
|---|---|---|
ROGUE_BUILD_GAME |
ON |
ゲーム本体をビルドします。 |
ROGUE_BUILD_TESTS |
BUILD_TESTING に依存 |
テストをビルドします。 |
ROGUE_COPY_ASSETS |
ON |
ビルド後に assets を実行ファイル横へコピーします。 |
例:
cmake -S . -B build-tests -DROGUE_BUILD_GAME=OFF -DROGUE_BUILD_TESTS=ON
cmake --build build-tests
ctest --test-dir build-tests --output-on-failureLinuxやMSYS2など、make と sdl2-config が使える環境ではMakefileも利用できます。
make link実行:
./roguemake domake releasemake debugmake cleanリリースページからAppImageをダウンロードして実行します。
chmod +x Rogue-1.0.5-x86_64.AppImage
./Rogue-1.0.5-x86_64.AppImageAppImageを作成する場合は以下を使います。
make appimagecmake -S . -B build-tests -DROGUE_BUILD_GAME=OFF -DROGUE_BUILD_TESTS=ON
cmake --build build-tests
ctest --test-dir build-tests --output-on-failureまたは:
cmake --preset tests-only
cmake --build --preset tests-only
ctest --preset tests-onlymake testプレイヤー関連テストのみ:
make test_player.
├── assets/ # ゲームで使用する画像・音声・フォントなど
├── docs/ # 設計メモなど
├── sample/ # README用サンプル画像
├── src/ # ゲーム本体ソース
│ ├── Functions/ # 汎用関数・ユーティリティ
│ ├── GenerateDungeon/ # ダンジョン生成、キャラクター、敵、タイルなど
│ ├── Scene/ # 画面・シーン
│ └── UI/ # ボタン、ログ表示
├── tests/ # テストコードとSDLスタブ
├── CMakeLists.txt # CMakeビルド設定
├── CMakePresets.json # CMakeプリセット
├── Makefile # Makefileビルド設定
└── README.md
GoFデザインパターンを意識した設計メモは以下にまとめています。
現在、主に以下のパターンを意識しています。
- Strategy
- Factory
- State
- Template Method
- 実行には
assetsディレクトリが必要です。CMakeビルドでは自動コピーされます。 - Makefileは
sdl2-configを利用するため、環境によってはCMakeの方が簡単です。 - Windows環境では、生成された
.exeがアプリケーション制御ポリシーにより実行ブロックされる場合があります。 - 以前のREADMEに「たまに壁の中に敵が湧きます」と記載がありました。現在の実装では床・通路・階段上にスポーンする判定がありますが、生成結果や当たり判定まわりは引き続き確認が必要です。










