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(); } }
private BlackjackHandSettlement settleHand(BlackjackGameRoundPlayer roundplayer) { if (RoundInProgress.RoundPlayers.Any(a => a.HasAction)) { if (!roundplayer.Hand.IsBusted) { throw new InvalidOperationException("Non-busted hands cannot settle until round completes"); } } var settlement = new BlackjackHandSettlement(roundplayer, RoundInProgress.DealerHand); if (settlement.WagerOutcome == WagerOutcome.Draw) { roundplayer.Player.Account.Credit(settlement.WagerAmount); } else if (settlement.WagerOutcome == WagerOutcome.Win) { roundplayer.Player.Account.Credit(settlement.WagerAmount * 2); } RoundInProgress.SettleRoundPlayer(roundplayer, settlement); return(settlement); }
private void playDealerHand() { if (RoundInProgress == null) { return; } if (RoundInProgress.RoundPlayers.All(a => a.Hand.IsBusted)) { return; } while (RoundInProgress.DealerHand != null) { if (RoundInProgress.DealerHand.Score > 17) { break; } if (RoundInProgress.DealerHand.Score == 17 && !RoundInProgress.DealerHand.IsSoft) { break; } RoundInProgress.AddCardToDealerHand(_shoe.DealCard()); } }
private void moveToNextAction() { if (!RoundInProgress.MoveToNextAction()) { playDealerHand(); } }
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(); }
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 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(); }