public void FindDrawnPlayers_ShouldReturnHighestDrawnPlayers(
            int[] ranks, int[] indexOfDrawnPlayers)
        {
            // Arrange
            var players = new List <Player>();

            foreach (var rank in ranks)
            {
                players.Add(new Player(rank.ToString())
                {
                    CurrentCard = new Card(Suit.Clubs, rank)
                });
            }
            var expected = new List <Player>();

            foreach (var index in indexOfDrawnPlayers)
            {
                expected.Add(players[index]);
            }
            // Act
            var actual = _sut.FindDrawnPlayers(players);

            // Assert
            Assert.Equal(expected, actual);
        }
Beispiel #2
0
        public void Play()
        {
            while (!ReachedMinimumHandCount(Players))
            {
                var roundCards  = new List <Card>();
                var roundWinner = FindRoundWinner(roundCards, Players);
                while (roundWinner == null)
                {
                    var drawnPlayers = _drawService.FindDrawnPlayers(Players);
                    _outputProvider($"There was a draw with these players: {string.Join(", ", drawnPlayers)}");
                    _warService.GoToWar(roundCards, drawnPlayers, CardsDealtInWar);
                    roundWinner = FindRoundWinner(roundCards, drawnPlayers);
                }

                RoundWonProcedure(roundWinner, roundCards);
            }

            var finalWinner = _winnerService.DetermineFinalWinner(Players);

            _outputProvider($"{finalWinner} won with a total of {finalWinner.Score} wins" +
                            $" and a hand of {finalWinner.Hand.Count} cards");
        }