public override void Play(Player player) { base.Play(player); // Perform attack on every player IEnumerator<Player> enumerator = player._Game.GetPlayersStartingWithEnumerator(player); enumerator.MoveNext(); // skip active player while (enumerator.MoveNext()) { Player attackee = enumerator.Current; // Skip if the attack is blocked (Moat, Lighthouse, etc.) if (this.IsAttackBlocked[attackee]) continue; if (attackee.CanDraw) { Card card = attackee.Draw(DeckLocation.Revealed); attackee.DiscardRevealed(); if ((card.Category & Cards.Category.Victory) == Cards.Category.Victory) { attackee.Gain(player._Game.Table.Curse); } else { Supply supply = null; if (player._Game.Table.Supplies.ContainsKey(card)) supply = player._Game.Table[card]; if (supply != null && supply.CanGain() && supply.TopCard.Name == card.Name) { Choice choice = new Choice(String.Format("Who should receive the copy of {0}?", card), this, new CardCollection() { card }, new List<string>() { player.ToString(), attackee.ToString() }, player); ChoiceResult result = player.MakeChoice(choice); if (result.Options[0] == player.ToString()) player.Gain(supply); else attackee.Gain(supply); } } } } }