using System.Collections.Generic;
public static void Main()
Region region = new Region();
CheckEconomy(region, new PreTurn(), "Before next turn");
CheckEconomy(region, new PostTurn(), "After next turn");
public Dictionary<Resourses.res, int> stock = new Dictionary<Resourses.res, int>();
public Dictionary<Resourses.res, int> virtualStock = new Dictionary<Resourses.res, int>();
stock.Add(Resourses.res.food, 0);
stock.Add(Resourses.res.wood, 0);
stock.Add(Resourses.res.gold, 0);
virtualStock.Add(Resourses.res.food, 0);
virtualStock.Add(Resourses.res.wood, 0);
virtualStock.Add(Resourses.res.gold, 0);
for (int i = 0; i < 10; i++)
eaters.Add(new Peasant(this));
for (int i = 0; i < 4; i++)
public Dictionary<Resourses.res, int> GetStock(IEconomyChange model)
public List<IEat> eaters = new List<IEat>();
public static void CheckEconomy(Region region, IEconomyChange model, string madelname)
Console.WriteLine("CheckEconomy " + madelname);
ResTurnManager.allInfo.Clear();
CheckRealEconomy(region, model);
public static void CheckRealEconomy(Region region, IEconomyChange model)
for (int i = 0; i < 4; i++)
model.Change(region, new ResTurnInfo(80, Resourses.res.food, "from farm base", ResTurnManager.typeOfChange.normalIncome));
for (int i = 0; i < 16; i++)
if (region.GetStock(model)[Resourses.res.food] >= 100)
model.Change(region, new ResTurnInfo(-100, Resourses.res.food, "sawmill consume", ResTurnManager.typeOfChange.normalIncome));
model.Change(region, new ResTurnInfo(50, Resourses.res.wood, "from sawmill base", ResTurnManager.typeOfChange.normalIncome));
public static class MakeBuff
public static void Post(IHuman humanTypes)
Console.WriteLine("Add bonus - New seeds");
new Modif(2, Resourses.res.food, "from farm base", ResTurnManager.typeOfChange.normalIncome, "from farm new seeds");
CheckEconomy(region, new PreTurn(), "Before next turn");
public class Peasant : IEat
public Peasant(Region region)
public Region regionPlaced;
regionPlaced.GetStock()[Resourses.res.food] -= 10;
public class Troop : IEat
public interface IEconomyChange
void Change(Region region, ResTurnInfo _info);
public class PreTurn : IEconomyChange
public void Change(Region region, ResTurnInfo _info)
region.virtualStock[_info._res] += _info.result();
public class PostTurn : IEconomyChange
public void Change(Region region, ResTurnInfo _info)
region.stock[_info._res] += _info.result();
public static void ShowReport(Region region)
Console.WriteLine("---Report---");
foreach (var _message in ResTurnManager.getturnDesc())
Console.WriteLine(_message.Key + " " + _message.Value);
Console.WriteLine("---Total---");
Console.WriteLine("Region food stock " + region.stock[Resourses.res.food]);
Console.WriteLine("Region wood stock " + region.stock[Resourses.res.wood]);
Console.WriteLine("Region gold stock " + region.stock[Resourses.res.gold]);
public static class ResTurnManager
public static List<ResTurnInfo> allInfo = new List<ResTurnInfo>();
public static Dictionary<string, int> getturnDesc()
var tempDict = new Dictionary<string, int>();
foreach (var value in allInfo)
string reason = value._res.ToString() + " " + value._reason;
if (!tempDict.ContainsKey(reason))
tempDict.Add(reason, value._value);
tempDict[reason] += value._value;
public static List<Modif> allModif = new List<Modif>();
public Resourses.res _res;
public ResTurnManager.typeOfChange _changeType;
public Modif(int value, Resourses.res res, string reason, ResTurnManager.typeOfChange type, string name)
foreach (var modif in allModif)
if (modif._res == _res && modif._reason == _reason && modif._changeType == _changeType)
public static int CheckModificators(ResTurnInfo resInfo)
float i = Convert.ToSingle(resInfo._value);
foreach (var modif in allModif)
if (resInfo._res == modif._res && resInfo._reason == modif._reason && resInfo._changeType == modif._changeType)
ResTurnInfo temp = new ResTurnInfo(resInfo._value * modif._value, resInfo._res, modif._name, resInfo._changeType);
i += Convert.ToSingle(temp._value);
return Convert.ToInt32(i);
public Resourses.res _res;
public ResTurnManager.typeOfChange _changeType;
public List<Modif> modificators = new List<Modif>();
public ResTurnInfo(int value, Resourses.res res, string reason, ResTurnManager.typeOfChange type)
ResTurnManager.allInfo.Add(this);
return Modif.CheckModificators(this);