예제 #1
0
        public void Should_shuffle_deck_after_being_refilled()
        {
            var cards = new List <ICard>();

            15.Times(() => cards.Add(new Copper()));
            15.Times(() => cards.Add(new Estate()));

            var drawDeck = new DrawDeck(cards, _discardPile);

            // Move all the cards to the discard pile
            drawDeck.MoveAll(_discardPile);

            // Peek at the top card to trigger a shuffle
            var topCard = drawDeck.TopCard;

            var cardsAfterShuffle = new List <ICard>();

            30.Times(() =>
            {
                cardsAfterShuffle.Add(drawDeck.TopCard);
                drawDeck.TopCard.MoveTo(_discardPile);
            });

            Assert.AreNotEqual(cards, cardsAfterShuffle);
        }
예제 #2
0
 private void ReshuffleDrawDeck()
 {
     if (DiscardPile.Count > 0)
     {
         DrawDeck.AddRange(DiscardPile.Shuffle());
         DiscardPile.Clear();
     }
 }
예제 #3
0
 public Mediator()
 {
     turn              = new Turn();
     drawDeck          = new DrawDeck();
     discardDeck       = new DiscardDeck();
     performCardAction = new PerformCardAction(drawDeck, discardDeck, turn);
     cardFactory       = new CardFactory(performCardAction);
 }
예제 #4
0
        public void Should_NOT_refill_draw_deck_from_discards_when_empty()
        {
            var drawDeck = new DrawDeck(new List <ICard> {
                _copper, _estate
            }, _discardPile);

            drawDeck.TopCard.MoveTo(_discardPile);
            drawDeck.TopCard.MoveTo(_discardPile);
            drawDeck.CardCount.ShouldEqual(0);
        }
예제 #5
0
        public void Should_replace_top_card_when_moved()
        {
            var drawDeck = new DrawDeck(new List <ICard> {
                _copper, _estate
            }, _discardPile);

            drawDeck.TopCard.ShouldEqual(_copper);
            drawDeck.TopCard.MoveTo(_discardPile);
            drawDeck.TopCard.ShouldEqual(_estate);
        }
예제 #6
0
        public void Should_add_cards_passed_via_constructor()
        {
            var drawDeck = new DrawDeck(new List <ICard> {
                _copper, _estate
            }, _discardPile);

            drawDeck.CardCount.ShouldEqual(2);
            _copper.CurrentZone.ShouldEqual(drawDeck);
            _estate.CurrentZone.ShouldEqual(drawDeck);
        }
예제 #7
0
        public void Should_refill_draw_deck_from_discards_when_card_required()
        {
            var drawDeck = new DrawDeck(new List <ICard> {
                _copper, _estate
            }, _discardPile);
            var hand = new Hand();

            // First move the copper to the discard pile
            drawDeck.TopCard.MoveTo(_discardPile);

            // Next move the estate to the hand
            drawDeck.TopCard.MoveTo(hand);

            drawDeck.TopCard.ShouldEqual(_copper);
        }
예제 #8
0
        internal void DrawCards(int drawCards)
        {
            for (int i = 0; i < drawCards; i++)
            {
                if (DrawDeck.Count == 0)
                {
                    ReshuffleDrawDeck();
                }

                if (DrawDeck.Count > 0)
                {
                    Card cardDrawn = DrawDeck.First();
                    DrawDeck.Remove(cardDrawn);
                    Hand.Add(cardDrawn);
                }
            }
        }
예제 #9
0
 public PerformCardAction(DrawDeck drawDeck, DiscardDeck discardDeck, Turn turn)
 {
     this.drawDeck    = drawDeck;
     this.discardDeck = discardDeck;
     this.turn        = turn;
 }
예제 #10
0
 public DeckViewModel(DrawDeck deck)
 {
     CountDescription = deck.CardCount.ToString();
     IsEmpty          = deck.CardCount == 0;
 }