2014-12-23 85 views
-1

因此,我怎麼只比較數的卡object(card1)到號的另一個卡object(card2)enumenum,當兩個物體有另一個enum顏色?對象上比較特定的枚舉

public enum Number 
{ 
    card_0,card_1 
} 
public enum Color 
{ 
    Red 
} 
public Card(int fNum, int fCol) 
{ 
    Number num = (Number)fNum; 
    Color color = (Color)fCol; 
} 

例如,card1是card_0和Red,card2是card_1和Red。這兩張牌在不同的列表中,一個是玩家的手,另一個是棄牌堆,所以如何比較數字或顏色的enum,以便知道是將卡接收到丟棄堆還是拒絕它並說它不是可玩的卡片。

if(/* Compare card1 and card2 */) 
{ 
    discardPile.Add(card1); 
    hand.RemoveAt(/* Location of card1*/); 
} 
else 
{ 
    /* do something */ 
} 

在此先感謝。

+2

你能更具體嗎?顯然,你可以寫一個方法,只比較數字... – BradleyDotNET

+0

我認爲你應該嘗試更好地解釋你的問題。對我而言,一點都不清楚。 – Willz

+0

好吧我目前正在製作一款類似於UNO的遊戲,所以我必須比較一下我即將丟棄的卡片是否具有與丟棄堆頂部相同的數字或相同的顏色,所以我有決定使用枚舉來標記數字和顏色,所以我怎麼做比較? 聽起來好些? – xwillflame

回答

3

我想一個方法添加到Card的類,它的比較:

public bool DiscardOnTopAllowed(Card otherCard) 
{ 
    bool allowed = false; 
    if (Color == otherCard.Color) 
     allowed = true; 
    else if (Number == otherCard.Number) 
     allowed = true; 

    return allowed; 
} 

有書面形式當然是更簡潔的方式,但我試圖保持它超強明確,因爲你正在學習。用法:

if (topCard.DiscardOnTopAllowed(selectedCard)) 
{ 
    //Discard is good! 
} 
+0

如果比較沒有在Card類中完成,該怎麼辦? – xwillflame

+0

@xwillflame邏輯是一樣的,但顯然你需要引用兩張牌(而不是利用'this')。這看起來像一個'卡'的合理行爲雖然。 – BradleyDotNET

1

是你的問題:如何比較枚舉?假設您有兩個卡片對象c1c2。要檢查他們是否有你做同樣的顏色:

if (c1.Color == c2.Color) 
{ 

} 

,並比較你的卡號:

if (c1.Number == c2.Number) 
{ 

} 

另外,我建議換卡實施。如果您使用枚舉,則使用枚舉而不是整數。 enumint繼承的事實只是一個實現細節。但這不是一個數字。例如,它不支持數學運算(這是有道理的:Color.Black + Color.Red的預期結果是什麼)。所以儘量不要將你的枚舉與整數混淆。

+0

爲了澄清我的構造函數,如果它通過1,0卡給予card_1的枚舉和紅色的權利? – xwillflame

+0

如果你沒有在枚舉的定義中指定映射,那麼它將從0開始。所以是1和0會導致'card_1'和'Red'。但是我想說的是把C-tor改成'Card(Number num,Color col)'。然後你通過'Card c = new Card(Number.card_0,Color.Red)'創建一個類型,並且你不會將枚舉與整數混合。 – PiotrWolkowski