Esempio n. 1
0
 public ValueTask EndSessionAsync(BlackjackSession session)
 {
     if (session == null)
     {
         throw new BlackjackSessionNullException();
     }
     return(repository.DeleteAsync(session.GetContext()));
 }
Esempio n. 2
0
        public BlackjackState Stand(BlackjackSession session, ulong playerId)
        {
            if (!session.Players.TryGetValue(playerId, out var currentPlayer))
            {
                throw new InvalidOperationException();
            }

            if (!session.Players.TryGetValue(DealerId, out var dealer))
            {
                throw new InvalidOperationException();
            }

            while (true)
            {
                if (session.GetHandWorth(dealer) >= Math.Max(session.GetHandWorth(currentPlayer), 17))
                {
                    if (currentPlayer.Hand.Count >= 5)
                    {
                        if (dealer.Hand.Count == 5)
                        {
                            if (session.GetHandWorth(dealer) == session.GetHandWorth(currentPlayer))
                            {
                                return(BlackjackState.DRAW);
                            }

                            if (session.GetHandWorth(dealer) > session.GetHandWorth(currentPlayer))
                            {
                                return(BlackjackState.LOSE);
                            }

                            return(BlackjackState.WIN);
                        }
                    }
                    else
                    {
                        if (session.GetHandWorth(dealer) == session.GetHandWorth(currentPlayer))
                        {
                            return(BlackjackState.DRAW);
                        }

                        return(BlackjackState.LOSE);
                    }
                }

                DrawCard(session, DealerId);

                if (session.GetHandWorth(dealer) > 21)
                {
                    return(BlackjackState.WIN);
                }
            }
        }
Esempio n. 3
0
        public BlackjackState DrawCard(BlackjackSession session, ulong playerId)
        {
            if (!session.Players.TryGetValue(playerId, out var currentPlayer))
            {
                throw new InvalidOperationException();
            }

            currentPlayer.AddToHand(session.Deck.DrawRandom());
            if (session.GetHandWorth(currentPlayer) > 21)
            {
                // TODO: write test that makes player fail.
                return(BlackjackState.LOSE);
            }

            return(BlackjackState.NONE);
        }