示例#1
0
        /// <summary>
        /// Breaks deck into as many as 7 piles and places the cards one by one into piles
        /// </summary>
        /// <param name="deck"></param>
        /// <returns></returns>
        public CardCollectionOperationResult PileShuffle(Deck deck)
        {
            int pileCount = Math.Min(DEFAULT_PILE_COUNT, deck.Count);
            int cardCount = deck.Count;
            LinkedList<Deck> piles = new LinkedList<Deck>(new Deck[pileCount]);

            for (int i = 0; i < cardCount; ++i)
            {
                Card card = deck.ElementAt(0);
                Deck currentPile = piles.ElementAt(0);

                deck.RemoveAt(0);

                currentPile.Insert(0, card);

                piles.AddLast(currentPile);
                piles.RemoveFirst();
            }

            if (deck.Count == 0)
                deck = new Deck();

            foreach (Deck pile in piles)
                deck.AddRange(pile);

            return new CardCollectionOperationResult(deck);
        }
示例#2
0
        /// <summary>
        /// Removes a card a specified index
        /// </summary>
        /// <param name="deck"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        private CardCollectionOperationResult RemoveCardAtIndex(Deck deck, int index)
        {
            Card card = deck[index];

            deck.RemoveAt(index);

            return new CardCollectionOperationResult(deck, card);
        }