void Instance_OnTableHitoryEvent(TableModel table, ObservableCollection <BaseAction> tableHistory) { Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() => { if (this.gameTable.GameTable.ID != table.ID || this.player == null) { return; } //Pobieramy informacje ile gracz kart ma na ręce foreach (IAction action in tableHistory) { if (action is CardBacksideAction) { //Otrzymanie kart (tyły kart) CardBacksideAction actionEntry = (CardBacksideAction)action; if (this.player.User.ID == actionEntry.Player.User.ID) { ShowEmptyCards(actionEntry.Count); } } else if (action is CardHideupAction) { CardHideupAction actionEntry = (CardHideupAction)action; if (this.player.User.ID == actionEntry.Player.User.ID) { HideCards(); } } else if (action is CardShowupAction) { CardShowupAction actionEntry = (CardShowupAction)action; if (this.player.User.ID == actionEntry.Player.User.ID) { ShowCards(actionEntry.Cards); } } } })); }
void StageProcess_OnAllInProcessStartedEvent() { //Pobieramy wszystkich graczy aktywnych w rozdaniu //i pokazujemy karty od razu foreach (PlayerModel player in this.Game.GameTableModel.PlayerHavingPlayStatus()) { Task.Factory.StartNew(() => { CardShowupAction cardActionPlayer = new CardShowupAction() { Cards = player.Cards, Stage = Game.GameTableModel.Stage, CreatedAt = DateTime.Now, Player = player }; Game.GameTableModel.ActionHistory.Add(cardActionPlayer); }); } }
/// <summary> /// Wysyła informacje dla gracza jakie karty on posiada /// </summary> public void SendPlayerCards(PlayerModel player) { //Pobieramy _client dla user var _player = GameTableModel.GetPlayer(player.User); if (_player.Cards != null) { CardShowupAction cardActionPlayer = new CardShowupAction() { Cards = _player.Cards, Stage = GameTableModel.Stage, CreatedAt = DateTime.Now, Player = _player }; //Wysylamy wiadomosc tylko do niego if (player.User.IsOnline()) { player.User.GetClient().OnGameActionTrigger(GameTableModel, cardActionPlayer); } } }
/// <summary> /// Rozpoczecie pokazywania kart i wygranych /// </summary> public void ShowdownStart() { var gameTable = Game.GameTableModel; var showingPlayer = GetShowdownPlayerStart(); var showingPlayerLoop = true; Evaluator = new Evaluator(Game); Evaluator.CalculateStrength(); // Showdown rozpoczyna się wraz z graczem, który jako pierwszy wrzucił ostatnią stawkę do puli. // Jest nim ten gracz, który ustanowił stawkę do której wszyscy inni gracze dorównali. //Inicializacyjana wartosc, stack ktory pozostal do rozdania jest rowny sumie EvaluatorStrength bestStrenghtNow = null; do { if (showingPlayer.Status.HasFlag(PlayerModel.PlayerStatus.INGAME) || showingPlayer.Status.HasFlag(PlayerModel.PlayerStatus.DONTPLAY)) { //Obliczamy sile rozdan obecnych graczy EvaluatorStrength playerStrenght = Evaluator.GetStrenght(showingPlayer); if ( bestStrenghtNow == null || bestStrenghtNow.Points <= playerStrenght.Points || playerStrenght.Player.Stack == 0 ) { if (playerStrenght.Player.Stack != 0) { bestStrenghtNow = playerStrenght; } //Pokazanie kart dla innych graczy if (!PlayerShowedCardsEarlier(playerStrenght.Player)) { //Pokazanie kart CardShowupAction cardActionPlayer = new CardShowupAction() { Cards = playerStrenght.Player.Cards, Stage = Game.GameTableModel.Stage, CreatedAt = DateTime.Now, Player = playerStrenght.Player }; Game.GameTableModel.ActionHistory.Add(cardActionPlayer); //Podswietlamy wygrany układ CardHighlightAction cardHighlight = new CardHighlightAction() { Cards = playerStrenght.WinCardList, Stage = Game.GameTableModel.Stage, CreatedAt = DateTime.Now, Player = playerStrenght.Player }; Game.GameTableModel.ActionHistory.Add(cardHighlight); } string message = "Gracz " + playerStrenght.Player.User.Username + " pokazuje " + Evaluator.CardHandName(playerStrenght); Console.Write(message); Game.SendDealerMessage(message); Thread.Sleep(1000); } else { //Ukrycie kart CardHideupAction cardActionPlayer = new CardHideupAction() { Stage = Game.GameTableModel.Stage, CreatedAt = DateTime.Now, Player = playerStrenght.Player }; Game.GameTableModel.ActionHistory.Add(cardActionPlayer); //Gracz nie musi pokazywać tych kart Console.Write("Gracz " + showingPlayer.User.Username + " zrzuca karty"); Game.SendDealerMessage("Gracz " + showingPlayer.User.Username + " zrzuca karty"); } } showingPlayer = Game.NextPlayer(showingPlayer); if (showingPlayer == GetShowdownPlayerStart()) { showingPlayerLoop = false; } } while (showingPlayerLoop); }
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); } } })); }