public Deck(ICardsConfiguration configuration, bool startNewGame = true) : this(configuration) { if (startNewGame) { NewGame(); } }
public void EnsureSuperDeckCardCount(string configurationName, int deckCount, int expectedCardCount) { configuration = CardConfigurationFactory.GetConfiguration(configurationName); SuperDeck deck = new SuperDeck(configuration, deckCount); Assert.Equal(expectedCardCount, deck.CardCount); }
/// <summary> /// Registers a custom card configuration with the <see cref="CardConfigurationFactory">CardConfigurationFactory</see> /// </summary> /// <param name="name"></param> /// <param name="configuration"></param> public static void RegisterConfiguration(string name, ICardsConfiguration configuration) { if (Configurations.ContainsKey(name)) { throw new ArgumentException($"Card Configuration '{name}' already exists"); } Configurations.Add(name, configuration.GetType()); }
public void EnsureDeckCardCount(string configurationName, string expectedConfigurationName, int expectedCardCount) { configuration = CardConfigurationFactory.GetConfiguration(configurationName); Deck deck = new Deck(configuration); Assert.Equal(expectedConfigurationName, configuration.ConfigurationType); Assert.Equal(expectedCardCount, deck.CardsInDeck); Assert.True(deck.HasCards); }
/// <summary> /// Initialize a deck of cards using this <see cref="ICardsConfiguration"/> /// </summary> /// <param name="configuration"></param> private Deck(ICardsConfiguration configuration) { if (configuration == null) { throw new ArgumentNullException(nameof(configuration), "The configuration must be supplied to the deck"); } _randomProvider = new RNGCryptoServiceProvider(); _cards = configuration.ConfigureDeck(); CardsInDeck = _cards.Count; }
/// <summary> /// Configures the <see cref="SuperDeck"/> object /// </summary> /// <param name="configuration">The <see cref="ICardsConfiguration"/> configuration for all decks in this object</param> /// <param name="numberOfDecks">Number of <see cref="Deck"/> objects</param> public SuperDeck(ICardsConfiguration configuration, int numberOfDecks = 1) { _decks = new List <Deck>(); Parallel.ForEach(Enumerable.Range(0, numberOfDecks), new ParallelOptions { MaxDegreeOfParallelism = 4 }, index => { ICardsConfiguration config = (ICardsConfiguration)Activator.CreateInstance(configuration.GetType()); Deck d = new Deck(config); _decks.Add(d); }); DeckCount = numberOfDecks; CardCount = DeckCount * configuration.NumberOfCardsInDeck; }
public void TestCardSuits(string configurationName, string[] noSuitValues, bool expectedHasExtendedProperties) { configuration = CardConfigurationFactory.GetConfiguration(configurationName); IList <string> noSuitValuesList = noSuitValues.ToList(); Deck deck = new Deck(configuration); Card card = null; while (deck.HasCards) { card = deck.Deal(); Assert.NotNull(card); Assert.Equal(expectedHasExtendedProperties, card.ExtendedProperties != null); if (expectedHasExtendedProperties) { Assert.Equal(!card.ExtendedProperties.ContainsKey(Constants.SuitProperty), noSuitValues.Select(v => configuration.FaceValueMapping[v]).Contains(card.Value)); } } }