From cc7a9b6b3946e0fbd0d93163f2273bbe94be9e08 Mon Sep 17 00:00:00 2001 From: ItalyToast Date: Sat, 9 Aug 2025 14:42:29 +0200 Subject: [PATCH] Adding support for PLO6 --- HandHistories.Objects/Cards/CardGroup.cs | 6 +++-- HandHistories.Objects/Cards/HoleCards.cs | 21 +++++++++++++--- .../GameDescription/GameTypeUtils.cs | 7 ++++++ .../GameDescription/GameTypes.Statics.cs | 24 +++++++++++++++++++ .../GameDescription/GameTypes.cs | 2 ++ .../PokerStars/PokerStarsFastParserImpl.cs | 2 ++ 6 files changed, 57 insertions(+), 5 deletions(-) diff --git a/HandHistories.Objects/Cards/CardGroup.cs b/HandHistories.Objects/Cards/CardGroup.cs index fa19a00c..b57081ed 100644 --- a/HandHistories.Objects/Cards/CardGroup.cs +++ b/HandHistories.Objects/Cards/CardGroup.cs @@ -51,14 +51,16 @@ public void AddCard(Card card) throw new ArgumentException("Card " + card.ToString() + " already exists."); } - if (Cards.Count >= 5) + if (Cards.Count >= GetMaxCardCount()) { - throw new ArgumentException("Board can't consist of more than 5 cards."); + throw new ArgumentException("Cannot add more than " + GetMaxCardCount() + " cards."); } Cards.Add(card); } + protected abstract int GetMaxCardCount(); + public void AddCards(IEnumerable cards) { foreach (var card in cards) diff --git a/HandHistories.Objects/Cards/HoleCards.cs b/HandHistories.Objects/Cards/HoleCards.cs index 221520b3..2af32964 100644 --- a/HandHistories.Objects/Cards/HoleCards.cs +++ b/HandHistories.Objects/Cards/HoleCards.cs @@ -44,6 +44,16 @@ public static HoleCards ForOmaha5(string playerName, Card card1, Card card2, Car return new HoleCards(playerName, card1, card2, card3, card4, card5); } + public static HoleCards ForOmaha6(Card card1, Card card2, Card card3, Card card4, Card card5, Card card6) + { + return new HoleCards(string.Empty, card1, card2, card3, card4, card5, card6); + } + + public static HoleCards ForOmaha6(string playerName, Card card1, Card card2, Card card3, Card card4, Card card5, Card card6) + { + return new HoleCards(playerName, card1, card2, card3, card4, card5, card6); + } + public static HoleCards NoHolecards() { return new HoleCards(string.Empty); @@ -74,11 +84,16 @@ public static HoleCards FromCards(string playerName, Card[] cards) { return NoHolecards(); } - if (cards.Length > 5) + if (cards.Length > 6) { - throw new ArgumentException("Hole cards cant contain more than 5 cards."); + throw new ArgumentException("Hole cards cant contain more than 6 cards."); } return new HoleCards(playerName, cards); - } + } + + protected override int GetMaxCardCount() + { + return 6; // Allow up to 6 cards for Six Card Omaha + } } } diff --git a/HandHistories.Objects/GameDescription/GameTypeUtils.cs b/HandHistories.Objects/GameDescription/GameTypeUtils.cs index 3d160d2e..be9270ce 100644 --- a/HandHistories.Objects/GameDescription/GameTypeUtils.cs +++ b/HandHistories.Objects/GameDescription/GameTypeUtils.cs @@ -58,6 +58,13 @@ public static GameType ParseGameString(string gameString) case "pot limit five card omaha": case "5 card omaha pot limit": return GameType.FiveCardPotLimitOmaha; + case "pot limit six card omaha hi-lo": + case "6 card omaha hi/lo pot limit": + return GameType.SixCardPotLimitOmahaHiLo; + case "omaha6 pot limit": + case "pot limit six card omaha": + case "6 card omaha pot limit": + return GameType.SixCardPotLimitOmaha; default: string match = Enum.GetNames(typeof(GameType)).FirstOrDefault(g => g.ToLower().Equals(gameString.ToLower())); return match == null ? GameType.Unknown : (GameType)Enum.Parse(typeof(GameType), match,true); diff --git a/HandHistories.Objects/GameDescription/GameTypes.Statics.cs b/HandHistories.Objects/GameDescription/GameTypes.Statics.cs index fd54d4db..79939813 100644 --- a/HandHistories.Objects/GameDescription/GameTypes.Statics.cs +++ b/HandHistories.Objects/GameDescription/GameTypes.Statics.cs @@ -87,6 +87,30 @@ public static GameType FiveCardPotLimitOmaha } } + public static GameType SixCardFixedLimitOmaha + { + get + { + return new GameType(GameLimitEnum.FixedLimit, GameEnum.SixCardOmaha); + } + } + + public static GameType SixCardNoLimitOmaha + { + get + { + return new GameType(GameLimitEnum.NoLimit, GameEnum.SixCardOmaha); + } + } + + public static GameType SixCardPotLimitOmaha + { + get + { + return new GameType(GameLimitEnum.PotLimit, GameEnum.SixCardOmaha); + } + } + public static GameType FixedLimitOmahaHiLo { get diff --git a/HandHistories.Objects/GameDescription/GameTypes.cs b/HandHistories.Objects/GameDescription/GameTypes.cs index e64d7afa..8df76d8c 100644 --- a/HandHistories.Objects/GameDescription/GameTypes.cs +++ b/HandHistories.Objects/GameDescription/GameTypes.cs @@ -25,6 +25,8 @@ public enum GameEnum : byte [EnumMember] FiveCardOmaha, [EnumMember] + SixCardOmaha, + [EnumMember] OmahaHiLo, [EnumMember] FiveCardOmahaHiLo, diff --git a/HandHistories.Parser/Parsers/FastParser/PokerStars/PokerStarsFastParserImpl.cs b/HandHistories.Parser/Parsers/FastParser/PokerStars/PokerStarsFastParserImpl.cs index 34af4fc1..044c1b70 100644 --- a/HandHistories.Parser/Parsers/FastParser/PokerStars/PokerStarsFastParserImpl.cs +++ b/HandHistories.Parser/Parsers/FastParser/PokerStars/PokerStarsFastParserImpl.cs @@ -342,6 +342,8 @@ private static GameType GetGameTypeFromLength(int startIndex, string line, int g return GameType.PotLimitOmahaHiLo; case 22: return GameType.FiveCardPotLimitOmaha; + case 23: + return GameType.SixCardPotLimitOmaha; case 20: return GameType.NoLimitOmahaHiLo; case 11: