Пример #1
0
        private void AdjustFastFoldActions(Game game)
        {
            var hero = game.General.Players.FirstOrDefault(x => x.IsHero);

            // if winner tag exists when hand was full
            // if hero bet equals his chips, then hero went allin and he couldn't fold
            if (hero == null || changes.HasElement("Winners") || hero.Bet == hero.Chips)
            {
                return;
            }

            uncalledBets.TryGetValue(hero.Seat, out decimal heroUncalledBet);

            if (heroUncalledBet != 0)
            {
                return;
            }

            var heroShouldFold = game.General.Players.Any(x => hero.Bet < x.Bet);

            if (!heroShouldFold ||
                game.Rounds.SelectMany(x => x.Actions).Any(x => x.Player == hero.Name && x.Type == ActionType.Fold))
            {
                return;
            }

            var lastRound = game.Rounds.Last();

            var foldAction = new Builders.iPoker.Action
            {
                Player = hero.Name,
                Type   = ActionType.Fold,
                No     = actionNo++
            };

            lastRound.Actions.Add(foldAction);
        }
Пример #2
0
        private Builders.iPoker.Action ConvertElementToAction(XElement element)
        {
            if (!element.Name.LocalName.Equals("PlayerAction"))
            {
                return(null);
            }

            var actionNode = element.FirstNode as XElement;

            if (actionNode == null)
            {
                return(null);
            }

            var seat = int.Parse(element.Attribute("seat").Value);

            var actionText = actionNode.Name.LocalName;

            // remember cards
            if (actionText.Equals("Show") || (actionText.Equals("Muck") && actionNode.HasElements))
            {
                var cardsText = string.Join(" ", element.Descendants("Card").Select(x => x.Value).ToArray());

                if (!string.IsNullOrEmpty(cardsText))
                {
                    var cards = cardsConverter.Convert(cardsText);

                    if (!showCards.ContainsKey(seat))
                    {
                        showCards.Add(seat, cards);
                    }
                }
            }

            // handle uncalled bets
            if (actionText.Equals("UncalledBet"))
            {
                var uncalledBet = decimal.Parse(actionNode.Attribute("amount").Value, NumberStyles.Currency, CultureInfo.InvariantCulture);

                if (!uncalledBets.ContainsKey(seat))
                {
                    uncalledBets.Add(seat, uncalledBet);
                }
                else
                {
                    uncalledBets[seat] += uncalledBet;
                }
            }

            var actionType = ConvertToActionType(actionText);

            if (actionType == ActionType.Undefined)
            {
                return(null);
            }

            if (!playersOnTable.ContainsKey(seat))
            {
                LogProvider.Log.Error(string.Format("Could not get player on seat {0}. [{1}]", seat, Identifier));
            }

            var sum = 0m;

            if (actionNode.Attribute("amount") != null)
            {
                sum = decimal.Parse(actionNode.Attribute("amount").Value, NumberStyles.Currency, CultureInfo.InvariantCulture);
            }

            if (actionNode.Attribute("dead") != null)
            {
                sum += decimal.Parse(actionNode.Attribute("dead").Value, NumberStyles.Currency, CultureInfo.InvariantCulture);
            }

            var action = new Builders.iPoker.Action
            {
                No         = actionNo++,
                Type       = actionType,
                SeatNumber = seat,
                Player     = playersOnTable[seat].Name,
                Sum        = sum
            };

            return(action);
        }