コード例 #1
0
        public static HandRange Parse(string handsString)
        {
            string[]  hands     = handsString.Split(',');
            HandRange handRange = new HandRange();

            foreach (string hand in hands)
            {
                string trimedHand = hand.Trim();
                if (StartingHand.AllStartingHands.ContainsKey(trimedHand))
                {
                    handRange.AddRange(StartingHand.AllStartingHands[trimedHand]);
                }
                else if (trimedHand.EndsWith("+"))
                {
                    ParseRange(trimedHand);
                }
                else if (trimedHand.Contains("-"))
                {
                    string[] endHands = trimedHand.Split('-');
                    ParseRange(endHands[0].Trim(), Card.GetRankNumericValue(endHands[1].Trim().Substring(1, 1)));
                }
            }

            return(handRange);
        }
コード例 #2
0
        private static HandRange ParseRange(string startHand, int endRank = (int)Card.CardValueEnum._A)
        {
            HandRange             range = new HandRange();
            Func <string, string> genhand;

            if (startHand[0] == startHand[1])
            {
                genhand = rank => rank + rank;
            }
            else
            {
                genhand = rank => startHand[0] + rank + startHand[2];
            }

            for (int rank = Card.GetRankNumericValue(startHand.Substring(1, 1)); rank <= endRank; ++rank)
            {
                range.AddRange(StartingHand.AllStartingHands[genhand(((Card.CardValueEnum)rank).ToString())]);
            }

            return(range);
        }
コード例 #3
0
        public float ChenRanking()
        {
            float retVal = ChenValue[PrimaryRank];

            ;
            int seperation = PrimaryRank - SecondaryRank;

            switch (seperation)
            {
            case 0:
                return(retVal * 2);

            case 1:
            case 2:
            case 3:
                retVal -= seperation - 1;
                break;

            case 4:
                retVal -= 4;
                break;

            default:
                retVal -= 5;
                break;
            }

            if (PrimaryRank < Card.GetRankNumericValue("Q") && seperation < 2)
            {
                retVal += 1;
            }

            if (Type == HandType.Suited)
            {
                retVal += 2;
            }

            return(retVal);
        }
コード例 #4
0
        private StartingHand(string hand)
        {
            PrimaryRank   = Card.GetRankNumericValue(hand[0].ToString());
            SecondaryRank = Card.GetRankNumericValue(hand[1].ToString());

            if (hand.Length == 2)
            {
                Type = HandType.Pair;
            }
            else if (hand[2] == 's')
            {
                Type = HandType.Suited;
            }
            else
            {
                Type = HandType.OffSuit;
            }

            for (int i = 0; i <= 3; ++i)
            {
                if (Type == HandType.Suited)
                {
                    Add((1UL << (PrimaryRank * 4 + i)) | (1UL << (SecondaryRank * 4 + i)));
                }
                else
                {
                    for (int j = (Type == HandType.OffSuit ? 0 : i + 1); j <= 3; ++j)
                    {
                        if (i != j)
                        {
                            Add((1UL << (PrimaryRank * 4 + i)) | (1UL << (SecondaryRank * 4 + j)));
                        }
                    }
                }
            }
        }