public void PopulateShownCards()
        {
            if (Deck.Count < 10)
            {
                //Shuffle the discard pile into the deck
                var allCards = DiscardPile;
                allCards.AddRange(Deck.Pop(Deck.Count));

                allCards.Shuffle();

                Deck        = allCards;
                DiscardPile = new List <TrainCard>();
            }

            FlipShownCards();

            var locomotiveCount = ShownCards.Where(x => x.Color == TrainColor.Locomotive).Count();

            while (locomotiveCount >= 3)
            {
                Console.WriteLine("Shown cards has 3 or more locomotives! Burning the shown cards.");

                //Discard the shown cards
                DiscardPile.AddRange(ShownCards);
                ShownCards = new List <TrainCard>();

                //Add a new set of shown cards
                FlipShownCards();
                locomotiveCount = ShownCards.Where(x => x.Color == TrainColor.Locomotive).Count();
            }
        }
示例#2
0
        public void DiscardCards(List <Card> cards)
        {
            DiscardPile.AddRange(cards);
            foreach (var card in cards)
            {
                Hand.Remove(card);
                card.RevealToAll();
            }

            OnCardsDiscarded?.Invoke(this, new PlayerCardDraw()
            {
                Cards = new List <Card>(cards), Amount = cards.Count(), Player = this
            });
        }
示例#3
0
 public static void GameReset()
 {
     Score = 0;
     Deck.Clear();
     DiscardPile.Clear();
     DiscardPile.AddRange(new Power[] {
         Power.AlternatePath, Power.AlternatePath, Power.AlternatePath,
         Power.Coin2x, Power.Coin2x, Power.Coin2x,
         Power.HalvePenalty, Power.HalvePenalty, Power.HalvePenalty,
         Power.Invincible,
         Power.Speed2x, Power.Speed2x
     });
     PickNewPower(true);
 }
示例#4
0
        public void ExecuteTurn(ICardPool pool)
        {
            Hand.DiscardTo(DiscardPile);
            PlayedCards.DiscardTo(DiscardPile);
            FillHand();
            while (Hand.Any())
            {
                var card = Hand[0];
                Hand.RemoveAt(0);
                card.Play(this, null, pool);
                PlayedCards.Add(card);
            }

            var availableFunds = PlayedCards.Select(c => c.EType).Concat(new [] { Element.Free }).GroupBy(e => e).ToDictionary(g => g.Key, g => g.Count());

            DiscardPile.AddRange(pool.BuyAll(availableFunds));

            Console.WriteLine("Own {0} Cards:{1}", Collection.Count(), string.Join(", ", Collection.OrderBy(c => c.CardId).Select(c => c.ToString())));
        }
示例#5
0
        private void KillPokemon(PokemonCard pokemon)
        {
            DiscardPile.AddRange(pokemon.AttachedEnergy);
            pokemon.AttachedEnergy.Clear();

            if (pokemon.EvolvedFrom != null)
            {
                DiscardPile.Add(pokemon.EvolvedFrom);

                if (pokemon.EvolvedFrom.EvolvedFrom != null)
                {
                    DiscardPile.Add(pokemon.EvolvedFrom.EvolvedFrom);
                    pokemon.EvolvedFrom.EvolvedFrom = null;
                }

                pokemon.EvolvedFrom = null;
            }

            DiscardPile.Add(pokemon);

            pokemon.DamageCounters = 0;
            pokemon.ClearStatusEffects();
        }