예제 #1
0
        void Instance_OnPlayerActionTriggerEvent(TableModel table, BaseAction action)
        {
            Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
            {
                Console.WriteLine("ON TABLE HISTORY EVENT");
                if (this.GameTable.ID == table.ID)
                {
                    if (action is BetAction)
                    {
                        this.ParseBetAction(action);
                    }
                    else if (action is CardTableAction)
                    {
                        CardTableAction actionEntry = (CardTableAction)action;
                        Console.WriteLine("CardTableAction <____");
                        OnCashierGroupMoney((o, e) =>
                        {
                            CashierWorkspace.Children.Clear();
                        });

                        AddTableCards(actionEntry.Cards, false);
                    }
                    else if (action is TablePotAction)
                    {
                        //Akcja otrzymania przez gracza funduszy
                        var actionEntry = action as TablePotAction;
                        this.OnCashierPotAction(actionEntry.Pot, actionEntry.Player);
                    }
                    else if (action is CardHighlightAction)
                    {
                        //Podświetlamy wygrane układy
                        //Bierzemy wszystkie kontrolki

                        /*CardHighlightAction actionEntry = (CardHighlightAction)action;
                         *
                         * //Czyścimy wszystkie elementy = opacity 1.0
                         *
                         * //Bierzemy seat playera
                         * var playerCardList = this.SeatList.
                         *  FirstOrDefault(p => p.player != null && p.player.User.ID == actionEntry.Player.User.ID).
                         *  CardShowcase.Children.OfType<GameControls.Card>().
                         *  ToList();
                         *
                         * List<GameControls.Card> listOfCards = TableCards.Children.OfType<GameControls.Card>().ToList();
                         * listOfCards = listOfCards.Concat(playerCardList).Distinct().ToList();*/
                    }

                    this.ParseTable(table);
                }
            }));
        }
예제 #2
0
        void Instance_OnTableHitoryEvent(TableModel table, ObservableCollection <BaseAction> tableHistory)
        {
            Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
            {
                if (this.GameTable.ID == table.ID)
                {
                    this.ParseTable(table);

                    //Pobieramy akcje aktualnego stage
                    if (tableHistory != null)
                    {
                        //Pobieramy karty
                        List <BaseAction> actionListStage = tableHistory.ToList();

                        foreach (BaseAction action in actionListStage)
                        {
                            if (action is BetAction)
                            {
                                this.ParseBetAction(action, true);
                            }
                            else if (action is CardTableAction)
                            {
                                CardTableAction actionEntry = (CardTableAction)action;
                                AddTableCards(actionEntry.Cards, true);
                                CashierWorkspace.Children.Clear();
                            }
                        }
                    }

                    //Ustawiamy aktywnego uzytkownika jesli jest taki i jego timer
                    if (table.ActionPlayer != null)
                    {
                        lock (table.ActionPlayer)
                        {
                            var _seat = this.SeatList.FirstOrDefault(p => p.player.User.ID == table.ActionPlayer.User.ID);

                            var lastTableHistoryEntry = tableHistory.LastOrDefault();
                            if (_seat != null && lastTableHistoryEntry != null)
                            {
                                TimeSpan difference = DateTime.Now.Subtract(lastTableHistoryEntry.CreatedAt);
                                _seat.RunTimer(table.ActionTimer, difference.TotalMilliseconds);
                            }
                        }
                    }
                }
            }));
        }
예제 #3
0
파일: Game.cs 프로젝트: wangjun008xx/server
        private void InitializeStage()
        {
            Console.WriteLine("InitializeStage()");

            StageGameProcess = new StageProcess(this);
            StageGameProcess.Initialize();

            StageGameProcess.OnStageChangeEvent += (stage) =>
            {
                Console.WriteLine("OnStageChangeEvent()");
                Thread.Sleep(100);
                List <CardModel> cards = new List <CardModel>();
                switch (stage)
                {
                case Enums.Stage.Flop:
                    this.SendDealerMessage("Rozkładam flopa.");
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    break;

                case Enums.Stage.Turn:
                    this.SendDealerMessage("Rozkładam turn.");
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    break;

                case Enums.Stage.River:
                    this.SendDealerMessage("Rozkładam river.");
                    cards.Add(Helper.Pop <CardModel>(GameTypeHandler.CardList));
                    break;
                }

                Console.WriteLine("Rozdanie kart na stole = " + stage.ToString());

                //Zapisuje zebrane karty do pamieci
                GameTableModel.TableCardList = GameTableModel.TableCardList.Concat(cards).ToList();

                //Przekazujemy karty publice
                CardTableAction cardAction = new CardTableAction()
                {
                    CreatedAt = DateTime.Now,
                    Cards     = cards,
                    Stage     = GameTableModel.Stage
                };

                GameTableModel.ActionHistory.Add(cardAction);
                Thread.Sleep(1500);
            };
            StageGameProcess.OnStageProcessFinishEvent += () =>
            {
                Console.WriteLine("OnStageProcessFinishEvent");
                if (GameTableModel.PlayerHavingPlayStatus().Count == 1)
                {
                    //Wygrywa jeden gracz
                    var playerWinner = GameTableModel.PlayerHavingPlayStatus().FirstOrDefault();
                    playerWinner.Stack += GameTableModel.TablePot;
                    var message = "Gracz " + playerWinner.User.Username + " wygrywa główną pulę " + CurrencyFormat.Get(GameTableModel.Currency, GameTableModel.TablePot) + " ponieważ reszta graczy spasowała karty.";
                    Console.WriteLine(message);

                    this.SendDealerMessage(message);

                    GameTableModel.ShowSystemMessage("Wygrywa " + playerWinner.User.Username, message);
                    Thread.Sleep(2000);
                    GameTableModel.HideSystemMessage();
                }
                else
                {
                    //Showdown
                    StageShowdown stageShowdown = new StageShowdown(this);
                    stageShowdown.OnShowdownWinnerEvent += (evaluatorItem) =>
                    {
                        Console.WriteLine("points: " + evaluatorItem.Points + " (kicker points: " + evaluatorItem.KickerPoints + ")");
                    };
                    stageShowdown.ShowdownStart();
                    stageShowdown.ShowdownPotDistribution();
                }

                Thread.Sleep(100);
                GameTableModel.ShowSystemMessage("Zakończenie rozdania", "Nowe rozdanie zostanie rozpoczęte za 4 sekundy");
                Console.WriteLine("Zakończenie gry na stole " + this.GameTableModel.Name);
                Thread.Sleep(3600);
                GameTableModel.HideSystemMessage();

                BaseFinished();

                if (OnGameFinishedEvent != null)
                {
                    OnGameFinishedEvent(this);
                }

                IsFinished = true;
            };
        }