コード例 #1
0
        private static void initColonies(Player[] players, ColonyCollection colonies, StartingConditions startingConditions,
                                         TemporaryDB derivates, StaticsDB statics)
        {
            foreach (Colony colony in colonies)
            {
                var colonyProc = new ColonyProcessor(colony);

                colonyProc.CalculateBaseEffects(statics, derivates.Players.Of[colony.Owner]);
                derivates.Colonies.Add(colonyProc);
            }

            foreach (Player player in players)
            {
                var weights = new ChoiceWeights <Colony>();

                foreach (Colony colony in colonies.OwnedBy[player])
                {
                    weights.Add(colony, derivates.Colonies.Of[colony].Desirability);
                }

                var    maxPopulation       = colonies.OwnedBy[player].Sum(x => derivates.Colonies.Of[x].MaxPopulation);
                double totalPopulation     = Math.Min(startingConditions.Population, maxPopulation);
                double totalInfrastructure = Math.Min(startingConditions.Infrastructure, maxPopulation);

                foreach (var colony in colonies.OwnedBy[player])
                {
                    colony.Population = weights.Relative(colony) * totalPopulation;
                    derivates.Colonies.Of[colony].CalculateBaseEffects(statics, derivates.Players.Of[player]);
                }
            }
        }
コード例 #2
0
        private static void initColonies(MainGame game, StartingConditions startingConditions)
        {
            var colonies = game.States.Colonies;

            foreach (var colony in colonies)
            {
                var colonyProc = new ColonyProcessor(colony);

                colonyProc.CalculateBaseEffects(game.Statics, game.Derivates.Players.Of[colony.Owner]);
                game.Derivates.Colonies.Add(colonyProc);
            }

            foreach (var player in game.MainPlayers)
            {
                var weights = new ChoiceWeights <Colony>();

                foreach (var colony in colonies.OwnedBy[player])
                {
                    weights.Add(colony, game.Derivates.Colonies.Of[colony].Desirability);
                }

                Methods.DistributePoints(
                    startingConditions.Population,
                    colonies.OwnedBy[player].Select(colony => new PointReceiver(
                                                        game.Derivates.Colonies.Of[colony].Desirability,
                                                        game.Derivates.Colonies.Of[colony].MaxPopulation,
                                                        x => { colony.Population = x; }
                                                        ))
                    );

                var playerProcessor = game.Derivates[player];
                foreach (var building in startingConditions.Buildings)
                {
                    var project = game.Statics.Constructables.First(x => x.IdCode == building.Id);

                    Methods.DistributePoints(
                        startingConditions.Population,
                        colonies.OwnedBy[player].Select(colony => new PointReceiver(
                                                            game.Derivates.Colonies.Of[colony].Desirability,
                                                            project.TurnLimit.Evaluate(
                                                                game.Derivates[colony].
                                                                LocalEffects(game.Statics).
                                                                UnionWith(playerProcessor.TechLevels).Get
                                                                ),
                                                            x =>
                    {
                        foreach (var effect in project.Effects)
                        {
                            effect.Apply(game, colony, (long)x);
                        }
                    }
                                                            ))
                        );
                }
            }
        }