public void GetCardsWhateverToPlay_EmptyPiles_ReturnsAllUniqueCards()
        {
            IGameProvider gameProvider =
                GameProviderFabric.Create(new List <Color> {
                Color.White, Color.Red
            });

            var fireworkPile = new FireworkPile(gameProvider);
            var discardPile  = new DiscardPile(gameProvider);

            var pileAnalyzer = new PilesAnalyzer(gameProvider);

            // act
            IReadOnlyList <Card> actual = pileAnalyzer.GetCardsWhateverToPlay(fireworkPile, discardPile);

            // assert
            var actualMatrix = new CardsToMatrixConverter(gameProvider).Encode(actual);

            var expectedMatrix = gameProvider.CreateEmptyMatrix();

            expectedMatrix[Rank.One, Color.White]   = 1;
            expectedMatrix[Rank.One, Color.Red]     = 1;
            expectedMatrix[Rank.Two, Color.White]   = 1;
            expectedMatrix[Rank.Two, Color.Red]     = 1;
            expectedMatrix[Rank.Three, Color.White] = 1;
            expectedMatrix[Rank.Three, Color.Red]   = 1;
            expectedMatrix[Rank.Four, Color.White]  = 1;
            expectedMatrix[Rank.Four, Color.Red]    = 1;
            expectedMatrix[Rank.Five, Color.White]  = 1;
            expectedMatrix[Rank.Five, Color.Red]    = 1;

            TestHelper.AreMatrixEqual(expectedMatrix, actualMatrix, gameProvider);
        }
        public Matrix Encode(IEnumerable <Card> cards)
        {
            if (cards == null)
            {
                throw new ArgumentNullException(nameof(cards));
            }

            Matrix result = _provider.CreateEmptyMatrix();

            foreach (Card card in cards)
            {
                result[card]++;
            }

            return(result);
        }
Exemple #3
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="excludedCards"></param>
        /// <returns></returns>
        /// <exception cref="ArgumentNullException"></exception>
        private Matrix GetCorrectedGuess(Matrix excludedCards)
        {
            if (excludedCards == null)
            {
                throw new ArgumentNullException(nameof(excludedCards));
            }

            Matrix situation = _provider.CreateEmptyMatrix();

            foreach (var number in _provider.Ranks)
            {
                foreach (var color in _provider.Colors)
                {
                    situation[number, color] = Math.Max(_matrix[number, color] - excludedCards[number, color], 0);
                }
            }

            return(situation);
        }
Exemple #4
0
 protected Pile(IGameProvider provider)
 {
     Provider  = provider ?? throw new ArgumentNullException(nameof(provider));
     Matrix    = provider.CreateEmptyMatrix();
     Converter = new CardsToMatrixConverter(provider);
 }