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); }
/// <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); }
protected Pile(IGameProvider provider) { Provider = provider ?? throw new ArgumentNullException(nameof(provider)); Matrix = provider.CreateEmptyMatrix(); Converter = new CardsToMatrixConverter(provider); }