Exemplo n.º 1
0
        /// <summary>
        /// Rozdzielanie puli według układów
        /// </summary>
        public void ShowdownPotDistribution()
        {
            var gameTable = Game.GameTableModel;

            //Sortujemy od najsilniejszych układów
            var evaluatorGroupedList = Evaluator.EvaluatorStrenghtList.
                                       GroupBy(c => c.FullPoints).
                                       OrderByDescending(e => e.First().FullPoints).ThenBy(e => e.OrderBy(f => f.Contributed)).
                                       ToList();

            //Suma pinieniędzy
            decimal totalPot = gameTable.ActionHistory.OfType <BetAction>().Sum(c => c.Bet);

            //Wszystkie wyniki na jednym poziomie
            var contributionFlatList = gameTable.ActionHistory.OfType <BetAction>().GroupBy(c => c.Player).Select(c => new PlayerContributed
            {
                Player      = c.First().Player,
                Contributed = c.Sum(e => e.Bet)
            }).ToList();

            foreach (var evaluatorItem in evaluatorGroupedList)
            {
                foreach (var evaluatorPlayer in evaluatorItem)
                {
                    decimal winPot = 0;
                    decimal evaluatorPlayerContributed = evaluatorPlayer.Contributed;

                    foreach (var evaluatorContributedPlayer in contributionFlatList)
                    {
                        decimal takenPot = 0;
                        if (evaluatorContributedPlayer.Contributed >= evaluatorPlayerContributed)
                        {
                            takenPot = evaluatorPlayerContributed;
                        }
                        else
                        {
                            takenPot = evaluatorContributedPlayer.Contributed;
                        }

                        evaluatorContributedPlayer.Contributed -= takenPot;
                        winPot += takenPot;
                    }

                    winPot = winPot / (evaluatorItem.Count());

                    if (winPot == 0)
                    {
                        break;
                    }

                    //Infomracja o wygranej puli
                    string message;
                    if (evaluatorPlayer.IsBest == true)
                    {
                        message = "Gracz " + evaluatorPlayer.Player.User.Username + " wygrywa główną pulę " + CurrencyFormat.Get(gameTable.Currency, winPot);
                    }
                    else
                    {
                        message = "Gracz " + evaluatorPlayer.Player.User.Username + " wygrywa boczną pulę " + CurrencyFormat.Get(gameTable.Currency, winPot);
                    }

                    if (evaluatorPlayer.IsKickerWin)
                    {
                        message += " kickerem " + CardModel.GetNormalizeNominal(evaluatorPlayer.KickerCards.FirstOrDefault().Face, CardModel.NormalizeNominalSize.ONE);
                    }

                    OnShowdownWinnerEvent(evaluatorPlayer);

                    TablePotAction tablePotAction = new TablePotAction()
                    {
                        Stage     = Game.GameTableModel.Stage,
                        CreatedAt = DateTime.Now,
                        Player    = evaluatorPlayer.Player,
                        Pot       = winPot
                    };
                    Game.GameTableModel.ActionHistory.Add(tablePotAction);

                    Game.SendDealerMessage(message);
                    Console.WriteLine(message);
                    gameTable.ShowSystemMessage("Wygrana " + evaluatorPlayer.Player.User.Username, message);
                    Thread.Sleep(2000);
                    gameTable.HideSystemMessage();
                }
            }
        }
Exemplo n.º 2
0
        void Instance_OnPlayerActionTriggerEvent(TableModel table, BaseAction action)
        {
            Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
            {
                if (this.gameTable.GameTable.ID != table.ID || this.player == null)
                {
                    return;
                }

                if (action is BetAction)
                {
                    BetAction actionEntry = (BetAction)action;

                    if (this.player.User.ID == actionEntry.Player.User.ID)
                    {
                        ParserPlayer(actionEntry.Player);
                        CloseTimer();

                        //Jeśli fold, ukrywamy karty
                        if (actionEntry.Action == Enums.ActionPokerType.Fold)
                        {
                            HideCards();
                        }
                    }
                }
                else if (action is CardBacksideAction)
                {
                    //Otrzymanie kart (tyły kart)
                    CardBacksideAction actionEntry = (CardBacksideAction)action;

                    if (this.player.User.ID == actionEntry.Player.User.ID)
                    {
                        ParserPlayer(actionEntry.Player);
                        ShowEmptyCards(actionEntry.Count);
                    }
                }
                else if (action is CardHideupAction)
                {
                    CardHideupAction actionEntry = (CardHideupAction)action;

                    if (this.player.User.ID == actionEntry.Player.User.ID)
                    {
                        ParserPlayer(actionEntry.Player);
                        HideCards();
                    }
                }
                else if (action is CardShowupAction)
                {
                    CardShowupAction actionEntry = (CardShowupAction)action;
                    if (this.player.User.ID == actionEntry.Player.User.ID)
                    {
                        ParserPlayer(actionEntry.Player);
                        ShowCards(actionEntry.Cards);
                    }
                }
                else if (action is TablePotAction)
                {
                    TablePotAction actionEntry = (TablePotAction)action;
                    if (this.player.User.ID == actionEntry.Player.User.ID)
                    {
                        ParserPlayer(actionEntry.Player);
                    }
                }
            }));
        }