public CardPosition PurgeCardFromDeck(string id) { if (!TotalDeckList.Where(i => i.Id == id).Any()) { throw new Exception("Could not find card with ID of " + id); } var card = TotalDeckList.Where(i => i.Id == id).Single(); if (DrawPile.Contains(card)) { DrawPile.Remove(card); return(CardPosition.DRAW); } if (DiscardPile.Contains(card)) { DiscardPile.Remove(card); return(CardPosition.DISCARD); } if (Hand.Contains(card)) { Hand.Remove(card); return(CardPosition.HAND); } throw new Exception("This should be impossible"); }
public void AddNewCardToDiscardPile(AbstractCard card) { if (TotalDeckList.Any(item => item.Id == card.Id)) { throw new Exception("Attempted to add duplicate card to deck: " + card.Name); } DiscardPile.Add(card); }
public void MoveCardToPile(AbstractCard card, CardPosition position, bool newCardsAllowed = false) { var fromPosition = GetCardPosition(card.Id); var fromPile = GetPileForPosition(fromPosition); if (!newCardsAllowed && !TotalDeckList.Contains(card)) { Log.Info("Card did not exist prior to pile move"); } var toPile = GetPileForPosition(position); if (fromPile == null) { throw new Exception("Could not find card with name " + card.Name); } fromPile.RemoveAll((item) => item.Id == card.Id); toPile.Add(card); }
public List <AbstractCard> DrawNextNCards(int n) { var cardsSoFar = new List <AbstractCard>(); int cardsToStart = TotalDeckList.Count(); try { for (int i = 0; i < n; i++) { if (DrawPile.IsEmpty()) { ReshuffleDeck(); if (DrawPile.IsEmpty()) { Debug.Log("Deck is empty, discard is empty, yet still we attempt to draw"); this.Hand.AddRange(cardsSoFar); return(cardsSoFar); } } cardsSoFar.Add(DrawPile.PopFirstElement()); } this.Hand.AddRange(cardsSoFar); } finally { var cardsAfterShuffle = TotalDeckList.Count(); if (cardsToStart != cardsAfterShuffle) { throw new Exception("Validation failure: after shuffle had " + cardsAfterShuffle + " and cards to start were " + cardsToStart); } } return(cardsSoFar); }