2011-12-19 76 views
3

我正在從事紙牌遊戲,除其他外,還有一個負責呈現遊戲板視圖的UIView課程。MVC組件責任,需要澄清

由於呈現視圖的任務的一部分,類需要在響應用戶,計算機或用戶的舉動像

  • 執行一串任務的甲板上鋪設了卡
  • 更新卡片佈局

但是在這裏我想知道,我的視圖應該知道關於一副牌的程度?例如,我的View可以維護一個指向它繪製的Deck的指針嗎?

+0

出於好奇,你在用什麼紙牌遊戲? – cdeszaq 2011-12-19 15:42:04

回答

2

對於MVC,View只應瞭解它需要的信息才能正確進行佈局。控制器應該給它這個數據,並告訴視圖何時需要更新自己(更多地依賴於特定的MVC框架,但總的來說,這是事實)。所以,如果你的觀點需要知道整個甲板做佈局,那麼是的,但對我來說這聽起來很奇怪。我認爲,頂多只需要知道當前卡組的數量,但我不知道所有的紙牌遊戲。

對於我可以想到的幾款紙牌遊戲,需要在棋盤上的各個位置出現的卡片列表,以及其他位置的卡片數量可能都是視圖需要了解的全部內容。控制器負責填充列表(決定哪些卡片需要在什麼地方顯示),而視圖只是表示這一點。

一般來說,View的所有功能都代表了應用程序的狀態(在本例中爲當前的電路板狀態),沒有別的。它沒有涉及任何超過表示完整應用程序狀態子集的任何邏輯。在你的情況下,如果視圖具有任何與決定哪些像素顯示在哪裏有關的邏輯,那麼它就會做得太多。

1

查看不知道什麼牌是什麼。模型是大腦,它知道一切。查看只是得到DummyCard,它可以是簡單枚舉確定卡的顏色和形狀。它知道如何繪製它。所以,你可以告訴視圖「畫我一張黑桃王牌」就是這樣。 DummyCard是模型中卡的簡化版本。它沒有邏輯。當你想重畫遊戲狀態時,你將副本(虛擬)對象傳遞給視圖並繪製它。

+0

「簡單枚舉」模式適用於基於標準52張牌的「普通」紙牌遊戲,但在處理交易卡遊戲時會失敗,例如Magic:The Gathering或擁有數千個獨特牌。 – cdeszaq 2011-12-19 15:47:51

1

您可能缺少一個抽象。考慮建模不僅僅是板和牌,還包括拾取和丟棄樁。那麼你只需要處理初始化,對此甲板模型將有所幫助。

+0

關於建模一張卡片的各種「區域」的好處可能在。我沒有談論模型層,但這是_full_遊戲狀態的表示應該包括的地方,包括卡片存在的各種位置。 – cdeszaq 2011-12-19 15:56:21

+0

希望大多數遊戲邏輯都成爲一個狀態機,它根據卡片和區域的屬性定義卡片的合法區域轉換。 :-) – sheldonh 2011-12-19 16:07:44

+0

是的,這將是幾乎任何回合制遊戲的目標。然而,達到目標的程度高度依賴於規則。例如,對於MTG,規則非常複雜,以至於可能並不包含覆蓋全部的離散狀態機模型。基礎很簡單,但需要一些模糊來覆蓋更復雜的案例。 (儘管可以從觀察人類的角度學習規則的系統在實際情況下不確定實際規則可能會很有趣......) – cdeszaq 2011-12-19 16:11:49