//OLD CODE //Returns the part of the given cost that the player cannot meet with his own single resources //Does not consider the player's resource choices private static Dictionary<Resource, int> outsourcedCosts(Player player, Dictionary<Resource, int> cost, List<List<Resource>> remainingPlayerChoices, bool self) { Dictionary<Resource, int> remaining = new Dictionary<Resource, int>(); Dictionary<Resource, int> coveredByChoices = new Dictionary<Resource, int>(); //Costs that are covered by choices (each item in here is the only relevant application of the choice used) foreach (Resource r in cost.Keys) coveredByChoices.Add(r, 0); if (remainingPlayerChoices != null) { foreach (List<Resource> choice in self ? player.getTotalChoices() : player.getPublicChoices()) { int numRelevant = 0; Resource coveredResource = Resource.COIN; foreach (Resource r in choice) if (cost.ContainsKey(r)) { numRelevant++; coveredResource = r; } if (numRelevant == 1) coveredByChoices[coveredResource]++; else remainingPlayerChoices.Add(choice); } } foreach (Resource r in cost.Keys) { if (cost[r] > player.getResourceNum(r) + coveredByChoices[r] && r != Resource.COIN) remaining.Add(r, cost[r] - player.getResourceNum(r)); } return remaining; }
private static List<List<Resource>> buildResourceList(Player p, List<Resource> rSet, bool self) { List<List<Resource>> resources = new List<List<Resource>>(); Dictionary<Resource, int> playerResources = p.getResources(); List<List<Resource>> playerChoices = self?p.getTotalChoices():p.getPublicChoices(); foreach (Resource r in rSet) if (r != Resource.COIN) for (int i = 0; i < playerResources[r]; i++) resources.Add(new List<Resource> { r }); foreach (List<Resource> choice in playerChoices) { List<Resource> l = new List<Resource>(); l.AddRange(choice); if (!rSet.Contains(l[0])) continue; resources.Add(l); } return resources; }