読者です 読者をやめる 読者になる 読者になる

ここまでの冒険を記録しますか?

長岡技大ソフトウェア開発サークルの開発ブログ

SoulAssaultのコード概要

// @file OutlineCode.h
// @brief クラス・名前空間の概形を書いている.ヘッダーファイルとしては扱わない.
// @brief このファイルは計画書兼ドキュメントとして用いる.
// @date 2015/02/14 作成
// @author Hiroi

// @namespace Global
// WinMain関数でゲームの初期化・メインループ・終了処理.


// @namespace Functions
// @brief 汎用的に使う関数群.
namespace Functions{
}

// @namespace GameEngine
// @brief ゲーム内容に依存しない機能を扱う.
namespace GameEngine{

  // @namespace GameEngine::EngineParts
  // @brief エンジンの実現に必要なクラス.
  namespace EngineParts{
    // @brief 現在の状況やキャッシュなどのセーブしない情報を扱う.
    class MemoryManager;
  }

  // @namespace GameEngine::Sequence
  // @brief Sceneの親子的なシーケンス制御システムをまとめている.
  namespace Sequence{
    // @brief 
    class SequenceChild;
    class SequenceParent;
    class SequenceGrandParent;
  }

  // @namespace GameEngine::Input
  // @brief マウス・キーボードの入力を扱う.
  namespace Input{
    // @brief マウスの入力を管理する.
    class Mouse;
    // @brief キーボードの入力を管理する.
    class Keyborad;
  }


  // @namespace GameEngine::Memory
  // @brief 画像・音楽・アニメなどのハンドルを扱う.
  namespace Handle{
    // @brief 各ハンドルマネージャの仮想基本クラス.
    class HandleManager;

    // @brief フォントハンドルマネージャ.CustomDrawString付き.
    class FontManager;

    // @brief 画像情報をまとめたもの.ハンドル+画像サイズ.
    class Image;
    // @brief 画像ハンドルマネージャ.
    class ImageManager;

    // @brief BGM情報をまとめたもの.ハンドル+再生位置.
    class BackGroundMusic;
    // @brief BGMハンドルマネージャ.再生機能付き.
    class BackGroundMusicManager;

    // @brief SEハンドルマネージャ.
    class SoundEffectManager;

    // @brief アニメ情報をまとめたもの.アニメ画像ハンドル+フレーム数+画像サイズ.
    class Anime;

    // @brief アニメマネージャ.再生機能付き.
    class AnimeManager;
  }

  // @namespace GameEngine::GUI
  // @brief Sceneで使う,GUI要素(テキスト/ボタン)を扱う.
  namespace GUI{

    // @brief 各ボタンの仮想基本クラス.
    // @brief マウス・キーボードの両方で使える.
    class Button;

    // @brief テキストボックスのボタン.
    class TextButton;
    // @brief 画像のボタン.
    class ImageButton;

    // @brief 1シーンごとにボタンを生成・管理する.
    class ButtonManager;
  }
}



// @namespace GameSystem
// @brief ゲーム内容に依存する機能を扱う.
namespace GameSystem{

  // @brief オブジェクトを保持する.これ自体がシングルトンである.
  // @brief 各ハンドルマネージャ,MemoryManager,SaveDataを保持する.
  class ObjectManagerSingleton;

  // @namespace GameSystem::BattleSystem
  // @brief 戦闘に関する機能を扱う.
  namespace BattleSystem{
    // @brief コマンド1つが1行動に相当する.(味方)画面で入力された情報.(敵)AIによる出力.
    class Command;
    // @brief Battleから画面への表示情報を渡す.ダメージ情報・アニメ情報など.
    class InfoToScene;

    // @brief 1つの戦闘を管理する.
    class Battle;
    // @brief 戦闘内の時間.
    class TimeLine;


    // @brief 複数回の戦闘(Round)を管理する.
    class BattleManager;

    // @brief 
    namespace BattleParameter{
      // @brief 戦況の効果情報.
      class Slot;
      // @brief 戦闘フィールドの情報.
      class Field;

      // @brief 戦況管理システム.戦闘フィールドの効果も扱う.
      class SlotSystem;
    }

    // @brief 
    namespace ActionAndSkill{
      // @brief 攻撃や防御など汎用的な動作をActionとする.
      class ActionModel;

      // @brief 1つの行動をSkillとする.出来るだけActionを組み合わせて作る.
      class Skill;

      // @brief 実際にスキルを作って管理する.
      class SkillFactory;
    }

    namespace BattleCharacters{
      // @brief 味方の戦闘時のキャラクター情報.
      class BattleCharacter;

      // @brief 敵の戦闘時のキャラクター情報.AIが付いている.
      class EnemyBattleCharacter;

      // @brief それぞれの敵の情報.それぞれのAIが実装されている.
      // class Babble/Golem/Dragon;
    }
  }


  // @namespace GameSystem::DataManager
  // @brief セーブする必要があるデータをそれぞれ管理している.
  namespace DataManager{
    // @brief ゲーム内通貨の管理をする.
    class MoneyManager;
    // @brief キャラクターを管理する.
    class CharacterManager;

    // @brief 入手アイテムを手持ち,倉庫に分けて管理する.
    class ItemManager;
    // @brief 入手装備を管理する.
    class EquipmentManager;

    // @brief フラグ情報を管理する.
    class FlagManager;

    // @brief すべてのデータマネージャを管理する.
    class DataMaster;
  }

  namespace Database{
    // @brief データローダーの仮想基本クラス.
    class DatabaseLoader;

    // @brief アイテムデータ.
    class Item;
    // @brief アイテムのデータベース+ローダー.
    class ItemDatabase;

    // @brief 装備品データ.
    class Equipment;
    // @brief 装備品のデータベース+ローダー.
    class EquipmentDatabase;

    // キャラクターデータ.
    class Character;
    // @brief キャラクターのデータベース+ローダー.
    class CharacterDatabase;

    // @brief 敵キャラクターデータ.
    class EnemyCharacter;
    // @brief 敵キャラクターのデータベース+ローダー.
    class EnemyCharacterDatabase;

    // @brief 商品情報のデータベース.
    class ShoppingDatabase;
    // @brief フラグ情報のデータベース.
    class FlagDatabase;

    // @brief イベント情報.
    class Event;
    // @brief イベント情報のデータベース+ローダー.
    class EventDatabase;
  }

  namespace Scenes{
    // @brief ゲーム開始前の画面.
    namespace Top{
      // @brief タイトル画面.
      class TitleScene;
      // @brief デバッグ画面.
      class DebugScene;

      // @brief ゲーム開始前画面の管理.
      class TopScenesParent;
    }

    // @brief ゲーム中の画面.
    namespace Main{
      // @brief メインメニュー画面.
      class MainMenuScene;
      // @brief マップ選択画面.
      class MapSelectScene;

      // @brief ステータス確認・装備変更画面.
      class StatusScene;
      // @brief アイテム管理画面.
      class ItemScene;
      // @brief 店の画面.
      class ShopScene;

      // @brief イベントの画面.
      class EventScene;

      // @brief ゲーム中画面の管理.戦闘画面は含めない.
      class MainScenesParent;

      // namespace GameSystem::Scenes::Main::Battle
      // @brief 戦闘関連画面.
      namespace Battle{
        // @brief 戦闘画面.
        class BattleScene;
        // @brief 勝利画面.次の戦闘へ移るか,会話画面・メニュー画面に移る.
        class WinScene;
        // @brief 敗北画面.タイトルに移る.
        class LoseScene;

        // @brief 戦闘関連画面の管理.
        class BattleScenesParent;
      }
    }



    // @brief ゲーム前・ゲーム中の共通画面.
    namespace Common{
      // @brief ロード画面.
      class LoadScene;
      // @brief セーブ画面.
      class SaveScene;
      // @brief オプション画面.
      class OptionScene;
    }


    // @brief シーケンス制御をしている.SequenceGrandParentを継承.
    class GameSceneMaster;
  }

}

//  ・コーディング規約(基本は"Google C++ コーディング規約"を参照する)
// 拡張子は ".cpp",".h" を使っている.
// インクルードガードは "#pragma once" でいい.
// ソースコードのフォルダ階層分けは実施していない.そのかわり,Visual Studioのフィルターを用いている.
// マクロは使います.使うときは"マクロのコメントを充実させる","#undef でマクロの有効範囲を設定する"などで対策しよう.
// ポインタにはnullptrを使う.初期値・番人が特殊な場合にはコメントに明記する.
// コメントは "//" を使っている.
// インデントはスペース2個.現在利用しているフォーマッターは Visual Studio の C++のデフォルト.
// ポインタを扱うときはなるべくスマートポインタ(scoped_ptr,shared_ptr)を使ってください.
// ".h"では,std以外をusing namespaceしてはいけない.
// コメントはなるべく文章として残す.最後には"."または"。"を付ける.
// 
//  ・命名規約(基本は"Google C++ コーディング規約"を参照する)
// 単語は省略してはいけない.
// 型や変数は名詞に,関数は「命令」的な動詞にするべきです.
// 変数名はすべて小文字にして,単語と単語の間にはアンダースコアを入れてください.クラスメンバ変数はアンダースコアで終わるようにします.たとえば my_exciting_local_variable,my_exciting_member_variable_ など.(C++のみ)
// 定数名は k で始まり,大文字小文字で続けてください.たとえば kDaysInAWeek など.
// 通常の関数は大文字小文字の組み合わせにしてください,アクセサやミューテータは変数名と一致させてください. MyExcitingFunction(), MyExcitingMethod(), my_exciting_member_variable(), set_my_exciting_member_variable()
// (アクセサ:Getメソッド,ミューテータ:Setメソッド)
// 名前空間は大文字小文字の組み合わせにしている.