アカデメイア実験室のラボノートには勉強したことのメモを書いていきます。
目標はUnity Learnで3Dを学んで面白そうな何か作ってみることです(雑)
最終的には記事にも価値が出るようなものにしたいですが、何しろ不慣れなので、当面は行動記録として「投稿すること」を優先しようと思います。
こうしたほうがいいぞ!とかあればTwitterで絡んでください。
今日の内容は3DGameを作る(C#編5)です
今回は迷路を処理するクラスが増えてきたので抽象クラス化したよ、という報告です。
経緯
作った迷路にいろんな方法で様々なアイテムを置いたり、破損迷路を修復したりしてきましたが、
毎回かなりの部分で同じこと書くので、まとめようと思いました。
以前、コードの整理をしたよ回[C#編2]でSOLID原則に触れましたが、この中に依存性逆転の法則というのがあります。
雑に言うと、親オブジェクトが機能(~する機能)だけ指定し、子オブジェクトは機能を保証し、機能は抽象クラスに記載する、というルールです。
抽象クラスに分けるにはやることを整理して、同じ部分を抜き出す必要があります。
やりたいこと
これまでの様々な迷路を処理したプログラムを見比べてまとめ
「迷路を処理する」抽象クラスを作ります。
いくつかのスクリプトを比較して、同じ部分は以下のようになっていました。
1. IntArrayの壁の番号を指定しておく。これとIntArray配列を入力とする。 (入力)
2. IntArray迷路を受け取ったら一旦壁の種類や通路の物を無視した壁と通路だけの0/1の迷路に変換する。(バイナリ化)
3. 今回処理しないほうを-1,処理対象の方を0にする。(処理マスク)
4. 処理対象(かつ未処理=0)を処理済み1以上にする。(処理のルール)
5. なんか適切な後処理で返す形に戻す。例えば壁に穴をあけたなら未処理通路に加えてもとのmazeの処理済みの1のところを0に変える。 (後処理)
6. これを返す。(出力)
7. テスト用IntArray文字列を入力欄がありInspectorから単体テストができる
これを落とし込むと右のようになります。
どの具体的な処理でも共通のところを、そのまま使えるように書きます。
具体的な処理は抽象で用意しています。(最後部分)
これで同じことを何度も書かずによくなりました。
以上、今日はここまで
またよろしくお願いします。