public ValueTask EndSessionAsync(BlackjackSession session) { if (session == null) { throw new BlackjackSessionNullException(); } return(repository.DeleteAsync(session.GetContext())); }
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); } } }
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); }