Beispiel #1
0
        public async Task Deal()
        {
            switch (HandState.GetCurrentStage())
            {
            case Models.HandStage.Preflop:
                var currentPlayer       = Table.SmallBlind;
                var cardsDealtPerPlayer = 0;

                while (!(cardsDealtPerPlayer == 2))
                {
                    var playerCard = CardDeck.GetNextCard();
                    currentPlayer.Value.PocketCards[cardsDealtPerPlayer] = playerCard;

                    var dealCardEvent = new GameEvent()
                    {
                        EventType = GameActionType.DealCard,
                        Data      = new {
                            PlayerId = currentPlayer.Value.Id,
                            Card     = playerCard
                        }
                    };

                    await DispatchPlayerCard(dealCardEvent);

                    if (currentPlayer == Table.Dealer)
                    {
                        cardsDealtPerPlayer++;
                    }
                    currentPlayer = Table.GetNextActivePlayerNode(currentPlayer);
                }

                break;

            case Models.HandStage.Flop:
                _ = CardDeck.GetNextCard();
                List <Card> cardsToDeal = CardDeck.GetNextCards(3);

                BoardCards.AddRange(cardsToDeal);

                await DispatchGameEvent(new GameEvent()
                {
                    EventType = GameActionType.DealFlop, Data = cardsToDeal
                });

                break;

            case Models.HandStage.Turn:
                _ = CardDeck.GetNextCard();
                var turnCard = CardDeck.GetNextCard();
                BoardCards.Add(turnCard);

                await DispatchGameEvent(new GameEvent()
                {
                    EventType = GameActionType.DealTurn, Data = turnCard
                });

                break;

            case Models.HandStage.River:
                _ = CardDeck.GetNextCard();
                var riverCard = CardDeck.GetNextCard();
                BoardCards.Add(riverCard);
                await DispatchGameEvent(new GameEvent()
                {
                    EventType = GameActionType.DealTurn, Data = riverCard
                });

                break;

            default:
                break;
            }
        }