Example #1
0
 //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;
 }
Example #2
0
 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;
 }