2012-03-06 12 views
1

Think card game ...MVCの責任に関する別の記事は、誰が何を知っているべきですか?

コンピュータは人間のカードで攻撃します。これに応答して、プレイヤーはビュー上でカードを動かし、それを打ち負かす。このシナリオでは

ことを確認してください。

(1)ビューを知ることは、それが

(2)それをコントローラ

だ確認せずに画面上に「着陸エリアである」ここで、okです、画面上の「ディフェンダー」カードは、ビューは攻撃側と防御側の両方が誰であるかを認識している場合は、コントローラ

です求めずにここでビューを知っているためokです(3)はそれがビューdeterminするためokですe攻撃者がディフェンダーを破ることができるかどうか?

(4)それ以外の場合は、この情報のコントローラー(Utilsクラスと思われます)、または常にコントローラーである必要がありますか?

(5) "攻撃者カードがディフェンダーカードに着陸しました"と表示し、攻撃が成功するかどうかをブール値で示すデリゲートメソッドをコントローラに送信する方が良いでしょうか?

答えて

2

ビューはパッシブ入出力デバイスです。攻撃者がディフェンダーを破ることができるかどうかなど、ゲームプレイのルールについては何も知ってはいけません。コントローラーがゲームプレイルールを知らなくても、モデルは常にそれを決定します。

ビューは、すべての可能な入力および出力状態を表現して処理し、入力をコントローラにリレーできる必要があります。コントローラは入力情報をモデルに渡し、新しいモデル状態に従ってビューを更新します。あなたの場合、ビューはカードAがカードBに着地したことを検出し、その情報をコントローラに渡します。コントローラは情報をモデルに渡し、モデルは新しいゲーム状態に移行し、コントローラはビ​​ューを新しい状態に更新する。場合によっては、モデルを直接観察することによってビューが自動的に更新されることもあります。状況によって異なります。

MVC分離ルールについて考えてみると、ゲームを別のインターフェース(GUI/CLI)や別のスキンに移植することができます。別のインターフェースをサポートするためにコードのかなりの部分をやり直さなければならない場合は、インターフェース固有のもの以外のものに触れなければならないということは、デザインが最適ではないことを意味します。

デザイン直感の別の良いソースは、テスト&シミュレーションです。いくつかの自動テストやゲームシミュレーションを実行したい場合は、ゲームコードをモデル内の入力と出力から分離しておく必要があります。ロジックがMVC全体に振りかざされると、ゲームをテストしてシミュレートすると、何かが間違っていることがわかります。

関連する問題