public GameState PlayMonopoly(Player player, Resource resource)
{
var playable = GetPlayableDevelopmentCards(player);
if (!playable.Contains(DevelopmentCard.Monopoly)) throw new InsufficientResourcesException("No Monopoly in hand");
player.DevelopmentCards.Remove(DevelopmentCard.Monopoly);
//Take all resources of the given type out of all hands
int count = players.Sum(t => t.Resources.RemoveAll(c => c == resource));
//And place them in the playing players hand
for (int i = 0; i < count; i++)
{
player.Resources.Add(resource);
}
Log(new PlayMonopolyLogEvent(player.Id, resource, count));
return CurrentGamestate();
}