2013-11-26 80 views
3

所以我正在開發一個簡單的紙牌遊戲。現在,我正在使用約4個不同的Vector<Card>容器將卡片保存在Deck,Hand,InPlay和Discard中。我正要開始編寫代碼,以便在必要時將卡從InPlay Vector移動到Discard Vector,並且我意識到我可以使用2個向量並枚舉一組卡狀態來區分卡在遊戲領域中的位置。我應該使用多個向量還是使用枚舉狀態

我的想法是這樣的:

class Card 
{ 
    Enum class CardState 
    { 
     InHand, 
     InPlay, 
     Discarded 
    }; 

    //other card class data 
}; 

那麼我可以通過一個單一的vector<Card> InPlay迭代,並覈對這些標誌。甲板仍然是自己的矢量容器。

如果試圖在整個遊戲中管理3個不同的容器,會更容易嗎?

回答

3

歡迎使用cpu時間vs內存空間與代碼維護。

幸運的是,在這種情況下,CPU時間和內存空間的問題可以忽略不計。

但是,代碼維護不是。

試圖保持三個不同的「堆棧」卡是不是最好的方式去設計。這會給你一個非常不明顯的提升速度,但代碼維護成本的增加使它甚至不值得。

你在做什麼是正確的。

保持一張卡片可以進入的狀態的枚舉。如果你需要一個在該狀態下的所有卡片的列表,遍歷你的向量來找到該狀態的卡片。

+0

謝謝,Cap'n!如果你說不出來,我正在做的項目是一個簡單的魔法克隆,所以我有另一個我想知道的情況。如果一張牌在場,它可以有多種狀態(輕拍,召喚疾病等等,我沒有使用這些確切的狀態,只是例子)你會如何推薦類似的東西? – Prototype958

+0

使用「currentStates」列表。例如:vector currentStates您可以添加助手方法,如:bool isInState(CardState狀態) –

3

如果我要實現它,我寧願創建一個甲板對象,一個播放器對象併爲遊戲中的任何可能操作創建方法。在開始時做更多的工作,然後處理起來會更容易。 P:數據結構應該通過你對卡片做什麼動作來選擇......例如,如果你的遊戲中有很多關於「卡片是否有這張卡片?」的疑問,我會說使用一張地圖,而不是每次迭代超過50張卡片......所以答案取決於它。

+0

地圖不是我以前使用過的東西。我實際上開始使用列表,但將其更改爲矢量,因爲它們更容易遍歷並將卡從一個「移動」到另一個。我會+1你給我一些研究,但我還沒有達到15代表。哈哈,謝謝 – Prototype958

相關問題