Пример #1
0
        public int Three(Hand h)
        {
            var gv = h.GroupByValue()
                .OrderByDescending(kvp => kvp.Value)
                .ThenByDescending(kvp => (int)kvp.Key)
                .ToList();

            if (gv.Count() == 3 && gv.First().Value == 3)
            {
                return D * D * (int)gv[0].Key
                    + D * (int)gv[1].Key
                    + 1 * (int)gv[2].Key;
            }

            return 0;
        }
Пример #2
0
        public static Hand Parse(string s)
        {
            var cardsString = s.Split(' ');

            var hand = new Hand();

            for (int i = 0; i < 5; i++)
            {
                hand.Cards[i] = Card.Parse(cardsString[i]);
            }

            return hand;
        }
Пример #3
0
        public int Straight(Hand h)
        {
            if (h.Consecutive())
            {
                return (int)h.Cards.OrderByDescending(c => (int)c.Value).First().Value;
            }

            return 0;
        }
Пример #4
0
        public int StraightFlush(Hand h)
        {
            if (h.SameSuit()
                && h.Consecutive())
            {
                return (int)h.Cards.Select(c => c.Value).OrderByDescending(c => c).First();
            }

            return 0;
        }
Пример #5
0
 public bool IsWin(Hand h1, Hand h2)
 {
     return (
         null
         ?? Chk(RoyalFlush, h1, h2)
         ?? Chk(StraightFlush, h1, h2)
         ?? Chk(Four, h1, h2)
         ?? Chk(FullHouse, h1, h2)
         ?? Chk(Flush, h1, h2)
         ?? Chk(Straight, h1, h2)
         ?? Chk(Three, h1, h2)
         ?? Chk(IsTwoPairs, h1, h2)
         ?? Chk(IsOnePair, h1, h2)
         ?? Chk(HighestCard, h1, h2)
         )
         .Value;
 }
Пример #6
0
        public int RoyalFlush(Hand h)
        {
            bool ss = h.SameSuit();
            bool cs = h.Consecutive();

            if (ss)
            {
                if (cs)
                {
                    if (h.ThereIs(CardValue.Ace))
                    {
                        return 1;
                    }
                }
            }

            return 0;
        }
Пример #7
0
        public int IsOnePair(Hand h)
        {
            var gv = h.GroupByValue()
                .OrderByDescending(kvp => kvp.Value)
                .ThenByDescending(kvp => (int)kvp.Key)
                .ToList();

            if (gv.Count() == 4 && gv[0].Value == 2)
            {
                return D * D * D * (int)gv[0].Key
                    + D * D * (int)gv[1].Key
                    + D * (int)gv[2].Key
                    + 1 * (int)gv[3].Key;
            }

            return 0;
        }
Пример #8
0
        public int HighestCard(Hand h)
        {
            var gv = h.GroupByValue()
                .OrderByDescending(kvp => (int)kvp.Key)
                .ToList();

            if (gv.Count() == 5)
            {
                return D * D * D * D * (int)gv[0].Key
                    + D * D * D * (int)gv[1].Key
                    + D * D * (int)gv[2].Key
                    + D * (int)gv[3].Key
                    + 1 * (int)gv[4].Key;
            }

            //throw new Exception();

            return 0;
        }
Пример #9
0
        public int FullHouse(Hand h)
        {
            var gv = h.GroupByValue()
                .OrderByDescending(kvp => kvp.Value);

            if (gv.Count() == 2 && gv.First().Value == 3)
            {
                return D * (int)gv.First().Key
                    + (int)gv.Last().Key;
            }

            return 0;
        }
Пример #10
0
        public int Flush(Hand h)
        {
            if (h.SameSuit())
            {
                int r = 0;
                int m = 1;

                var v = h.Cards.OrderBy(c => (int)c.Value).ToList();

                for (int i = 0; i < 5; i++)
                {
                    r += m * (int)v[i].Value;

                    m *= D;
                }

                return r;
            }

            return 0;
        }
Пример #11
0
        public bool? Chk(Func<Hand, int> ev, Hand h1, Hand h2)
        {
            int h1r = ev.Invoke(h1);
            int h2r = ev.Invoke(h2);

            if (h1r != 0)
            {
                (ev.Method.Name + ": " + h1.ToString() + " =" + h1r).Dump();
            }

            if (h2r != 0)
            {
                (ev.Method.Name + ": " + h2.ToString() + " =" + h2r).Dump();
            }

            if (h1r == h2r)
            {
                return null;
            } else if (h1r > h2r)
            {
                return true;
            } else
            {
                return false;
            }
        }