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); }
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); }