Пример #1
0
		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);
						}
					}
				}
			}
		}