Exemplo n.º 1
0
        public void HandleTurn()
        {
            if (_strategy != null)
            {
                var executed = _strategy.TryExecuteStrategy(this, _gameLayer, _gameState);
                if (executed)
                {
                    return;
                }
            }

            //var action = GetRandomAction();
            //HandleAction(action);

            _logger.LogTrace("No strategy executed, invoking Wait as fallback");
            _gameLayer.ExecuteAction(GameActions.Wait);
        }
Exemplo n.º 2
0
        protected override bool TryExecuteTurn(Randomizer randomizer, IGameLayer gameLayer, GameState state)
        {
            var buildingsUnderConstruction = state.GetBuildingsUnderConstruction().ToArray();

            // Randomly choose building
            //var building = buildingsUnderConstruction.ElementAt(randomizer.Random.Next(0, buildingsUnderConstruction.Length));

            // Choose the one closest to completion
            var building = buildingsUnderConstruction.OrderByDescending(x => x.BuildProgress).FirstOrDefault();


            if (building != null)
            {
                var position = building.Position;
                gameLayer.ExecuteAction(GameActions.Build, position);

                building = state.GetCompletedBuildings().FirstOrDefault(x => x.Position.ToString() == position.ToString());

                if (building is BuiltResidenceBuilding residence)
                {
                    if (AdjustHeatOnConstructed)
                    {
                        var blueprint = state.AvailableResidenceBuildings.Find(x => x.BuildingName == building.BuildingName);

                        var energy = blueprint.BaseEnergyNeed + (residence.Temperature - state.CurrentTemp)
                                     * blueprint.Emissivity / 1 - 0.5 - residence.CurrentPop * 0.04;

                        if (IsBetween(energy,
                                      residence.RequestedEnergyIn - AllowedDiffMargin,
                                      residence.RequestedEnergyIn + AllowedDiffMargin))
                        {
                            // current energy setting is sufficient
                        }
                        else
                        {
                            // adjust energy as the first action after completing building (will take one turn)
                            gameLayer.AdjustEnergy(building.Position, energy, state.GameId);
                        }
                    }
                }
                else
                {
                }
                return(true);
            }
            return(false);
        }