Пример #1
0
 public Deck(ICardsConfiguration configuration, bool startNewGame = true) : this(configuration)
 {
     if (startNewGame)
     {
         NewGame();
     }
 }
Пример #2
0
        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());
        }
Пример #4
0
        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);
        }
Пример #5
0
        /// <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;
        }
Пример #6
0
 /// <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;
 }
Пример #7
0
        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));
                }
            }
        }