public Randomizer(IGameLayer gameLayer, ILoggerFactory loggerFactory, TurnStrategyBase strategy = null) { _gameLayer = gameLayer; _gameState = gameLayer.GetState(); _logger = loggerFactory.CreateLogger <Randomizer>(); if (strategy == null) { _strategy = TurnStrategyBase.Build(loggerFactory) .Append <BuildUtilityCloseToResidencesTurnStrategy>(c => { c.BuildingName = "Mall"; c.MaxNumberOfBuildings = 3; }) .Append <BuildUtilityCloseToResidencesTurnStrategy>(c => { c.BuildingName = "Park"; c.MaxNumberOfBuildings = 2; }) .Append <BuildBuildingWhenCloseToPopMaxTurnStrategy>() .Append <BuyUpgradeTurnStrategy>() .Append <MaintenanceWhenBuildingIsGettingDamagedTurnStrategy>() .Append <BuildWhenHasBuildingsUnderConstructionTurnStrategy>() .Append <AdjustBuildingTemperaturesTurnStrategy>() .Append <SingletonBuildingTurnStrategy>() .Compile(); } else { _strategy = strategy; } _logger.LogInformation($"Strategy: {Environment.NewLine + _strategy}"); }
public ScoreResponse Run(TurnStrategyBase strategy = null) { // Make actions GameState state = GameLayer.GetState(); _logger.LogInformation("Map: " + Environment.NewLine + state.MapToString()); var randomizer = new Randomizer(GameLayer, _loggerFactory, strategy); while (state.Turn < state.MaxTurns) { PrintDebug_NewTurn(state); randomizer.HandleTurn(); foreach (var message in state.Messages) { _logger.LogInformation(message); } foreach (var error in state.Errors) { _logger.LogError("Error: " + error); } } state = GameLayer.GetState(); var score = GameLayer.GetScore(state.GameId); _logger.LogInformation(""); _logger.LogInformation(""); _logger.LogInformation($"Done with game: {state.GameId}"); _logger.LogInformation(""); _logger.LogInformation($"::SUMMARY::"); _logger.LogInformation($"Funds: {state.Funds}"); _logger.LogInformation($"Buildings: {state.GetCompletedBuildings().Count()}"); _logger.LogInformation($"Upgrades: {state.GetCompletedBuildings().Sum(x => x.Effects.Count)}"); _logger.LogInformation(""); _logger.LogInformation($"::ACTIONS::"); foreach (GameActions action in Enum.GetValues(typeof(GameActions))) { var count = state.ActionHistory.Count(x => x.Value == action); if (count < 1) { continue; } var percent = count / (double)state.ActionHistory.Count; _logger.LogInformation($"\t{percent:P1}\t {action} ({count}/{state.ActionHistory.Count})"); } _logger.LogInformation(""); _logger.LogInformation($"::SCORE::"); _logger.LogInformation($"Final score: {score.FinalScore}"); _logger.LogInformation($"Co2: {score.TotalCo2}"); _logger.LogInformation($"Pop: {score.FinalPopulation}"); _logger.LogInformation($"Happiness: {score.TotalHappiness}"); return(score); }
protected virtual TurnStrategyBase.StrategyBuilder StrategyBuilder() { var builder = TurnStrategyBase.Build(_loggerFactory); return(builder); }