public Compare ( object x, object y ) : int | ||
x | object | First card |
y | object | Second card |
return | int |
public int Compare( object x, object y )
{
if( (x is Card) && (y is Card) )
{
Card cardX = (Card)x;
Card cardY = (Card)y;
if( _isComparingCombinations )
{
return CompareCombinations( cardX, cardY );
}
else if( (int)(cardX.CardColor) < (int)(cardY.CardColor) )
return 1;
else if( (int)(cardX.CardColor) > (int)(cardY.CardColor) )
return -1;
else
{
switch( this._announcementType )
{
case AnnouncementTypeEnum.AllTrumps :
return CompareTrumps( cardX, cardY );
case AnnouncementTypeEnum.NoTrumps :
return CompareNoTrumps( cardX, cardY );
case AnnouncementTypeEnum.Spades :
if( cardX.CardColor == CardColor.Spades )
return CompareTrumps( cardX, cardY );
else
return CompareNoTrumps( cardX, cardY );
case AnnouncementTypeEnum.Hearts :
if( cardX.CardColor == CardColor.Hearts )
return CompareTrumps( cardX, cardY );
else
return CompareNoTrumps( cardX, cardY );
case AnnouncementTypeEnum.Diamonds :
if( cardX.CardColor == CardColor.Diamonds )
return CompareTrumps( cardX, cardY );
else
return CompareNoTrumps( cardX, cardY );
case AnnouncementTypeEnum.Clubs :
if( cardX.CardColor == CardColor.Clubs )
return CompareTrumps( cardX, cardY );
else
return CompareNoTrumps( cardX, cardY );
case AnnouncementTypeEnum.Pass :
return CompareTrumps( cardX, cardY );
}
}
}
else
{
throw new ArgumentException("One of the objects is not a Card");
}
return 0;
}
/// <summary> /// Compares current combination to another one /// </summary> /// <param name="combination">combination to compare to</param> /// <returns>1 if current combination is bigger, -1 if second combination is bigger, 0 if both combination are equal</returns> public override int CompareTo(object combination) { if (!(combination is SequentialCombination)) { throw new InvalidOperationException("Cannot compare SequentialCombination to an object of different type"); } int result = 0; SequentialCombination comb = combination as SequentialCombination; if (this.Points > comb.Points) { result = 1; } else if (this.Points < comb.Points) { result = -1; } else { // both combinations are sequential. See biggest card CardComparer comparer = new CardComparer( ); this.Cards.Sort(comparer); comb.Cards.Sort(comparer); result = comparer.Compare(this.Cards[0], comb.Cards[0]); } return(result); }