/// <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); }
/// <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); }