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