2014-12-23 2 views
-1

그래서 어떻게 비교 할 경우에만 두 객체가 다른 enum 색상이 숫자 카드 숫자 다른 카드 object(card2)enumobject(card1)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는 card_0이며 card2는 card_1 및 red입니다. 2 장의 카드는 서로 다른 목록에 있습니다. 하나는 플레이어의 손이고 나머지 하나는 버려진 더미에 있습니다. 따라서 숫자 또는 색상의 enum을 어떻게 비교하여 카드를 버리기 더미에 수락할지 아니면 카드를 수락 할지를 알 수 있습니다. 이를 거절하고 그것이 재생 가능한 카드가 아니라고 말하십시오.

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

미리 감사드립니다.

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

    return allowed; 
} 

물론 그를 작성 덜 장황 가지 방법이 있습니다,하지만 난 당신이 학습되기 때문에 슈퍼 명시 적으로 그것을 유지하기 위해 노력 :

+2

좀 더 구체적으로 기재 할 수 있습니까? 분명히 번호를 비교하는 방법을 쓸 수 있습니다 ... – BradleyDotNET

+0

나는 당신이 당신의 문제를 더 잘 설명하려고 노력해야한다고 생각합니다. 나를 위해, 그것은 전혀 분명하지 않다. – Willz

+0

좋아요. 저는 현재 UNO와 비슷한 게임을 만들고 있습니다. 그래서 나는 버려야 할 카드가 버려지는 카드 더미의 상단과 같은 번호 또는 같은 색깔을 가지고 있는지 비교해야합니다. 열거 형을 사용하여 숫자와 색상에 레이블을 지정하기 때문에 어떻게 비교합니까? 소리가 좋아 지나요? – xwillflame

답변

3

나는 비교를 수행하는 Card 클래스에 메서드를 추가합니다. 사용법 :

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

'Card' 클래스에서 비교가 이루어지지 않으면 어떻게 될까요? – xwillflame

+0

@xwillflame 논리는 동일하지만 분명히 ('this'를 이용하는 대신) 두 카드를 모두 참조해야합니다. 이것은'Card'가 가질 수있는 합리적인 행동처럼 보입니다. – BradleyDotNET

1

질문 : 열거 형을 비교하는 방법은 무엇입니까? 두 개의 카드 오브젝트 c1c2이 있다고 가정 해 봅시다. 그들은 당신이 동일한 색상이 있는지 확인하려면 :

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

} 

을하고 당신이 카드 번호 비교 : 또한

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

} 

을, 나는 카드 구현을 변경 권 해드립니다. 열거 형을 사용하는 경우 정수가 아닌 열거 형을 사용하십시오. enumint에서 상속된다는 사실은 구현 세부 사항에 불과합니다. 그러나 그것은 숫자가 아닙니다. 예를 들어 수학적 연산을 지원하지 않습니다 (이는 의미가 있습니다 : Color.Black + Color.Red의 예상 결과는 무엇입니까?). 따라서 열거 형을 정수와 혼합하지 마십시오.

+0

내 생성자에 대한 설명이 필요합니다. 1,0을 전달하면 카드에 card_1과 Red의 열거 형이 지정됩니까? – 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