Skip to content

Latest commit

 

History

History
90 lines (57 loc) · 2.77 KB

File metadata and controls

90 lines (57 loc) · 2.77 KB

GoFデザインパターン適用メモ

このプロジェクトでは、既存のゲーム構造を崩しすぎない範囲で、以下のGoFパターンを意識して整理しています。

Strategy

対象:

  • src/GenerateDungeon/DungeonGenerationStrategy.h
  • src/4_Dungeon.cpp

ダンジョン生成方式(区域分割法 / RRA)を IDungeonGenerationStrategy として抽象化しました。

これにより Dungeon は具体的な AreaDivide / RRA を直接 switch で扱わず、以下の共通操作だけに依存します。

  • generate()
  • copyTo(...)
  • roomCount()
  • roomAt(...)
  • randomFloorDataPos()

新しい生成方式を追加する場合は、Strategy実装とFactoryへの登録を追加するだけで済みます。

Factory

対象:

  • DungeonGenerationStrategyFactory
  • src/GenerateDungeon/EnemyFactory.h

SCENE から適切な生成Strategyを作成する責務をFactoryに集約しました。

これにより、生成方式の選択ロジックが Dungeon 本体から分離され、生成方式追加時の変更範囲が小さくなります。

また、敵生成は EnemyFactory に集約しています。

従来 Dungeon 側に散らばっていた以下の処理をFactoryへまとめました。

  • ランダムな敵種別の選択
  • Enemy インスタンスの生成
  • 敵スプライトクリップの設定
  • スポーン座標の設定

これにより初期生成とリスポーンの重複が減り、敵生成ルールを変更する場所が明確になります。

State

対象:

  • src/Scene/Scene.h
  • src/Game.cpp

各画面を Scene インターフェースで統一し、Game は現在のシーンを Scene* として操作します。

各シーンは以下を実装します。

  • Input(...)
  • Update()
  • Output()

これにより、シーンごとの大きな switch 分岐を減らし、画面ごとの振る舞いを個別クラスへ閉じ込めています。

Template Method

対象:

  • src/GenerateDungeon/Generator.h
  • src/Generator.cpp
  • src/AreaDivide.cpp
  • src/RRA.cpp

各ダンジョン生成アルゴリズムに共通する初期化手順を Generator::resetGenerationState() に集約しました。

これにより、派生クラス側の generate() は各アルゴリズム固有の生成処理に集中できます。

共通化した初期化内容:

  • 床配列の初期化
  • エリア数の初期化
  • 初期エリアの設定
  • 初期部屋の設定

今後の拡張候補

  • Command:
    • キー入力ごとの処理をコマンドオブジェクト化する。
  • Observer:
    • レベルアップ、被ダメージ、敵撃破などのイベント通知に使う。
  • Factory Method / Abstract Factory:
    • 敵生成やUI部品生成をさらに整理する。