static double ExpectationToWin(int playerOneRating, int playerTwoRating)
return 1 / (1 + Math.Pow(10, (playerTwoRating - playerOneRating) / 400.0));
static void CalculateELO(ref int playerOneRating, ref int playerTwoRating, GameOutcome outcome)
int delta = (int)(eloK * ((int)outcome - ExpectationToWin(playerOneRating, playerTwoRating)));
playerOneRating += delta;
playerTwoRating -= delta;
public static void Main()
var opponentRating = 2000;
var victoryFormula = (int)Math.Floor(maxWinValue / (1+Math.Pow(Math.Exp(1)*0.99f, 0.006f*(playerRating-opponentRating))));
var loseFormula = (int)Math.Floor(maxLoseValue - maxLoseValue / (1+Math.Pow(Math.Exp(1)*0.99f, 0.006f*(playerRating-opponentRating))));
var victoryGain = Math.Max(minWinValue, victoryFormula);
var lossGain = Math.Max(minLoseValue, loseFormula);
CalculateELO(ref playerRating,ref opponentRating, GameOutcome.Win);
Console.WriteLine("======WINNING======\n");
Console.WriteLine("Win formula is : " + victoryFormula);
Console.WriteLine("Win player gets : " + victoryGain);
Console.WriteLine("======LOSING======\n");
Console.WriteLine("Lose formula is : " + loseFormula);
Console.WriteLine("Lose player gets : " + lossGain);
Console.WriteLine("======NEWFORMULA======\n");
Console.WriteLine("Player is : " + playerRating);
Console.WriteLine("Player is : " + opponentRating);