Add() public method

public Add ( Card, card ) : void
card Card,
return void
    /// <summary>
    /// If in hand, allows discarding instead of forgetting.
    /// </summary>
    public override void Forget(PowerCard card)
    {
        // (Source-1) Purchased / Active
        if (InPlay.Contains(card))
        {
            foreach (var el in card.Elements)
            {
                Elements[el.Key] -= el.Value;                                       // lose elements from forgotten card
            }
            InPlay.Remove(card);
            DiscardPile.Add(card);
            return;
        }

        if (Hand.Contains(card))
        {
            Hand.Remove(card);
            DiscardPile.Add(card);
            return;
        }

        if (DiscardPile.Contains(card))
        {
            base.Forget(card);
            return;
        }

        throw new System.Exception("Can't find card to forget:" + card.Name);
    }
Esempio n. 2
0
        public void ProcessCardPlays()
        {
            foreach (Player player in players)
            {
                switch (player.play_mode)
                {
                case "Play":
                {
                    player.board.Add(player.picked_card);
                    player.current_booster.Remove(player.picked_card);
                    // etb
                    var etb = player.picked_card.ETB;
                    player.Gold += Calculate(player, etb);
                    // !!!

                    GameCommand command = new GameCommand("Board", String.Join(",", player.board.Select(x => x.Id)));
                    IssueCommand(command, player);

                    GameCommand game_command = new GameCommand("CurrentGold", player.Gold.ToString());
                    gameinterface.Send(player, game_command);

                    // !!!
                    // Если строкового боди нет, его надо скрыть в наследниках
                    game_command = new GameCommand("GameState", "");
                    // индексатор по объекту сразу?
                    game_command.Data["Gold"] = player.Gold;
                    gameinterface.Send(player, game_command);
                    //

                    break;
                }

                case "Wonder":
                {
                    player.current_booster.Remove(player.picked_card);
                    player.wonder.CurrentTier++;
                    var etb = player.wonder.Tiers[player.wonder.CurrentTier - 1].ETB;
                    player.Gold += Calculate(player, etb);
                    GameCommand game_command = new GameCommand("CurrentGold", player.Gold.ToString());
                    gameinterface.Send(player, game_command);
                    game_command = new GameCommand("NewTier", "");
                    gameinterface.Send(player, game_command);
                    break;
                }

                case "Sell":
                {
                    DiscardPile.Add(player.picked_card);
                    player.current_booster.Remove(player.picked_card);
                    // а здесь уже можно обнулить picked_card, но ресет пока отдельно
                    player.Gold += 3;
                    // Стейт надо научиться передавать более подробно
                    GameCommand game_command = new GameCommand("CurrentGold", player.Gold.ToString());
                    gameinterface.Send(player, game_command);
                    break;
                }
                }
            }
            // заглушка
        }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
        // Move a card from Hand to Discard
        public void Discard(int idxOfCardToDiscard)
        {
            //remove selected card from hand & append to discard
            Card cardToDiscard = Hand[idxOfCardToDiscard];

            Hand.RemoveAt(idxOfCardToDiscard);
            DiscardPile.Add(cardToDiscard);
        }
Esempio n. 5
0
 internal void CardPlayCleanup()
 {
     if (PutIntoDiscardAfterApplyingEffectSet != null)
     {
         DiscardPile.Add(PutIntoDiscardAfterApplyingEffectSet);
         PutIntoDiscardAfterApplyingEffectSet = null;
     }
 }
Esempio n. 6
0
 // Move all cards in InPlay to DiscardPile (To be called end of each turn)
 public void Flush()
 {
     while (InPlay.Count > 0)
     {
         Card cardToFlush = InPlay[0];
         InPlay.RemoveAt(0);
         DiscardPile.Add(cardToFlush);
     }
     return;
 }
Esempio n. 7
0
 // Given a Card (from field), Add to Discard
 public void Buy(Card cardFromGame)
 {
     DiscardPile.Add(cardFromGame);
     TreasureValueTotal -= cardFromGame.Cost;
     Buys--;
     if (cardFromGame.Type == "Victory")
     {
         TotalVP += cardFromGame.VPValue;
     }
 }
Esempio n. 8
0
 public void AdvanceCardPool()
 {
     if (CardPool.Any())
     {
         var discardCard = CardPool[0];
         DiscardPile.Add(discardCard);
         CardPool.RemoveAt(0);
     }
     FillCardPool();
 }
Esempio n. 9
0
        public PlayCardResult PlayCard(Player player, int cardId)
        {
            if (GameEnd)
            {
                return(PlayCardResult.Invalid);
            }

            IList <Card> cards;

            if (!PlayerHand.TryGetValue(player.Name, out cards))
            {
                return(PlayCardResult.Invalid);
            }

            var card = cards.Where(c => c.CardId == cardId).FirstOrDefault();

            if (card == null)
            {
                return(PlayCardResult.Invalid);
            }

            cards.Remove(card);
            var playedCards = PlayArea[card.Color].LastOrDefault();

            if ((playedCards == null && card.Number != CardNumber.Number1) ||
                (playedCards.Number + 1 != card.Number))
            {
                DiscardPile.Add(card);
                ++Tokens[TokenType.Storm];

                return(PlayCardResult.Error);
            }

            PlayArea[card.Color].Add(card);
            if (card.Number == CardNumber.Number5)
            {
                ++Tokens[TokenType.Scroll];
                if (Tokens[TokenType.Scroll] > Rule.GetMaxScroll(Difficultly))
                {
                    Tokens[TokenType.Scroll] = Rule.GetMaxScroll(Difficultly);
                }
            }

            if (LastRound)
            {
                LastActionPlayers.Remove(player.Name);
                if (LastActionPlayers.Count == 0)
                {
                    GameEnd = true;
                }
            }

            DrawCard(player);
            return(PlayCardResult.Success);
        }
Esempio n. 10
0
        private void Discard(int index)
        {
            var card = Hand.RemoveAt(index);

            if (card == null)
            {
                return;
            }

            DiscardPile.Add(card);
        }
Esempio n. 11
0
 /// <summary>
 /// add to hand if hand isn't too bigyet.
 /// </summary>
 private void TryAddToHand(CardInstance ci, EffectSet ef)
 {
     if (Hand.Count < 10)
     {
         Hand.Add(ci);
         DrawCard?.Invoke(ci, ef);
     }
     else
     {
         DiscardPile.Add(ci);
     }
 }
Esempio n. 12
0
        public void DiscardCard(Card card)
        {
            DiscardPile.Add(card);
            Hand.Remove(card);
            card.RevealToAll();

            OnCardsDiscarded?.Invoke(this, new PlayerCardDraw()
            {
                Cards = new List <Card> {
                    card
                }, Amount = 1, Player = this
            });
        }
Esempio n. 13
0
 public void NextTurn()
 {
     // !!!
     if (players.First().current_booster.Count > 1)
     {
         PassBoosters();
     }
     else
     {
         foreach (Player player in players)
         {
             DiscardPile.Add(player.current_booster.First());
         }
         ProcessMilitary();
         //
         if (current_age != Age.III)
         {
             foreach (Player player in players)
             {
                 GameCommand command = new GameCommand("Message", "Your victory tokens for " + current_age.ToString() + ": " + player.VictoryTokens[current_age].ToString());
                 gameinterface.Send(player, command);
                 command = new GameCommand("Message", "Your defeat tokens: " + player.defeat_tokens.ToString());
                 gameinterface.Send(player, command);
             }
             current_age++;
             foreach (Player player in players)
             {
                 player.current_booster = GenerateBooster(current_age);
             }
             PassBoosters();
         }
         else
         {
             foreach (Player player in players)
             {
                 GameCommand command = new GameCommand("Message", "Your victory tokens for " + current_age.ToString() + ": " + player.VictoryTokens[current_age].ToString());
                 gameinterface.Send(player, command);
                 command = new GameCommand("Message", "Your defeat tokens: " + player.defeat_tokens.ToString());
                 gameinterface.Send(player, command);
             }
             foreach (Player player in players)
             {
                 GameCommand command = new GameCommand("Message", "Game ended");
                 gameinterface.Send(player, command);
                 command = new GameCommand("Message", "Your fame: " + CalculateFame(player).ToString());
                 gameinterface.Send(player, command);
             }
         }
     }
 }
Esempio n. 14
0
        private void ResolveDoorCard(DoorCard doorCard)
        {
            var matchingKey = Hand.Cards.FirstOrDefault(p => p.Suit == LocationSuit.Key && p.Color == doorCard.Color);

            if (matchingKey != null)
            {
                PrintUserOption("Do you want to use a key to open the door? (Y/N)");
                var key = Console.ReadKey(true);
                if (key.Key == ConsoleKey.Y)
                {
                    Hand.Remove(matchingKey);
                    DiscardPile.Add(matchingKey);
                    DoorPile.Add(doorCard);
                    return;
                }
            }

            LimboPile.Add(doorCard);
        }
Esempio n. 15
0
        public void Gain(ICard card)
        {
            if (card is IOnGainOverride o)
            {
                o.OnGain(this, card.Name);
            }
            else
            {
                if (card is IOnGainAbilityHolder ah)
                {
                    ah.ResolveOnGainAbilities(this);
                }

                DiscardPile.Add(card.Name);
            }

            //check on gain triggers
            RunTriggeredAbilities(PlayerAction.Gain, card.Name);
        }
Esempio n. 16
0
        public PlayCardResult DiscardCard(Player player, int cardId)
        {
            if (GameEnd)
            {
                return(PlayCardResult.Invalid);
            }

            IList <Card> cards;

            if (!PlayerHand.TryGetValue(player.Name, out cards))
            {
                return(PlayCardResult.Invalid);
            }

            var card = cards.Where(c => c.CardId == cardId).FirstOrDefault();

            if (card == null)
            {
                return(PlayCardResult.Invalid);
            }

            cards.Remove(card);
            DiscardPile.Add(card);

            ++Tokens[TokenType.Scroll];
            if (Tokens[TokenType.Scroll] > Rule.GetMaxScroll(Difficultly))
            {
                Tokens[TokenType.Scroll] = Rule.GetMaxScroll(Difficultly);
            }

            if (LastRound)
            {
                LastActionPlayers.Remove(player.Name);
                if (LastActionPlayers.Count == 0)
                {
                    GameEnd = true;
                }
            }

            DrawCard(player);
            return(PlayCardResult.Success);
        }
Esempio n. 17
0
    public static void LevelReset()
    {
        while (Deck.Count > 0)
        {
            DiscardPile.Add(Deck.Pop());
        }

        PowerTimer   = 0;
        DiscardTimer = 0;
        Avatar.Current.transform.position = avatarStart;
        Avatar.Current.firstNode          = firstNode;
        Avatar.Current.ResetLevel();
        SoundBoard.StartMusic();
        GameState.LevelTimer = levelTimerStart;

        foreach (GameObject obj in Collectables)
        {
            obj.SetActive(true);
        }
        Collectables.Clear();
    }
Esempio n. 18
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();
        }
Esempio n. 19
0
 internal void AddToDiscardPile(CardInstance newCi)
 {
     //assuming we want to interleave it.
     DiscardPile.Add(newCi);
 }
Esempio n. 20
0
 public void DiscardFromHand(Card card)
 {
     Hand.Remove(card);
     DiscardPile.Add(card);
 }
Esempio n. 21
0
 public void Discard(Card card)
 {
     GameLog.Add(PlayerName.Substring(0, 1) + " discards a " + card.ToString());
     DiscardPile.Add(card);
 }
Esempio n. 22
0
 public static void AddToDiscard(Card card)
 {
     DiscardPile.Add(card);
 }
Esempio n. 23
0
 public void DiscardCardFromHand(AbstractCard card)
 {
     Hand.Remove(card);
     DiscardPile.Add(card);
 }
Esempio n. 24
0
    //---------------------------------------------------------------------------------------------

    public void Discard(ICard discard)
    {
        DiscardPile.Add(discard);
    }