示例#1
0
        /// <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);
                }
            }
        }
示例#2
0
        /// <summary>
        /// Inicjalizuje handlery dla list i elementów modelu stołu etc.
        /// </summary>
        private void AfterInitialize()
        {
            GameTableModel.ActionHistory.CollectionChanged += new NotifyCollectionChangedEventHandler(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                if (e.NewItems != null)
                {
                    foreach (Object item in e.NewItems)
                    {
                        if (item is BetAction)
                        {
                            var betAction = (BetAction)item;
                            //Odejmujemy od salda gracza
                            PlayerModel _player = GameTableModel.PlayersList.FirstOrDefault(p => p.User.ID == betAction.Player.User.ID);

                            if (this.GameTableModel.Currency == Enums.CurrencyType.VIRTUAL)
                            {
                                betAction.Bet = Math.Round(betAction.Bet, 0);
                            }
                            else
                            {
                                betAction.Bet = Math.Round(betAction.Bet, 2);
                            }

                            //Sprawdzenie stacka usera, max. kwota == player.stack
                            if (betAction.Bet > _player.Stack)
                            {
                                betAction.Bet = _player.Stack;
                            }

                            //Dodajemy do póli stołu
                            GameTableModel.TablePot += betAction.Bet;
                            //Odejmujemy saldo
                            _player.Stack -= betAction.Bet;

                            if (betAction.Action == Enums.ActionPokerType.Fold)
                            {
                                if (_player.Status.HasFlag(PlayerModel.PlayerStatus.INGAME))
                                {
                                    _player.Status &= ~PlayerModel.PlayerStatus.INGAME;
                                }

                                _player.Status |= PlayerModel.PlayerStatus.FOLDED;

                                //Aktualizujemy mozliwosc akcji (powrot do gry)
                                this.SendAvailableAction(_player.User);
                            }

                            Console.WriteLine("Gracz " + betAction.Player.User.Username + " wykonał " + betAction.Action.ToString() + " kwota " + betAction.Bet);
                        }
                        else if (item is CardTableAction)
                        {
                            var actionEntry = (CardTableAction)item;
                            Console.WriteLine("Nowe karty na stole (" + actionEntry.Cards.Count() + ")");
                        }
                        else if (item is CardShowupAction)
                        {
                            var actionEntry = (CardShowupAction)item;
                            Console.WriteLine("Gracz " + actionEntry.Player.User.Username + " pokazuje karty");
                        }
                        else if (item is CardHideupAction)
                        {
                            var actionEntry = (CardHideupAction)item;
                            Console.WriteLine("Gracz " + actionEntry.Player.User.Username + " chowa karty");
                        }
                        else if (item is CardBacksideAction)
                        {
                            //Wysyłamy do wszystkich przy stole
                            //if (_client != null)
                            //      _client.ClientProxy.OnPlayerShowcards(Game.GameTableModel, player, playerCards);
                            var actionEntry = (CardBacksideAction)item;
                            Console.WriteLine("Gracz " + actionEntry.Player.User.Username + " otrzymuje karty");
                        }
                        else if (item is TablePotAction)
                        {
                            var actionEntry     = (TablePotAction)item;
                            PlayerModel _player = GameTableModel.PlayersList.FirstOrDefault(p => p.User.ID == actionEntry.Player.User.ID);
                            _player.Stack      += actionEntry.Pot;
                            Console.WriteLine("Gracz otrzymuje kwote: " + actionEntry.Pot);
                        }

                        //Wysyłamy podjęcie akcji przez użytkownika do obserwatorów
                        foreach (UserModel user in GameTableModel.WatchingList.ToList())
                        {
                            //Pobieramy _client dla user
                            var _c = user.GetClient();

                            //Wysylamy wiadomosc do wszystkich o danej akcji
                            if (_c != null)
                            {
                                _c.OnGameActionTrigger(GameTableModel, (BaseAction)item);
                            }
                        }
                    }
                }
            }
                );

            GameTableModel.PlayersList.CollectionChanged += new NotifyCollectionChangedEventHandler(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                Console.WriteLine("PlayersList.CollectionChanged");

                foreach (UserModel user in GameTableModel.GetWatchingExceptPlayers())
                {
                    this.SendAvailableAction(user);
                }

                //Wysłanie informacji o nowym graczu
                if (e.NewItems != null)
                {
                    foreach (Object item in e.NewItems)
                    {
                        var player = item as PlayerModel;

                        Task.Factory.StartNew(() =>
                        {
                            foreach (UserModel user in GameTableModel.WatchingList)
                            {
                                user.GetClient().OnGamePlayerSitdown(GameTableModel, player);
                            }
                        });
                    }
                }
            }
                );

            GameTableModel.WatchingList.CollectionChanged += new NotifyCollectionChangedEventHandler(
                (object sender, NotifyCollectionChangedEventArgs e) =>
            {
                Console.WriteLine("WatchingList.CollectionChanged");

                if (e.NewItems != null)
                {
                    foreach (Object item in e.NewItems)
                    {
                        //Wysłanie obecnego stanu gry dla użytkownika czyli stołu wraz z danymi kart i listy graczy
                        this.DoSendTableHitory(item as UserModel);
                        //Wysyła możliwą akcję
                        this.SendAvailableAction(item as UserModel);

                        //Wysyła karty o ile gracz jest w grze
                        var player = GameTableModel.GetPlayer(item as UserModel);
                        if (player != null)
                        {
                            this.SendPlayerCards(player);
                        }
                    }
                }
            }
                );
        }