コンテンツにスキップ

総合演習

各カテゴリの演習(下のリンク一覧)を終えた人向けの、分野横断の総合問題です。解答は answers.md にあります。

カテゴリ別演習へのリンク

カテゴリ 演習
第1部 設計の基礎 exercises
第2部 SOLID exercises
第3部 GoFパターン exercises
第4部 ゲームパターン exercises
第5部 C++言語 exercises
第6部 C++内部 exercises
第7部 メモリと実行時 exercises
第8部 ビルド exercises
第9部 Unity/C# exercises
第10部 UE exercises
第11部 ケーススタディ exercises
第12部 判断ガイド exercises

総合問題(全分野横断)

総合1. 設計レビュー(読解+診断)

あるプロジェクトのコードレビューで、次のクラスに出会いました。

// C++20
class GameManager {
public:
    static GameManager* instance;
    std::vector<Enemy*> enemies;            // newした敵を格納
    void Update(float dt) {
        for (auto* e : enemies) {
            e->hp -= poisonActive ? 1 : 0;
            if (e->hp <= 0) { enemies.erase(std::find(enemies.begin(), enemies.end(), e));
                              scoreLabel->SetText(std::to_string(++score)); }
        }
        if (Input::GetKey(Key::S)) SaveToFile();
    }
    void SaveToFile();                      // 構造体をfwriteで直書き
    bool poisonActive = false;
    int score = 0;
    TextLabel* scoreLabel;
};

: 問題点を「設計(責務・依存)」「C++の正しさ(所有権・イテレータ・UB)」「保守(セーブ互換)」の3観点で列挙し、優先度順の改善計画(3ステップ)を書いてください。

総合2. 仕組みの説明(C++内部)

std::vector<std::unique_ptr<Enemy>> enemies;push_back(std::make_unique<Boss>()) する」— この1行について、次を説明してください。

  1. コンパイル時に何が起きるか(テンプレートの実体化はどの型に対して起きるか)
  2. 実行時のメモリはどこに何が置かれるか(スタック/ヒープ、vectorの中身は何か)
  3. enemies.clear() で何がどの順で起きるか(unique_ptr・仮想デストラクタとの関係)

総合3. パターン選定(設計判断)

「ローグライトの装備品: 拾う・装備する・パッシブ効果(攻撃+X%等)が重複して乗る・種類は運用で毎週追加」という要件に対し、使う道具を第3部・第4部から3つ以内選び、それぞれ「何の問題に対して」使うのかを明記して全体構成図を書いてください。「使わないことにした候補」も1つ挙げ、理由を書いてください。

総合4. クロスエンジン設計(Unity→UE)

Unityで実装済みの「敵死亡→イベント発行→実績/クエスト/UIが購読」システム(C# event+ScriptableObjectチャネル)をUEに移植します。対応する仕組みの選定(Delegate種別、Subsystem等)と、移植で設計変更が必要になる点(GC・リフレクション・例外方針の違いから来るもの)を2つ挙げてください。

総合5. バグ調査総合(症状→原因→ツール)

リリースビルドのみで発生する次の症状の調査計画を立ててください:「長時間プレイ後、特定の敵を倒した瞬間に、まれに無関係なUIのテキストが化けてクラッシュする」。

  • 疑うべきバグの種類(候補2つ以上、優先度つき)
  • それぞれの検証手段(ツール・ビルド設定)
  • 恒久対策の方向性

総合6. ミニプロジェクト(実装)

samples/ の部品を組み合わせて「ウェーブサバイバル」の骨格を完成させてください(第11部演習 問7と共通)。追加要件:


目次に戻る | 解答へ