public GameState DrawDevelopmentCard(Player player)
{
var r = player.Resources;
if (!(r.Contains(Resource.Grain) && r.Contains(Resource.Wool) && r.Contains(Resource.Ore)))
throw new InsufficientResourcesException("Not enough resources to buy a development card");
if (developmentCardStack.Count == 0)
throw new NoMoreCardsException("Development card stack is empty");
PayResource(player, Resource.Grain);
PayResource(player, Resource.Wool);
PayResource(player, Resource.Ore);
var last = developmentCardStack.Last();
developmentCardStack.RemoveAt(developmentCardStack.Count-1);
Log(new BuyDevLogEvent(player.Id));
player.DevelopmentCards.Add(last);
player.NewDevelopmentCards.Add(last);
return CurrentGamestate();
}