private void ForcePlayerBust(int i, Game game) { game.Players[i].Hand.Cards = new List<Card> { new Card(CardValue.King), new Card(CardValue.King), new Card(CardValue.Two) }; }
private void ForceDealerBust(Game game) { game.Dealer.Hand.Cards = new List<Card> { new Card(CardValue.King), new Card(CardValue.King), new Card(CardValue.Two) }; }
public void PlayerBustIfOver21() { var game = new Game(); GameController.InitializeGame(game); GameController.Deal(game); ForcePlayerBust(0, game); GameController.CheckWinLossStatus(game); Assert.AreEqual(Status.Bust, game.Players[0].Status); }
public void AllBustedPlayersStillLoseIfDealerBust() { var game = new Game(); GameController.InitializeGame(game); GameController.Deal(game); ForceDealerBust(game); ForcePlayerBust(0,game); GameController.CheckWinLossStatus(game); Assert.AreEqual(Status.Bust, game.Players[0].Status); }
public void AllNonBustedPlayersWinIfDealerBust() { var game = new Game(); GameController.InitializeGame(game); GameController.Deal(game); ForceDealerBust(game); GameController.CheckWinLossStatus(game); foreach (var player in game.Players.Where(player => player.Status != Status.Bust)) {//all non-busted players should Win Assert.AreEqual(Status.Win, player.Status); } }
public void OnNewDealEachPlayerShouldHaveTwoCards() { var game = new Game(); GameController = new GameController(); GameController.InitializeGame(game); GameController.Deal(game); foreach (var player in game.Players) { Assert.AreEqual(2, player.Hand.Cards.Count); } }
private static void Deal(Game game) { Console.WriteLine(""); _gameController.Deal(game); _gameController.CheckWinLossStatus(game); ShowUpdatedStatus(game); Console.WriteLine(""); while (game.Status != GameStatus.AllPlayersComplete && game.Status!=GameStatus.Complete) { WaitForPlayerAction(game); ShowUpdatedStatus(game); } ShowUpdatedStatus(game); }
private static void WaitForPlayerAction(Game game) { int playerId = 0; Player player = game.Players[playerId]; Console.WriteLine(""); Console.WriteLine("Player: (S)tand or (H)it?"); ConsoleKeyInfo key = Console.ReadKey(); if (key.Key == ConsoleKey.H) { _gameController.Hit(playerId, game); } if (key.Key == ConsoleKey.S) { _gameController.Stand(playerId, game); } }
public Game Deal(Game game) { Reset(game); if (game.Shoe.Cards.Count < 0.25*game.Shoe.InitialDeckCount) { game.Shoe.Replenish(); } for (int i = 0; i < 2; i++) { foreach (Player player in game.Players) { GiveCard(player, game); } GiveCard(game.Dealer, game); } return game; }
public void CheckWinLossStatus(Game game) { if (game.Dealer.Hand.Evaluate() == 21) { game.Dealer.Status = Status.Win; game.Status = GameStatus.Complete; } else if (game.Dealer.Hand.Evaluate() > 21) { game.Dealer.Status = Status.Bust; game.Status = GameStatus.Complete; } foreach (Player player in game.Players.Where(p => p.Status == Status.Undetermined)) { if (player.Hand.Evaluate() == 21) { //player has blackjack (or a push if game is complete) player.Status = (game.Status == GameStatus.Complete) ? Status.Win : Status.Push; } else if (player.Hand.Evaluate() > 21) { player.Status = Status.Bust; } else if (game.Dealer.Status == Status.Bust) { player.Status = Status.Win; } else if (game.Dealer.Status == Status.Win) { player.Status = Status.Lose; } } if ( game.Players.All( player => (player.Hand.LastAction == Hand.HandAction.Stand || player.Status != Status.Undetermined))) { game.Status = GameStatus.AllPlayersComplete; } if (game.Status == GameStatus.AllPlayersComplete) { DealerPlay(game); if (game.Dealer.Hand.Evaluate() > 21) { game.Dealer.Status = Status.Bust; foreach (Player player in game.Players.Where(player => player.Status == Status.Undetermined)) { player.Status = Status.Win; } } else { foreach (Player player in game.Players.Where(player => player.Status == Status.Undetermined)) { if (game.Dealer.Hand.Evaluate() > player.Hand.Evaluate()) { player.Status = Status.Lose; } else if (game.Dealer.Hand.Evaluate() == player.Hand.Evaluate()) { player.Status = Status.Push; } else { player.Status = Status.Win; } } if (game.Players.Any(player => player.Status == Status.Win)) { game.Dealer.Status = game.Dealer.Hand.Evaluate() == 21 ? Status.Push : Status.Lose; } else { game.Dealer.Status = Status.Win; } } game.Status = GameStatus.Complete; } }
private void InitializePlayers(Game game) { game.Players = new List<Player>(); for (int i = 0; i < NumPlayers; i++) { game.Players.Add(new Player()); } game.Dealer = new Dealer(); }
private void DealerPlay(Game game) { while (game.Dealer.Hand.Evaluate() < 16) { GiveCard(game.Dealer, game); } }
private static void Reset(Game game) { game.Status = GameStatus.NotStarted; game.Dealer.Hand = new Hand(); game.Dealer.Status = Status.Undetermined; foreach (Player player in game.Players) { player.Hand = new Hand(); player.Status = Status.Undetermined; } }
public Game InitializeGame(Game game) { game.Status = GameStatus.NotStarted; InitializePlayers(game); game.Shoe = new Deck(); game.Shoe.Shuffle(); return game; }
public Game Hit(int playerId, Game game) { Player player = game.Players[playerId]; player.Hand.LastAction = Hand.HandAction.Hit; GiveCard(player, game); CheckWinLossStatus(game); return game; }
public void GiveCard(Player player, Game game) { player.Hand.Cards.Add(game.Shoe.DealNextCard()); }
private static void ShowUpdatedStatus(Game game) { Console.Clear(); Console.WriteLine("Game Status: " + game.Status); PrintHandDetail(game.Dealer,game.Status.Equals(GameStatus.Complete)); int playerId = 0; Player player = game.Players[playerId]; PrintHandDetail(player, game.Status.Equals(GameStatus.Complete)); }
public Game Stand(int playerId, Game game) { Player player = game.Players[playerId]; player.Hand.LastAction = Hand.HandAction.Stand; CheckWinLossStatus(game); return game; }