public List <CardData> GetFullHouse(List <CardData> gameHand) { var groupedList = playerCards.GroupBy(c => c.rank).Select(group => new { key = group.Key, list = group.ToList() }); groupedList = groupedList.OrderBy(g => g.key); List <List <CardData> > pairs = new List <List <CardData> >(); List <List <CardData> > triples = new List <List <CardData> >(); foreach (var group in groupedList) { List <CardData> sortedList = new List <CardData>(group.list); sortedList = sortedList.SortBySuits(); if (sortedList.Count >= 2) { var pair = new List <CardData>(); for (int i = 0; i < 2; i++) { pair.Add(sortedList[i]); } pairs.Add(pair); } if (sortedList.Count >= 3) { var triple = new List <CardData>(); for (int i = 0; i < 3; i++) { triple.Add(sortedList[i]); } triples.Add(triple); } } List <CardData> tempHand = new List <CardData>(); if (pairs.Count > 0 && triples.Count > 0) { for (int i = 0; i < triples.Count; i++) { for (int j = 0; j < pairs.Count; j++) { if (triples[i][0].rank != pairs[j][0].rank) { tempHand = new List <CardData>(triples[i].Union(pairs[j])); if (HandEvaluator.CompareMiddle(tempHand, gameHand)) { return(tempHand); } } tempHand.Clear(); } } } return(null); }
public List <CardData> GetFourKind(List <CardData> gameHand) { var groupedList = hand.cardDatas.GroupBy(c => c.rank).Select(group => new { key = group.Key, list = group.ToList() }); groupedList = groupedList.OrderByDescending(g => g.key); List <CardData> sortedHand = hand.cardDatas.ToList().SortByRank(); List <List <CardData> > quads = new List <List <CardData> >(); foreach (var group in groupedList) { if (group.list.Count == 4) { List <CardData> quad = new List <CardData>(group.list); int w = 0; while (quad.Count < 5) { if (!quad.Contains(sortedHand[w])) { quad.Add(sortedHand[w]); } w++; } if (gameHand == null || HandEvaluator.CompareMiddle(quad, gameHand)) { return(quad); } } } return(null); }