// PRIVATE METHODS private static double FightViewers(FightOutcome fo) { double viewers; Fighter f1 = fo.Fighter1(); Fighter f2 = fo.Fighter2(); //Country country = f1.Nationality; //Console.WriteLine(f1.Nationality + "'s buff is " + country.PopularityBuff); WeightClass w1 = (WeightClass)f1.Weight; //WeightCoefficient[w1.Weight] fo.Interested = MathUtils.Gauss(((f1.Performance["Elo"] + f2.Performance["Elo"]) / 2), 100) * (f1.Nationality.PopularityBuff * f2.Nationality.PopularityBuff * w1.Popularity + f1.Belts + f2.Belts); //viewers = f1.Performance["Fans"] + f1.Performance["Followers"] + f1.Performance["Casuals"]; //viewers += (f1.Performance["Fans"] + f2.Performance["Followers"] + f2.Performance["Casuals"]); viewers = fo.Interested + (PWin(fo)) * f1.Performance["Followers"] + (1 - PWin(fo) * f2.Performance["Followers"]) + (PWin(fo)) * f1.Performance["Fans"] + (1 - PWin(fo) * f2.Performance["Fans"]); return(viewers); }
/// <summary> // The method update fighter popularity of both fighters as a result // of FightOutcome object // // at the end of the method, FighterOutcome viewership is set by the // result of a private FightViewers(FighterOutcome) method. No need to // to call FightViewers outside of this class. /// </summary> public static void UpdatePopularity(FightOutcome fo) { double fans1 = fo.Fighter1().Performance["Fans"]; double fans2 = fo.Fighter2().Performance["Fans"]; double casuals1 = fo.Fighter1().Performance["Casuals"]; double casuals2 = fo.Fighter2().Performance["Casuals"]; double followers1 = fo.Fighter1().Performance["Followers"]; double followers2 = fo.Fighter2().Performance["Followers"]; Console.WriteLine("Fighter1: " + ToString(fo.Fighter1())); Console.WriteLine("Fighter2: " + ToString(fo.Fighter2())); double CountryCoeff1 = fo.Fighter1().Nationality.PopularityBuff; double CountryCoeff2 = fo.Fighter2().Nationality.PopularityBuff; double WeightCoeff = ((WeightClass)fo.Fighter1().Weight).Popularity; // do the calculation if (fo.Fighter1() == fo.Winner) { //winner double delta = 0.09 * casuals1 * (1 - PWin(fo)) * WeightCoeff * CountryCoeff1; delta = MathUtils.Gauss(delta, 0.5); fans1 += delta; casuals1 -= delta; delta = 0.4 * fo.Interested * (1 - PWin(fo)) * WeightCoeff * CountryCoeff1; delta = MathUtils.Gauss(delta, 0.5); casuals1 += delta; //fo.Interested =- delta; delta = 0.09 * casuals1 * (1 - PWin(fo)) * WeightCoeff * CountryCoeff1; delta = MathUtils.Gauss(delta, 0.5); followers1 += delta; casuals1 -= 0.18 * casuals1; //loser delta = 0.1 * fans2 * (1 - PWin(fo)); delta = MathUtils.Gauss(delta, 0.5); fans2 -= delta; casuals2 += delta; delta = 0.1 * casuals2 * (1 - PWin(fo)); delta = MathUtils.Gauss(delta, 0.5); casuals2 -= delta; //fo.Interested = +delta; delta = 0.1 * followers2 * (1 - PWin(fo)); delta = MathUtils.Gauss(delta, 0.5); followers2 -= delta; casuals2 += delta; } else if (fo.Fighter2() == fo.Winner) { //loser double delta = 0.09 * casuals1 * (PWin(fo)); delta = MathUtils.Gauss(delta, 0.5); fans1 -= delta; casuals1 += delta; delta = 0.4 * fo.Interested * (PWin(fo)); delta = MathUtils.Gauss(delta, 0.5); casuals1 -= delta; //fo.Interested =+ delta; delta = 0.09 * casuals1 * (PWin(fo)); delta = MathUtils.Gauss(delta, 0.5); followers1 -= delta; casuals1 += 0.18 * casuals1; //winner delta = 0.1 * fans2 * (PWin(fo)) * WeightCoeff * CountryCoeff2; delta = MathUtils.Gauss(delta, 0.5); fans2 += delta; casuals2 -= -delta; delta = 0.1 * casuals2 * (PWin(fo)) * WeightCoeff * CountryCoeff2; delta = MathUtils.Gauss(delta, 0.5); casuals2 += delta; //fo.Interested =- delta; delta = 0.1 * followers2 * (PWin(fo)) * WeightCoeff * CountryCoeff2; delta = MathUtils.Gauss(delta, 0.5); followers2 += delta; casuals2 -= delta; } // end of calculation fo.Fighter1().Performance["Fans"] = fans1; fo.Fighter2().Performance["Fans"] = fans2; fo.Fighter1().Performance["Casuals"] = casuals1; fo.Fighter2().Performance["Casuals"] = casuals2; fo.Fighter1().Performance["Followers"] = followers1; fo.Fighter2().Performance["Followers"] = followers2; fo.Viewership = FightViewers(fo); Console.WriteLine(ToString(fo)); Console.WriteLine("Fighter1: " + ToString(fo.Fighter1())); Console.WriteLine("Fighter2: " + ToString(fo.Fighter2()) + "\n"); }
internal static double PWin(FightOutcome fo) { return(1 / (1 + Math.Pow(10, (fo.Fighter2().Performance["Elo"] - fo.Fighter1().Performance["Elo"]) / 400))); }