public object makeMove(BoardState state)
 {
     if (state.canUpgradeSettlement.Count() > 0)
     {
         return(state.canUpgradeSettlement.ElementAt(_r.Next(0, state.canUpgradeSettlement.Count())));
     }
     else if (state.canBuildNewSettlements.Count() > 0)
     {
         var t = state.canBuildNewSettlements.ElementAt(_r.Next(0, state.canBuildNewSettlements.Count()));
         return(state.canBuildNewSettlements.ElementAt(_r.Next(0, state.canBuildNewSettlements.Count())));
     }
     else if (state.canBuildRoad.Count() > 0)
     {
         return(state.canBuildRoad.ElementAt(_r.Next(0, state.canBuildRoad.Count())));
     }
     else if (state.resourcesAvailableToBuy.Values.Any(x => x))
     {
         // Buy resource with lowest amount for resource with highest amount left after buy
         var amountLeft = state.playerResourcesAmounts.ToDictionary(k => k.Key, v => v.Value - state.bankTradePrices[v.Key]);
         //var boughtResource = state.playerResourcesAmounts.OrderBy(kv => kv.Value).Select(kv => kv.Key).ToList()[0];
         var boughtResource = state.playerResourcesAcquiredPerResource.OrderBy(kv => kv.Value).Select(kv => kv.Key).ToList()[0];
         var selledResource = amountLeft.OrderBy(kv => - kv.Value).Select(kv => kv.Key).ToList()[0];
         if (boughtResource != selledResource)
         {
             TradeProposition proposition = new TradeProposition()
             {
                 boughtResource       = boughtResource,
                 selledResource       = selledResource,
                 boughtResourceAmount = 1
             };
             return(proposition);
         }
     }
     return(state.endTurnButton);
 }
Пример #2
0
        public bool tradeWithBank(Player player, TradeProposition proposition, IDictionary <Board.ResourceType, int> paymentCosts)
        {
            var selledResourceAmount = proposition.boughtResourceAmount * paymentCosts[proposition.selledResource];

            if (!canGiveOutResource(proposition.boughtResource, proposition.boughtResourceAmount) ||
                player.getResourceCount(proposition.selledResource) < selledResourceAmount)
            {
                return(false);
            }

            //Give bank this resource
            for (int i = 0; i < selledResourceAmount; i++)
            {
                ResourceCard rc = player.takeResource(proposition.selledResource);
                Board.TheBank.putResourceCard(rc);
            }

            //Get cards
            for (int i = 0; i < proposition.boughtResourceAmount; i++)
            {
                player.giveResource(Board.TheBank.giveOutResource(proposition.boughtResource));
            }
            return(true);
        }