Пример #1
0
        public async Task Start()
        {
            if (Round == null)
            {
                Players.ForEach(p => p.IsInAllIn = false);

                _deck = new Deck();
                _deck.Shuffle();

                Winner = null;

                foreach (var pokerUser in Players)
                {
                    _cards[pokerUser] = _deck.GetCards(2);
                }

                Winner = null;

                foreach (var pokerUser in Players)
                {
                    _cards[pokerUser] = _deck.GetCards(2);
                }


                CurrentPlayer  = Players[0];
                StartingPlayer = CurrentPlayer;

                var gameViewModels = CreateGameViewModels();

                await HubEventEmitter.SendPokerAction(gameViewModels);

                await Task.Delay(100);

                Round = new Round(this, RoundType.Start);

                await Round.Next();
            }
        }
Пример #2
0
        public async Task <Winner> Next(UserAction userAction = null)
        {
            if (userAction.RoundId != Round.Id)
            {
                return(null);
            }

            var result = await Round.Next(userAction);

            if (result)
            {
                int nextRoundType = (int)Round.RoundType;
                nextRoundType++;

                int currentPlayerNumber = Players.Where(p => p.IsActive).ToList().Count;

                if (currentPlayerNumber == 1)
                {
                    var player = Players.FirstOrDefault(p => p.IsActive);
                    Winner = new Winner(player, null, false);
                    return(Winner);
                }

                if (nextRoundType == (int)RoundType.End)
                {
                    Winner = GetWinner(_cards);
                    return(Winner);
                }

                Round = new Round(this, (RoundType)nextRoundType);

                List <Card> nextCards = null;

                switch (Round.RoundType)
                {
                case RoundType.Flop:
                    nextCards    = _deck.GetCards(3);
                    _commonCards = nextCards.ToList();
                    break;

                case RoundType.Turn:
                case RoundType.River:
                    nextCards = _deck.GetCards(1);
                    _commonCards.AddRange(nextCards);
                    break;
                }


                await HubEventEmitter.SendPokerAction(CreateGameViewModels());

                await Task.Delay(100);

                await Round.Next();

                return(null);
            }
            else
            {
                return(null);
            }



            //if(Round == null)
            //{
            //    var deck = new Deck();
            //    deck.Shuffle();

            //    foreach (var pokerUser in PokerUsers)
            //    {
            //        _cards[pokerUser] = deck.GetCards(2);
            //    }

            //    var sendCardsToAll = new PokerAction(RoundType.Start, _table.Id, PokerUsers, _cards, PokerActionType.User);

            //    EventProxy.DispatchPokerAction(sendCardsToAll);

            //    Round = new Round(this, RoundType.Start);
            //}


            //Round = new Round(PokerUsers, (RoundType)_turnState);

            var RoundStatus = new RoundStatus();

            //while (Round.RoundType != RoundType.End)
            //{
            //    Console.WriteLine($"Round type: {(RoundType)_turnState}");
            //    switch(Round.RoundType)
            //    {
            //        case RoundType.Flop:
            //            RoundStatus.Flop = deck.GetCards(3);
            //            break;
            //        case RoundType.Turn:
            //        case RoundType.River:
            //            RoundStatus.Flop.Add(deck.GetCards(1).First());
            //            break;
            //    }

            //    RoundStatus.RoundType = (RoundType)_turnState;
            //    await _hubEventEmitter.SendStatus(_table, RoundStatus);
            //    await Round.Next(_hubEventEmitter);
            //    _turnState++;
            //    Round = new Round(PokerUsers, (RoundType)_turnState);
            //}

            //var gm = new GameManager();

            //foreach (var item in _cards)
            //{
            //    var playerCards = RoundStatus.Flop.ToList();
            //    playerCards.AddRange(item.Value);
            //    _results[item.Key] = gm.GetResult(playerCards);
            //}

            //var winner = _results.OrderByDescending(a => a.Value).First();

            //Console.WriteLine("Winner" + winner.Key.Username);

            //await _hubEventEmitter.SendWinner(_table, $"{winner.Key.Username} with [{winner.Value.Hand}] and with the following values: {winner.Value.Values.Select(v => v.ToString())}");
        }
Пример #3
0
 public LiveWallpaperHub(HubEventEmitter hubEventEmitter)
 {
     _hubEventEmitter = hubEventEmitter;
 }