2012-03-06 37 views
1

思卡遊戲...關於MVC責任的另一篇帖子,誰應該知道什麼?

計算機用卡片攻擊人類。作爲迴應,玩家在視圖上移動卡片以擊敗它。

在這種情況下,請確認:

(1)這是確定的查看才知道,這裏在屏幕上「着陸區是」不問它的控制器

(2)它是OK的查看到知道屏幕上的「衛士」牌是不問它的控制器

如果視圖是知道誰既攻擊者和防禦者是,(3)是它確定爲視角的determin e攻擊者是否可以擊敗防守者?

如果這樣不行,(4)可以查看類別,然後它是這個信息的控制器(想想Utils類),還是應該始終是控制器?

(5)將代理方法發送給控制器指示「攻擊者卡落在防衛者卡」並期望布爾值攻擊是否成功,會更好嗎?

回答

2

視圖是被動輸入/輸出設備。它不應該知道遊戲規則的任何內容,比如攻擊者是否可以擊敗防守者。即使控制器不應該知道遊戲規則,模型總是決定這一點。

視圖應該能夠表示和處理所有可能的輸入和輸出狀態,並將輸入傳遞給控制器​​。控制器將傳遞輸入信息以根據新模型狀態對視圖進行建模和更新。在你的情況下,視圖檢測到卡A落在卡B上並將信息傳遞給控制器​​。控制器將信息傳遞給模型,模型轉換爲新的遊戲狀態,控制器將視圖更新爲新的狀態。有時視圖可以通過直接觀察模型來自動更新,這取決於情況。

想一想MVC分離規則的一個好方法是想象將遊戲移植到不同的界面(GUI/CLI)或不同的皮膚。如果您發現必須重做大部分代碼才能支持不同的界面,那麼除了特定於界面的內容外,您還需要觸摸某些內容,這意味着設計不是最佳選擇。

設計直覺的另一個很好的來源是測試&模擬。如果想運行一些自動測試或者遊戲模擬,你不得不將遊戲代碼與模型中的輸入和輸出分開。當邏輯遍佈整個MVC時,測試和模擬遊戲會受到傷害,並提醒您有什麼不對。

相關問題