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); }
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); }
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); }
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))); } } } } }