このプロジェクトでは、既存のゲーム構造を崩しすぎない範囲で、以下のGoFパターンを意識して整理しています。
対象:
src/GenerateDungeon/DungeonGenerationStrategy.hsrc/4_Dungeon.cpp
ダンジョン生成方式(区域分割法 / RRA)を IDungeonGenerationStrategy として抽象化しました。
これにより Dungeon は具体的な AreaDivide / RRA を直接 switch で扱わず、以下の共通操作だけに依存します。
generate()copyTo(...)roomCount()roomAt(...)randomFloorDataPos()
新しい生成方式を追加する場合は、Strategy実装とFactoryへの登録を追加するだけで済みます。
対象:
DungeonGenerationStrategyFactorysrc/GenerateDungeon/EnemyFactory.h
SCENE から適切な生成Strategyを作成する責務をFactoryに集約しました。
これにより、生成方式の選択ロジックが Dungeon 本体から分離され、生成方式追加時の変更範囲が小さくなります。
また、敵生成は EnemyFactory に集約しています。
従来 Dungeon 側に散らばっていた以下の処理をFactoryへまとめました。
- ランダムな敵種別の選択
Enemyインスタンスの生成- 敵スプライトクリップの設定
- スポーン座標の設定
これにより初期生成とリスポーンの重複が減り、敵生成ルールを変更する場所が明確になります。
対象:
src/Scene/Scene.hsrc/Game.cpp
各画面を Scene インターフェースで統一し、Game は現在のシーンを Scene* として操作します。
各シーンは以下を実装します。
Input(...)Update()Output()
これにより、シーンごとの大きな switch 分岐を減らし、画面ごとの振る舞いを個別クラスへ閉じ込めています。
対象:
src/GenerateDungeon/Generator.hsrc/Generator.cppsrc/AreaDivide.cppsrc/RRA.cpp
各ダンジョン生成アルゴリズムに共通する初期化手順を Generator::resetGenerationState() に集約しました。
これにより、派生クラス側の generate() は各アルゴリズム固有の生成処理に集中できます。
共通化した初期化内容:
- 床配列の初期化
- エリア数の初期化
- 初期エリアの設定
- 初期部屋の設定
- Command:
- キー入力ごとの処理をコマンドオブジェクト化する。
- Observer:
- レベルアップ、被ダメージ、敵撃破などのイベント通知に使う。
- Factory Method / Abstract Factory:
- 敵生成やUI部品生成をさらに整理する。