Пример #1
0
        public void ParseCollectedLine_SidePot()
        {
            WinningsAction handAction =
                GetPokerStarsFastParser().ParseCollectedLine(@"bozzoTHEclow collected $136.82 from side pot", Street.Preflop);

            Assert.AreEqual(new WinningsAction("bozzoTHEclow", WinningsActionType.WINS_SIDE_POT, 136.82m, 1), handAction);
        }
        private List <HandAction> GetWinningAndShowCardActions(string[] handLines)
        {
            int actionNumber = Int32.MaxValue - 100;

            PlayerList playerList = ParsePlayers(handLines);

            var winningAndShowCardActions = new List <HandAction>();

            foreach (Player player in playerList)
            {
                if (player.hasHoleCards)
                {
                    HandAction showCardsAction = new HandAction(player.PlayerName, HandActionType.SHOW, 0, Street.Showdown, actionNumber++);
                    winningAndShowCardActions.Add(showCardsAction);
                }
            }

            string[] playerLines = GetPlayerLinesFromHandLines(handLines);
            for (int i = 0; i < playerLines.Length; i++)
            {
                string  playerLine = playerLines[i];
                decimal winnings   = GetWinningsFromPlayerLine(playerLine);
                if (winnings > 0)
                {
                    string         playerName     = GetNameFromPlayerLine(playerLine);
                    WinningsAction winningsAction = new WinningsAction(playerName, HandActionType.WINS, winnings, 0, actionNumber++);
                    winningAndShowCardActions.Add(winningsAction);
                }
            }

            return(winningAndShowCardActions);
        }
Пример #3
0
        public void ParseCollectedLine_SidePot2()
        {
            WinningsAction handAction =
                GetPokerStarsFastParser().ParseCollectedLine(@"CinderellaBD collected $7 from side pot-2", Street.Preflop);

            Assert.AreEqual(new WinningsAction("CinderellaBD", WinningsActionType.WINS_SIDE_POT, 7m, 2), handAction);
        }
Пример #4
0
        public void ParseCollectedLine_WithColon_Works()
        {
            WinningsAction handAction =
                GetPokerStarsFastParser().ParseCollectedLine(@"wo_olly :D collected $0.57 from pot", Street.Preflop);

            Assert.AreEqual(new WinningsAction("wo_olly :D", WinningsActionType.WINS, 0.57m, 0), handAction);
        }
Пример #5
0
        public void ParseCollectedLine_MainPot_Works()
        {
            WinningsAction handAction =
                GetPokerStarsFastParser().ParseCollectedLine(@"bozzoTHEclow collected $245.23 from main pot", Street.Preflop);

            Assert.AreEqual(new WinningsAction("bozzoTHEclow", WinningsActionType.WINS, 245.23m, 0), handAction);
        }
Пример #6
0
        public void ParseCollectedLine_Works()
        {
            WinningsAction handAction =
                GetPokerStarsFastParser().ParseCollectedLine(@"alecc frost collected $1.25 from pot", Street.Preflop);

            Assert.AreEqual(new WinningsAction("alecc frost", WinningsActionType.WINS, 1.25m, 0), handAction);
        }
Пример #7
0
        public void ParseCollectedLine_WithSidePot_Works()
        {
            WinningsAction handAction =
                GetPokerStarsFastParser().ParseCollectedLine(@"templargio collected $6.08 from side pot-2", Street.Preflop);

            Assert.AreEqual(new WinningsAction("templargio", WinningsActionType.WINS_SIDE_POT, 6.08m, 2), handAction);
        }
Пример #8
0
        protected override List <HandAction> ParseHandActions(string[] handLines, GameType gameType = GameType.Unknown)
        {
            List <HandAction> actions = new List <HandAction>();

            PlayerList playerList = ParsePlayers(handLines);

            XDocument document    = GetXDocumentFromLines(handLines);
            XElement  gameElement = GetGameElementFromXDocument(document);

            Street currentStreet = Street.Null;

            List <XElement> roundElements = gameElement.Elements("round").ToList();

            foreach (XElement roundElement in roundElements)
            {
                currentStreet = GetStreetFromRoundElement(roundElement);
                List <XElement> eventElements = roundElement.Elements("event").ToList();

                foreach (XElement eventElement in eventElements)
                {
                    HandAction action = GetHandActionFromEventElement(eventElement, currentStreet, playerList);
                    actions.Add(action);
                }
            }

            List <XElement> winnerElements = gameElement.Elements("round").Elements("winner").ToList();

            foreach (XElement winnerElement in winnerElements)
            {
                WinningsAction winningsAction = GetWinningsActionFromWinnerElement(winnerElement, playerList);
                actions.Add(winningsAction);
            }

            return(actions);
        }
Пример #9
0
 public static void AddWinningActions(HandHistory handHistory)
 {
     foreach (var winner in handHistory.Players.Where(p => p.Win > 0))
     {
         var winAction = new WinningsAction(winner.PlayerName, HandActionType.WINS, winner.Win, 0);
         handHistory.HandActions.Add(winAction);
     }
 }
Пример #10
0
        private void ProcessNoticeGameSettlement(NoticeGameSettlement noticeGameSettlement, HandHistory handHistory)
        {
            if (noticeGameSettlement.Winners == null)
            {
                throw new HandBuilderException(handHistory.HandId, $"NoticeGameSettlement.Winners must be not null.");
            }

            foreach (var winner in noticeGameSettlement.Winners)
            {
                var player = GetPlayer(handHistory, winner.SeatId + 1);

                var winningAction = new WinningsAction(player.PlayerName,
                                                       HandActionType.WINS, winner.Amount, 0);

                handHistory.HandActions.Add(winningAction);

                player.Win = winner.Amount;
            }
        }
        private List <HandAction> GetWinningAndShowCardActions(string[] handLines, List <HandAction> actions, List <WinningsAction> winners)
        {
            int actionNumber = Int32.MaxValue - 100;

            PlayerList playerList = ParsePlayers(handLines);

            List <HandAction> winningAndShowCardActions = new List <HandAction>();

            foreach (Player player in playerList)
            {
                if (player.hasHoleCards)
                {
                    var folded = actions.Any(p => p.HandActionType == HandActionType.FOLD);
                    if (folded)
                    {
                        continue;
                    }

                    HandAction showCardsAction = new HandAction(player.PlayerName, HandActionType.SHOW, 0, Street.Showdown, actionNumber++);
                    winningAndShowCardActions.Add(showCardsAction);
                }
            }

            List <string> playerLines = GetPlayerLinesFromHandLines(handLines);

            for (int i = 0; i < playerLines.Count; i++)
            {
                string  playerLine = playerLines[i];
                decimal winnings   = GetWinningsFromPlayerLine(playerLine);
                if (winnings > 0)
                {
                    string         playerName     = GetNameFromPlayerLine(playerLine);
                    WinningsAction winningsAction = new WinningsAction(playerName, WinningsActionType.WINS, winnings, 0);
                    winners.Add(winningsAction);
                }
            }

            return(winningAndShowCardActions);
        }
Пример #12
0
        private void ProcessWinner(Winner winner, HandHistory handHistory)
        {
            if (handHistory == null)
            {
                return;
            }

            foreach (var playerWinner in winner.WinnerInfo.Winners)
            {
                var playerName = playerWinner.PlayerId.ToString();

                var winningAction = new WinningsAction(playerName,
                                                       HandActionType.WINS,
                                                       playerWinner.Amount,
                                                       playerWinner.PotId);

                handHistory.HandActions.Add(winningAction);

                var player = handHistory.Players.FirstOrDefault(x => x.PlayerName == playerName);

                if (player == null)
                {
                    throw new HandBuilderException($"Failed to find player {playerName} for set win.");
                }

                player.Win = playerWinner.Amount;
            }

            foreach (var playerRank in winner.WinnerInfo.PlayerRanks)
            {
                if (playerRank.HoleCards == null ||
                    playerRank.HoleCards.HoleCards == null ||
                    playerRank.HoleCards.HoleCards.Length == 0)
                {
                    continue;
                }

                var playerName = playerRank.PlayerId.ToString();
                var player     = handHistory.Players.FirstOrDefault(x => x.PlayerName == playerName);

                if (player == null)
                {
                    throw new HandBuilderException($"Failed to find player {playerRank.PlayerId} for set hole cards.");
                }

                if (player.hasHoleCards)
                {
                    continue;
                }

                var holeCards = string.Join(string.Empty, playerRank.HoleCards.HoleCards.Where(x => x != null).Select(x => x.ToString()));

                if (!string.IsNullOrEmpty(holeCards) && (holeCards.Length == 4 || holeCards.Length == 8))
                {
                    player.HoleCards = HoleCards.FromCards(holeCards);
                }
                else
                {
                    var possibleHoleCards = new List <string>();

                    if (playerRank.KickerCards != null && playerRank.KickerCards.Length > 0)
                    {
                        possibleHoleCards.AddRange(playerRank.KickerCards.Where(x => x != null).Select(x => x.ToString()));
                    }

                    if (playerRank.RankCards != null && playerRank.RankCards.Length > 0)
                    {
                        possibleHoleCards.AddRange(playerRank.RankCards.Where(x => x != null).Select(x => x.ToString()));
                    }

                    var playerHoleCards = string.Join(string.Empty, possibleHoleCards
                                                      .Where(x => !handHistory.CommunityCardsString.ContainsIgnoreCase(x)).Distinct());

                    if (!string.IsNullOrEmpty(playerHoleCards) && (playerHoleCards.Length == 4 || playerHoleCards.Length == 8))
                    {
                        player.HoleCards = HoleCards.FromCards(playerHoleCards);
                    }
                }
            }
        }