public void HandleRequestToHit(BlackjackGamePlayer player) { if (RoundInProgress == null) { throw new InvalidOperationException("No round in play"); } var roundplayer = RoundInProgress.GetRoundPlayer(player); if (roundplayer == null) { throw new ArgumentException("'player' is null or invalid"); } if (!roundplayer.HasAction || roundplayer.Hand == null) { throw new InvalidOperationException("Out of turn"); } if (roundplayer.Hand.IsBusted) { throw new InvalidOperationException("Cannot hit busted hand"); } roundplayer.AddCardToHand(_shoe.DealCard()); if (roundplayer.Hand.IsBusted) { moveToNextAction(); } }
public void HandleRequestToDoubleDown(BlackjackGamePlayer player, double amount) { if (RoundInProgress == null) { throw new InvalidOperationException("No round in play"); } var roundplayer = RoundInProgress.GetRoundPlayer(player); if (roundplayer == null) { throw new ArgumentException("'player' is null or invalid"); } if (!roundplayer.HasAction || roundplayer.Hand == null) { throw new InvalidOperationException("Out of turn"); } if (roundplayer.Hand.Cards.Count() != 2) { throw new InvalidOperationException("Must have 2 cards to double"); } if (amount > roundplayer.Wager) { throw new InvalidOperationException("Amounts exceeds current wager"); } roundplayer.AddCardToHand(_shoe.DealCard()); roundplayer.Wager += amount; roundplayer.Player.Account.Debit(amount); moveToNextAction(); }
internal void PlaceWager(BlackjackGamePlayer player, double amount) { if (!_players.Contains(player)) { throw new InvalidOperationException("'player' is null or invalid"); } if (player.IsLive) { throw new InvalidOperationException("Player is in live round"); } if (_roundPlayersQueuedForNextRound.Any(a => a.Player.Id == player.Id)) { throw new InvalidOperationException(); } if (amount > player.Account.Balance) { throw new InvalidOperationException("Insufficient funds"); } if (amount < MinWager || amount > MaxWager) { throw new InvalidOperationException("Player wager is out of range"); } player.Account.Debit(amount); _roundPlayersQueuedForNextRound.Add(new BlackjackGameRoundPlayer(player, amount)); }
internal void RequestToDoubleDown(BlackjackGamePlayer player, double amount) { if (amount > player?.Account?.Balance) { throw new InvalidOperationException("Insufficient funds"); } _dealer.HandleRequestToDoubleDown(player, amount); }
public BlackjackHandSettlement SettleHand(BlackjackGamePlayer player) { var roundplayer = RoundInProgress.GetRoundPlayer(player); if (roundplayer == null) { throw new ArgumentException("'player' is null or invalid"); } return(settleHand(roundplayer)); }
public void RemovePlayer(BlackjackGamePlayer player) { if (_players.Contains(player)) { if (player.IsLive) { throw new InvalidOperationException("Player is in live round"); } _players.Remove(player); _roundPlayersQueuedForNextRound .Remove(_roundPlayersQueuedForNextRound .FirstOrDefault(a => a.Player.Id == player.Id)); } }
public BlackjackGameRoundPlayer(BlackjackGamePlayer player, double wager) { if (player == null) { throw new ArgumentNullException("player", "Player is null"); } if (wager <= 0) { throw new InvalidOperationException("Wager cannot be negative"); } _cards = new List <Card>(); Player = player; Wager = wager; }
public void HandleRequestToStand(BlackjackGamePlayer player) { if (RoundInProgress == null) { throw new InvalidOperationException("No round in play"); } var roundplayer = RoundInProgress.GetRoundPlayer(player); if (roundplayer == null) { throw new ArgumentException("'player' is null or invalid"); } if (!roundplayer.HasAction || roundplayer.Hand == null) { throw new InvalidOperationException("Out of turn"); } moveToNextAction(); }
internal bool GetPlayerHasAction(BlackjackGamePlayer player) { return(_roundInProgress?.GetRoundPlayer(player)?.HasAction ?? false); }
internal double GetPlayerWager(BlackjackGamePlayer player) { return(_roundInProgress?.GetRoundPlayer(player)?.Wager ?? _roundPlayersQueuedForNextRound.SingleOrDefault(a => a.Player.Id == player.Id)?.Wager ?? 0); }
internal BlackjackHand GetPlayerHand(BlackjackGamePlayer player) { return(_roundInProgress?.GetRoundPlayer(player)?.Hand); }
internal bool GetPlayerIsLive(BlackjackGamePlayer player) { return(_roundInProgress?.GetRoundPlayer(player) != null); }
internal void RequestToStand(BlackjackGamePlayer player) { _dealer.HandleRequestToStand(player); }
public BlackjackHandSettlement SettlePlayerHand(BlackjackGamePlayer player) { return(_dealer.SettleHand(player)); }
public BlackjackGameRoundPlayer GetRoundPlayer(BlackjackGamePlayer player) { return(_roundPlayers.SingleOrDefault(a => a.Player.Id == player.Id)); }