public void When_Collecting_Cards_From_Players_Should_Return_Card_Count_Equal_To_All_Cards_In_Players_Hands() { var player1Hand1 = new PlayerHand(); player1Hand1.Cards.AddRange(new List <ICard> { new NullCard(), new NullCard() }); var player1Hand2 = new PlayerHand(); player1Hand2.Cards.AddRange(new List <ICard> { new NullCard(), new NullCard() }); var player2Hand = new PlayerHand(); player2Hand.Cards.AddRange(new List <ICard> { new NullCard(), new NullCard() }); var player1 = new Player(500, new Mock <IPlayerStrategy>().Object); player1.CurrentHands.Add(player1Hand1); player1.CurrentHands.Add(player1Hand2); var player2 = new Player(500, new Mock <IPlayerStrategy>().Object); player2.CurrentHands.Add(player2Hand); var players = new List <IPlayer> { player1, player2 }; Assert.AreEqual(6, _sut.CollectCardsFrom(players).Count); }
//todo: template method pattern public void PlaySingleGame() { if (RegisteredPlayers.Count == 0) { throw new InvalidOperationException("Cannot start a game with no players"); } _cardDeck.Shuffle(); _gameManager.PlaceYourBets(RegisteredPlayers); _gameManager.DealInitialCards(_cardDeck, RegisteredPlayers, CurrentCards); if (!CurrentCards.IsBlackjack()) { _gameManager.PlayersPlay(_cardDeck, RegisteredPlayers, VisibleCard); _gameManager.DealerPlays(_cardDeck, CurrentCards, _dealerStrategy); } _gameManager.DeterminePlayerHandOutcomes(CurrentCards, RegisteredPlayers); _gameManager.PayoutOrCollectBetsFrom(RegisteredPlayers); _gameManager.SaveCurrentHandResultsOf(RegisteredPlayers); _cardDeck.Cards.AddRange(_gameManager.CollectCardsFrom(RegisteredPlayers)); _cardDeck.Cards.AddRange(_gameManager.CollectCardsFrom(CurrentCards)); _gameManager.ClearHandsFrom(RegisteredPlayers); _gameManager.DetermineToLeaveGameOrStay(RegisteredPlayers); }