For something completely unrelated, I decided to check into my older Delphi code and noticed the ‘remnants’ of the code that actually started as a framework for a (basic) Spades1 card game. So hey: the code was actually so readable that most of it was easily turned into a C# version (that is minus the bidding code).
The fun part of it all was the ease of sorting in C#. Actually, you still need to write code to get that going, but compared to the things I needed to get a hand sorted in Delphi, that can be a different story (it’s actually not too bad either if you use regular TLists and that):
First of all make your base object descend from the IComparable class. This means, you’ll have to add a CompareTo method to your base object
public class TCard : IComparable{ private TFaceValue ffacevalue; private bool ffaceup = false; private TSuit fsuit; // Code removed for brevity reasons... public int CalcValue { get { return NumericValue(); } } public int CompareTo(TCard acard) { return this.CalcValue.CompareTo(acard.CalcValue); } }
Then create a class based on IComparer:
public class THandComparer : IComparer{ private TSortOptions fsort = TSortOptions.Ascending; public TSortOptions SortOption { get { return fsort; } set { fsort = value; } } public int Compare(TCard x, TCard y) { if (fsort == TSortOptions.Ascending) { return x.CompareTo(y); } else { return y.CompareTo(x); } } }
I decided to give the player an option to sort the cards descending or ascending based on the combination of suit and card value: Notice that for descending order, you literally just switch the objects (the base CompareTo method returns -1, 0 or 1!)
And then in the THand Class:
// [....] public void Sort() { THandComparer fcomparer = new THandComparer(); fcomparer.SortOption = forder; fhand.Sort(fcomparer); }
What rest are the drawing procedures, the card faces (I should have a couple of sets somewhere on my source backup disks) and the bidding engine.
1 I find it amazing that Pagat once again serves as a reference for card games, just like it used to do back in 2000.