public Env(double?positiveness1 = 1, bool allowChange1 = false, double?positiveness2 = null, bool allowChange2 = true, bool increase2 = false, double?positiveness3 = null) { if (positiveness1 < 0 || positiveness1 > 1 || positiveness2 < 0 || positiveness2 > 1 || positiveness3 < 0 || positiveness3 > 1) { throw new ArgumentException("Позитивность должна быть в интервале 0..1"); } PersonageMatrix = new Personage[Width, Height]; AllPersonages = new List <Personage>(); for (int x = 0; x < PersonageMatrix.GetLength(0); x++) { for (int y = 0; y < PersonageMatrix.GetLength(1); y++) { Personage p = new Personage(x, y, null); p.Positiveness = positiveness3; PersonageMatrix[x, y] = p; AllPersonages.Add(p); } } int p1X = 3; int p2X = Width - 4; if (p1X >= p2X) { throw new ArgumentException("Слишком малый размер поля по X", nameof(Width)); } /// делаем персонажи в центре поля ключевыми var p1 = PersonageMatrix[p1X, Height / 2]; p1.Positiveness = positiveness1; p1.IsKey = true; p1.AllowChangePositiveness = allowChange1; var p2 = PersonageMatrix[p2X, Height / 2]; p2.Positiveness = positiveness2; p2.IsKey = true; /// тут лучше даже true поставить в будущем, но интересны оба значения p2.AllowChangePositiveness = allowChange2; p2.AutoIncreasePositiveness = increase2; if (p2.AutoIncreasePositiveness) { p2.AllowChangePositiveness = true; } }
double GetPositivenessChangeEffectiveness(Personage source) { /// у более богатых стратегия перенимается быстрее, потому /// что подсознательно есть стремление жить так же хорошо if (source.Wealth > Wealth) { return(1); } else if (source.Wealth >= Wealth / 2.0) { return(0.5); } else { return(0.2); } }
double GetInfluenceEffectiveness(Personage target, bool isHelp) { double eff1; if (Wealth < target.Wealth / 2.0) { eff1 = 0; } if (Wealth < target.Wealth) { eff1 = 0.3; } else if (Wealth < 2 * target.Wealth) { eff1 = 0.7; } else { eff1 = 1; } double eff2; if (!target.Positiveness.HasValue) { /// типа мало что умеет пока что eff2 = 0.5; } else if (isHelp) { /// если помогаем более позитивному, то он точно знает как /// распорядиться нашей помощью, эффективность 100% if (target.Positiveness >= Positiveness) { eff2 = 1; } //// если помогаем тому, кто менее чем в 2 раза отличается /// от нашей позитивности в сторону негативности, /// то эффективность считаем 70% /// (помощь - это не только еда и крыша над головой, но и возможности /// для самореализации, которые не каждый умеет использовать с полной отдачей) else if (target.Positiveness >= Positiveness / 2.0) { eff2 = 0.7; } else { eff2 = 0.3; } } else { /// если отнимаем у более позитивного, то делается это не сложно /// с физической точки зрения if (target.Positiveness >= 2 * Positiveness) { eff2 = 1; } if (target.Positiveness >= Positiveness) { eff2 = 0.7; } /// отъем у того, кто более негативен, сложнее else if (target.Positiveness >= Positiveness / 2.0) { eff2 = 0.5; } else { eff2 = 0.2; } /// ничего не будет делать eff1 = eff2 = 0; } return(eff1 * eff2); }