Example #1
0
    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);
    }
Example #2
0
    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);
    }