Ejemplo n.º 1
0
    protected override void considerBuy()
    {
        decimal  orePrice   = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Miner].getLastPrice();
        RTMarket toolMarket = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Blacksmith];

        if (Inventory[(int)Profession.Blacksmith] == 0)
        {
            toolMarket.searchOffer(this, (int)Profession.Blacksmith, 1, orePrice * 4);
        }

        base.considerBuy();
    }
Ejemplo n.º 2
0
    protected override void considerBuy()
    {
        RTMarket woodMarket = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Lumberjack];
        RTMarket oreMarket  = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Miner];
        RTMarket toolMarket = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Blacksmith];

        decimal productionCosts = 1 * (woodMarket.getLastPrice() + oreMarket.getLastPrice());

        //if(toolMarket.getLastPrice() > productionCosts) {
        woodMarket.searchOffer(this, (int)Profession.Lumberjack, 2, woodMarket.getLastPrice() + 0.2m);
        oreMarket.searchOffer(this, (int)Profession.Miner, 2, oreMarket.getLastPrice() + 0.2m);
        //}
        base.considerBuy();
    }
Ejemplo n.º 3
0
    protected override void considerBuy()
    {
        RTMarket woodMarket = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Lumberjack];
        RTMarket toolMarket = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Blacksmith];
        decimal  foodPrice  = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Farmer].getLastPrice();

        // buy wood
        if (Inventory[(int)Profession.Lumberjack] < 3)
        {
            woodMarket.searchOffer(this, (int)Profession.Lumberjack, 2, foodPrice);
        }
        // buy tools
        if (Inventory[(int)Profession.Blacksmith] == 0)
        {
            toolMarket.searchOffer(this, (int)Profession.Blacksmith, 1, foodPrice * 4);
        }
    }
Ejemplo n.º 4
0
    // buy logic
    // implementation for food
    protected virtual void considerBuy()
    {
        RTMarket foodMarket = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Profession.Farmer];

        if (Inventory[(int)Profession.Farmer] < 2)
        {
            decimal lastLogPrice = foodMarket.getLastPrice();

            int buyAmmount = (int)(Cash / lastLogPrice);
            if (buyAmmount > 3)
            {
                buyAmmount = 3;
            }
            // buy max possible ammount or 3 at 0.1 more than market price
            foodMarket.searchOffer(this, (int)Profession.Farmer, buyAmmount, lastLogPrice + 10m);
        }
    }
Ejemplo n.º 5
0
    // constructor
    public VillageSim(int ammountPerProf, decimal moneysupply)
    {
        // get professions from enum at compile
        profAmmount = Enum.GetNames(typeof(Profession)).Length;
        SimInstance = this;

        Population   = new HashSet <Person>();
        Demographics = new HashSet <Person> [profAmmount];
        MoneySupply  = moneysupply;

        initPopulation(ammountPerProf);
        Markets = new RTMarket[profAmmount];
        for (int i = 0; i < profAmmount; i++)
        {
            Markets[i] = new RTMarket(profAmmount);
        }
    }
Ejemplo n.º 6
0
    protected virtual void considerSell()
    {
        int ammountResource = Inventory[(int)Role];

        if (ammountResource <= 1)
        {
            return;
        }

        RTMarket resourceMarket = ((VillageSim)(Simulation.SimInstance)).Markets[(int)Role];

        // last price comes with how long it took to find. 0 trade days mean lower price.
        int searchDelay;
        //decimal resourcePrice = resourceMarket.getLastPrice(out searchDelay);

        decimal resourcePrice = resourceMarket._getLastPrice(out searchDelay) + 0.5m;

        // // old random offset from last price
        // int randomNum = rnd.Next(-3, 9);
        // if(randomNum < -1) {
        //     randomNum = -1;
        // }

        // random number cycles
        int randomNum = currentCycleValue - cycleOffset;

        currentCycleValue = (currentCycleValue + 1) % cycleSize;

        // decimal randomPrice = decimal.Divide(randomNum, 20) + resourcePrice - searchDelay*0.5m;
        decimal randomPrice = decimal.Divide(randomNum, 5) + resourcePrice - searchDelay * 0.5m;

        if (randomPrice < 0.2m)
        {
            randomPrice = 0.2m;
        }
        resourceMarket.placeOffer(this, ammountResource, randomPrice);
    }