/// <summary>Calculates the winning change of a hand.</summary>
        public static PokerHandOutcome Calculate(Cards hand, Cards table, MT19937Generator rnd, int runs = 1000)
        {
            UInt64Cards[] tblSub = null;

            var tAdd = 5 - table.Count;
            var uhnd = UInt64Cards.Create(hand);
            var utbl = UInt64Cards.Create(table);
            var dead = uhnd.Combine(utbl);

            var ownSub = uhnd.GetHandSubsets();

            var w = 0;
            var d = 0;
            var l = 0;

            if (tAdd == 0)
            {
                tblSub = utbl.GetTableSubsets();
            }

            for (var i = 0; i < runs; i++)
            {
                var tbl = utbl;
                if (tAdd > 0)
                {
                    tbl    = tbl.Combine(UInt64Cards.GetRandom(dead, tAdd, rnd));
                    tblSub = tbl.GetTableSubsets();
                }
                var uopp   = UInt64Cards.GetRandom(dead.Combine(tbl), 4, rnd);
                var oppSub = uopp.GetHandSubsets();

                var c = UInt32PokerHand.Compare(ownSub, oppSub, tblSub);
                if (c > 0)
                {
                    w++;
                }
                else if (c < 0)
                {
                    l++;
                }
                else
                {
                    d++;
                }
            }
            return(new PokerHandOutcome(w, d, l));
        }
Ejemplo n.º 2
0
        /// <summary>Creates sub hands.</summary>
        public static UInt64Cards[] CreateSubHands(Cards hand)
        {
            var supHands = new UInt64Cards[6];

            for (int i = 0; i < 6; i++)
            {
                var subset = new List <Card>();
                for (var p = 0; p < 4; p++)
                {
                    if ((Bits.Flag[p] & Mask4Over2[i]) != 0)
                    {
                        subset.Add(hand[p]);
                    }
                }
                supHands[i] = UInt64Cards.Create(subset);
            }
            return(supHands);
        }