前提・実現したいこと
現在、ゲームライブラリである「Siv3D」を利用して
「通常のゲームウィンドウに加えてコンソールウィンドウも使用したノベルゲーム」
を制作したいと考えております。(Doki Doki Literature Clubというゲームにとても触発されました。)
しかし、ノベルゲームのクラス構造を考えるのが難しく躓いてしまいました。
現在のクラス構造
現在は上記のようなクラス構図になっており、以下に現在考えている各クラスの役割を記述します。
-
Program → 起動された際に、画像などのリソースを読込み、適切なシーンへ移動する。
-
asd.Scene → シーンであり、継承元。
-
TitleScene → タイトルシーン。セーブ、ロード、CG鑑賞などを行う。
-
GameScene → ゲームシーン。セーブ内容から適切なセーブ段階からノベルゲームを再開する。
-
EndingScene → エンディングシーン。エンディングを流す。
-
GameManager → いろいろなManagerインスタンスを持つ。GameManagerはcsvファイルから一行ずつスクリプトを読込、適切なManagerへ処理を委譲する。
-
**VisualManager **→ Character, BackGroundManagerインスタンスを持つ。GameManagerから受け取った処理を適切なインスタンスに移譲する。
-
CharacterManager → キャラクター画像のリンクをVisualManagerから受け取り、キャラクターを表示する。
-
BackgroundManager → 背景画像のリンクを受け取り、背景を表示する。エフェクトなども行う。
-
TextManager → MessageManagerやConsoleManagerインスタンスを持つ。GUIで表示するスクリプトはMessageManagerに、CUIで表示するスクリプトはConsoleManagerに移譲する。
-
MessageManager → GUIにおいて、メッセージウィンドウの役割を果たす。受け取ったスクリプトを正しく表示する。
-
ConsoleManager → CUIにおいて、ターミナルウィンドウの役割を果たす。受け取ったスクリプトを正しく表示する。
-
SoundManager → BGMや効果音を再生する。
-
SystemManager → セーブ、ロード、ヒストリー履歴などシステム周りの処理を行う。DDLCというゲームに影響を受けたため複雑な処理をいざという時に担当する。
問題点
現在のクラス構造では以下のような良くない点があると考えました。
- GameManagerの行う処理が多い。
→ スクリプトの読込
→ 読み込んだスクリプトを適したインスタンスに渡す
→ インスタンスの処理進行の管理
- 階層構造が深い際にどう進捗を管理すればいいのか、どこで入力を受け付けるのかわからない
→ 例えばGameManagerからMessageManagerまで2つ距離が離れており、Messageがすべて出力し終わったのかわからない。
→ 一つ一つ文字を画面に入力する際、Enterキーが押された場合文字を一気に出力するが、Enterキーの受け付けはGameManagerでやるべきなのかMessageManagerでやるべきなのかわからない。
現在のクラス構造についてアドバイスをいただければ幸いです。
補足情報(FW/ツールのバージョンなど)
OS: Windows10
ゲームライブラリ: Siv3D
クラス図: Astah* Community
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。