Exemple #1
0
 /// <summary>
 /// Generates unique decks recursively, and injects into list
 /// </summary>
 /// <param name="lastElement">When calling this function, this element will be the first in the list</param>
 /// <param name="duplicateNumber">Current accumulation of duplicates</param>
 /// <param name="maxDuplicates">Amount of duplicates allowed</param>
 /// <param name="currentDeckSize">Current accumulation of cards</param>
 /// <param name="maxDeckSize">Amount of cards allowed</param>
 /// <param name="cardpool">Card to choice between</param>
 /// <param name="decks">List to inject decks generated in</param>
 void FillUniqueDecks(LinkedTreeElement lastElement, int duplicateNumber, int maxDuplicates,
                      int currentDeckSize, int maxDeckSize, List <ICard> cardpool, List <Deck> decks)
 {
     if (currentDeckSize == maxDeckSize)
     {
         List <ICard> toReturn = new List <ICard>();
         while (lastElement.parent != null)
         {
             toReturn.Add(cardpool[lastElement.value]);
             lastElement = lastElement.parent;
         }
         toReturn.Add(cardpool[lastElement.value]);
         decks.Add(new Deck(toReturn));
     }
     else
     {
         for (int i = lastElement.value; i < cardpool.Count; i++)
         {
             if (i == lastElement.value)
             {
                 if (duplicateNumber == maxDuplicates)
                 {
                     continue;
                 }
                 else
                 {
                     duplicateNumber++;
                 }
             }
             else
             {
                 duplicateNumber = 1;
             }
             var newElement = new LinkedTreeElement(lastElement, i);
             FillUniqueDecks(newElement, duplicateNumber, maxDuplicates, currentDeckSize + 1, maxDeckSize, cardpool, decks);
         }
     }
 }
 public LinkedTreeElement(LinkedTreeElement parent, int value)
 {
     this.value  = value;
     this.parent = parent;
 }