public void UpdateStats(ISimulationStats statsSoFar, ISingleGameStats singleGameStats) { switch (singleGameStats.Winner) { case 1: statsSoFar.Player1Wins++; break; case 2: statsSoFar.Player2Wins++; break; default: statsSoFar.Ties++; break; } statsSoFar.Player1WinsNinetySixToZero += (singleGameStats.Player1WinsNinetySixToZero ? 1 : 0); statsSoFar.Player2WinsNinetySixToZero += (singleGameStats.Player2WinsNinetySixToZero ? 1 : 0); statsSoFar.TotalWinsNinetySixToZero += (singleGameStats.Player1WinsNinetySixToZero ? 1 : 0); statsSoFar.TotalWinsNinetySixToZero += (singleGameStats.Player2WinsNinetySixToZero ? 1 : 0); UpdateWarDepthWins(singleGameStats.Player1WarWinsByDepth, statsSoFar.Player1WarWinsByDepth); UpdateWarDepthWins(singleGameStats.Player1WarWinsByDepth, statsSoFar.WarsByDepth); UpdateWarDepthWins(singleGameStats.Player2WarWinsByDepth, statsSoFar.Player2WarWinsByDepth); UpdateWarDepthWins(singleGameStats.Player2WarWinsByDepth, statsSoFar.WarsByDepth); if (singleGameStats.SimulationTime < statsSoFar.ShortestGame) { statsSoFar.ShortestGame = singleGameStats.SimulationTime; } }
public string GetFinalStats(GameParameters gameParams, ISimulationStats stats) { var totalGames = stats.Player1Wins + stats.Player2Wins + stats.Ties; var finalResult = $@" Finished simulation of {gameParams.TotalLengthOfSimulation:c} of game play between {gameParams.FirstPlayerName} and {gameParams.SecondPlayerName}... Simulation Time: {stats.TotalSimulationTime:c} Shortest Game: {stats.ShortestGame:c} Total Games Played: {totalGames:n0} Ties: {stats.Ties:n0} ({calculatePercentage(stats.Ties, totalGames)}) {gameParams.FirstPlayerName} Wins: {stats.Player1Wins:n0} ({calculatePercentage(stats.Player1Wins, totalGames)}) {gameParams.SecondPlayerName} Wins: {stats.Player2Wins:n0} ({calculatePercentage(stats.Player2Wins, totalGames)}) {getWarStats(stats)} "; return(finalResult); }
private string getWarStats(ISimulationStats stats) { int maxWarDepth = 0; for (int i = stats.WarsByDepth.Count - 1; i >= 1; i--) { if (stats.WarsByDepth[i] > 0) { maxWarDepth = i; break; } } if (maxWarDepth == 0) { return("No wars"); } var wars = new StringBuilder(); for (int i = 1; i <= maxWarDepth; i++) { wars.AppendLine($"{stats.WarsByDepth[i]:n0} {translateDepth(i)} war(s)"); } return(wars.ToString()); }