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;
}