/// <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); }
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; } } } // заглушка }
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); }
// 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); }
internal void CardPlayCleanup() { if (PutIntoDiscardAfterApplyingEffectSet != null) { DiscardPile.Add(PutIntoDiscardAfterApplyingEffectSet); PutIntoDiscardAfterApplyingEffectSet = null; } }
// 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; }
// 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; } }
public void AdvanceCardPool() { if (CardPool.Any()) { var discardCard = CardPool[0]; DiscardPile.Add(discardCard); CardPool.RemoveAt(0); } FillCardPool(); }
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); }
private void Discard(int index) { var card = Hand.RemoveAt(index); if (card == null) { return; } DiscardPile.Add(card); }
/// <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); } }
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 }); }
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); } } } }
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); }
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); }
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); }
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(); }
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(); }
internal void AddToDiscardPile(CardInstance newCi) { //assuming we want to interleave it. DiscardPile.Add(newCi); }
public void DiscardFromHand(Card card) { Hand.Remove(card); DiscardPile.Add(card); }
public void Discard(Card card) { GameLog.Add(PlayerName.Substring(0, 1) + " discards a " + card.ToString()); DiscardPile.Add(card); }
public static void AddToDiscard(Card card) { DiscardPile.Add(card); }
public void DiscardCardFromHand(AbstractCard card) { Hand.Remove(card); DiscardPile.Add(card); }
//--------------------------------------------------------------------------------------------- public void Discard(ICard discard) { DiscardPile.Add(discard); }