Пример #1
0
        private void DoAttack(Player attacker, Player attacked)
        {
            List<CardModel> cards = attacked.DrawCards(2);

            bool hadTreasure = cards.Any(c => c.Is(CardType.Treasure));
            IEnumerable<CardModel> gainable = cards.Where(c => c is Silver || c is Gold);

            if (gainable.Any())
            {
                CardModel treasure = attacker.Chooser.ChooseOneCard(CardChoiceType.TrashForNobleBrigand, "Trash a treasure", ChoiceSource.None, gainable);
                if (treasure != null)
                {
                    attacked.Trash(treasure);
                    attacker.GainCard(treasure, null);
                    cards.Remove(treasure);
                }
            }

            foreach (CardModel other in cards)
            {
                attacked.DiscardCard(other);
            }

            if (!hadTreasure)
            {
                attacked.GainCard(typeof(Copper));
            }
        }
Пример #2
0
        private void DoAttack(Player attacker, Player attacked)
        {
            List<CardModel> revealed = attacked.DrawCards(2);
            if (revealed.Count > 0)
            {
                string cards = Log.FormatSortedCards(revealed);

                string target = attacked == attacker ? "You" : attacked.Name;
                int choice = attacker.Chooser.ChooseOneEffect(attacker == attacked ? EffectChoiceType.DiscardOrPutOnDeckToDraw: EffectChoiceType.ForceDiscardOrPutOnDeck, revealed, target + " revealed " + cards, choices, choices);
                if (choice == 0)
                {
                    IEnumerable<CardModel> order = attacked.Chooser.ChooseOrder(CardOrderType.OrderOnDeck, "Put " + cards + " back in any order", revealed);
                    foreach (CardModel c in order)
                    {
                        attacked.Deck.PlaceOnTop(c);
                    }
                }
                else
                {
                    foreach (CardModel c in revealed)
                    {
                        attacked.DiscardCard(c);
                    }
                }
            }
        }