namespace Hokm.Engine; public static class Deck { public static readonly Suit[] Suits = { Suit.Spades, Suit.Hearts, Suit.Diamonds, Suit.Clubs }; public static List Create() { var deck = new List(52); foreach (var suit in Suits) for (int rank = 2; rank <= 14; rank++) deck.Add(new Card(suit, rank)); return deck; } /// Fisher–Yates shuffle into a new list. public static List Shuffle(IReadOnlyList input, Random rng) { var arr = input.ToList(); for (int i = arr.Count - 1; i > 0; i--) { int j = rng.Next(i + 1); (arr[i], arr[j]) = (arr[j], arr[i]); } return arr; } public static List SortHand(IEnumerable hand) { static int Order(Suit s) => s switch { Suit.Spades => 0, Suit.Hearts => 1, Suit.Clubs => 2, Suit.Diamonds => 3, _ => 4, }; return hand.OrderBy(c => Order(c.Suit)).ThenByDescending(c => c.Rank).ToList(); } }