SUEです。
先の記事では色々と理屈をこねていましたが、
「役割を分離・明示するとなんのメリットがあるの?」「面倒じゃないの? 利益はあるの?」
などという幻聴が聞こえてきたので、分かりやすく例を上げて考えてみます。
これなら誰もが分かってくれると信じています。分かってくれるといいな!
今回はRPGを作ってみましょう。
RPGといっても、古きよきドラクエのような2DRPGを想定しています。
まず、俯瞰フィールド画面を表示できるようにしてみます。
フィールドを構成しているものは、地形と、地形にめり込まないように動くキャラクターたちだと考えられます。
すると一例として、こんな構造でフィールドというもの全体を管理できます。
●フィールド管理役→地形、キャラクター
次に、戦闘画面を考えます。
戦闘には、敵パーティーと味方パーティーが参加します。
すると一例として、こんな構造で(ry
●戦闘管理役→敵パーティー、味方パーティー
最後に、会話イベントを作ります。
会話イベントには、何人かの会話するキャラが参加します。
すると一例として、(ry
●会話管理役→会話するキャラたち
全然問題ないですね。
さて突然ですが、主人公のことをここで考えます。
主人公はおそらく、フィールドを歩けるし戦闘も出来るし会話もするはずです。
(主人公はしゃべらないものだと決まっとろうが! な人はヒロインとかでもいいですけど)
というわけで、主人公に3つの役割を持たせます。
フィールド上の物体としての役割と、味方パーティーとしての役割と、会話参加者としての役割ですね。
あとは役割を状況に応じて切り替えれば、主人公の挙動の完成です。
別になんてことはないですね。自然すぎてかえって不気味なくらいです。
主人公が気をつけることはただひとつ、自分の今果たすべき役割を正しく認識することです。
基本はフィールド上の物体として。たまに会話参加者としても動く。
戦闘中は戦闘に専念する。というように。
でもこれが、「オブジェクト指向らしく」書くとどんなに困難なことであるか、分かる人は分かるでしょう。
重要なのは、主人公はいくつもの管理階層にまたがって存在しているという点です。
決して一つの階層だけではこのようには表現できません。
いや、何か騙されているのでは? こんなトリック信じないぞ。という方は、ぜひ先の記事の後半を読んでください。
何も難しいことはしていないんです。
ただ主人公という存在と、持つべき役割を切り離しただけです。それがタネと仕掛けです。
役割というものの利点は色々あります。
一つは、上記のように役割は複数持てるため、綺麗に関係性を作れるということです。
もう一つは、役割を通してのみ外界と関われるという特徴のおかげで、役割を遵守するオブジェクトたちが秩序を保って動けるということです(役割にバグがあると話は別)。
さらに、役割は我々とコンピュータの機能をつなぐ窓でもあると考えられます。説明が面倒なので気になったら質問してください。
ついでに、役割を通さない内部処理は各オブジェクトで完全に独立しているので、並行処理も上手く出来るかもしれません(自信ないです)。
伝わったかな……どうかな……
あ、コメントは歓迎です。ただし、RPGの細かい実装に係る話以外で。
たとえば、会話イベントに前に歩くように命令されたが、前へは地形的に進めない時どうするの? とか。
そういうのはassertで停めるなり、命令無視をするなり工夫してください。(判断するのは主人公クラスの内部です)
そんな問題は、役割で考えずとも、普通のオブジェクト指向でもぶち当たる問題ですからね。
【前回の続き】役割分担の良さをRPGで説明しようとがんばる
【前回の続き】役割分担の良さをRPGで説明しようとがんばる
最後に編集したユーザー 新SUE on 2015年4月04日(土) 14:49 [ 編集 2 回目 ]
Re: 【前回の続き】役割分担の良さをRPGで説明しようとがんばる
> そういうのはassertで停めるなり
行き止まりで強制終了するのは不親切すぎると思います。
行き止まりで強制終了するのは不親切すぎると思います。
RE: 【前回の続き】役割分担の良さをRPGで説明しようとがんばる
そういうところで例外が活きるのだと思いますが。新SUE さんが書きました:そういうのはassertで停めるなり、命令無視をするなり工夫してください。(判断するのは主人公クラスの内部です)