アカデメイア実験室のラボノートには勉強したことのメモを書いていきます。
目標はUnity Learnで3Dを学んで面白そうな何か作ってみることです(雑)
最終的には記事にも価値が出るようなものにしたいですが、何しろ不慣れなので、当面は行動記録として「投稿すること」を優先しようと思います。
こうしたほうがいいぞ!とかあればTwitterで絡んでください。
今日の内容は3DGameを作る(C#編2)です
Roll-a-ballを基準にゲームを作ろうとしています
今回はコードの整理をしたよ、という記録です。
前回いろんなアルゴリズムのランダム配置を作成して、それを組み替えるのが大変だったので、全体をSOLID原則にのっとった構成に変えてみました。
SOLID原則とは?
SOLID原則は、ソフトウェア設計をより柔軟でメンテナンスしやすくするための5つのガイドラインです(リンク)。
簡単にまとめると、こんな感じです:
単一責任の原則(SRP):1つのクラスは1つの責任だけを持つべき。
開放閉鎖の原則(OCP):クラスは拡張にはオープン、変更にはクローズであるべき。新しいアルゴリズムを追加しても、既存のコードをいじらなくて済むように。
リスコフ置換原則(LSP):子クラスは親クラスの代わりに使えて、動作が破綻しないようにする。
インターフェース分離の原則(ISP):不要なインターフェースを強制しない。たとえば、迷路生成にUIの処理は必要ないですよね。
依存性逆転の原則(DIP):高レベルなモジュールが低レベルなモジュールに依存しないように、抽象化を使う。
で、これを反映して分離したのが以下です。
---
迷路製作
迷路生成のロジックを担当するモジュールです。初期生成は壁伸ばし法ですが、更新はそれでは不都合だったので、アルゴリズムごとにクラスを作り、インターフェースを通じて呼び出せるようにしています。
マイルストーン系
アイテム配置系で迷路製作の後に呼び出されます。散布形式によりアルゴリズムが複数あってそれを使い分けます。
進行管理
ゲーム全体の進行を管理するモジュールです。
プレイヤーとのインタラクション
プレイヤーの入力を受け取り、移動やアクションを処理するモジュールです。
イベント系
レベルが上がると起こるイベントを管理しています。
---
結果として、巨大なファイルが分割され、アルゴリズム差し替えがとても楽になり、コードの行方不明も少なくなりました。
以上、今日はここまで
またよろしくお願いします。