Beispiel #1
0
 // Initializes a planet.
 public Planet(int planetID, int owner, int numShips, int growthRate, double x, double y)
 {
     this.planetID   = planetID;
     this.growthRate = growthRate;
     this.x          = x;
     this.y          = y;
     Routes          = new PlanetaryTravelRoute();
     SynchronizeWithGameStatus(owner, numShips);
 }
        public void CreatePlanetaryTravelRoutes()
        {
            Center = new Quadrant();
            int    totalGrowthRate      = 0;
            double totalAvarageDistance = 0;

            int routeCount = Planets.Count;

            foreach (Planet source in Planets.Values)
            {
                Center.X += source.X;
                Center.Y += source.Y;
                PlanetaryTravelRoute buildingRoute = source.Routes;
                buildingRoute.SmallestDistance = 9999;
                totalGrowthRate += source.GrowthRate;


                List <Route> routesBuilder = new List <Route>();
                foreach (Planet dest in Planets.Values)
                {
                    if (source.PlanetID != dest.PlanetID)
                    {
                        var newRoute = new Route(source, dest);

                        #region calculate statistics

                        double actualDistance = ActualDistance(source, dest);
                        newRoute.ActualDistance  = actualDistance;
                        newRoute.DistanceInTurns = GridDistance(source, dest);

                        LargestDistanceInTurns = Math.Max(newRoute.DistanceInTurns, LargestDistanceInTurns);

                        #region Smallest and greates distance
                        if (buildingRoute.SmallestDistance > actualDistance)
                        {
                            buildingRoute.SmallestDistance = actualDistance;
                        }

                        if (buildingRoute.GreatestDistance < actualDistance)
                        {
                            buildingRoute.GreatestDistance = actualDistance;
                        }
                        #endregion

                        #endregion

                        routesBuilder.Add(newRoute);

                        if (source.IsMine && dest.IsEnemy)
                        {
                            InitialEnemyFleetDistance = newRoute.DistanceInTurns;
                        }
                        newRoute.DestinationStateOnArrival = newRoute.Destination.TurnPrediction[newRoute.DistanceInTurns];
                    }
                }
                double distance        = 0;
                double distanceDevider = 0;
                double growthdistance  = 0;
                foreach (Route route in routesBuilder.OrderBy(route => route.ActualDistance))
                {
                    distanceDevider++;
                    distance += route.ActualDistance;
                    source.Routes.Add(route);
                    source.Routes.AverageDistancesByNumberOfPlanets.Add(distance / distanceDevider);

                    growthdistance += route.GrowthRate;
                    source.Routes.AverageConnectedGrowthByNumberOfPlanets.Add(growthdistance / distanceDevider);
                }
                //value will be lower for the more central planets
                buildingRoute.AverageDistance = distance / distanceDevider;
                source.Connectiveness         = buildingRoute.AverageDistance / source.Routes.AverageDistancesByNumberOfPlanets[6];
                source.Growthyness            = source.Routes.AverageConnectedGrowthByNumberOfPlanets[6];

                totalAvarageDistance       += buildingRoute.AverageDistance;
                buildingRoute.DistanceRange = buildingRoute.GreatestDistance - buildingRoute.SmallestDistance;

                source.Routes.Capacity = source.Routes.Count;
                source.Routes.CreatePlanetsByNumberOfTurnsDistance();
            }

            AverageDistance = totalAvarageDistance / Planets.Count;

            Center.X = Center.X / Planets.Count;
            Center.Y = Center.Y / Planets.Count;
        }
 protected virtual void PlanetRouteDeSelected(Planet onwedPlanet, PlanetaryTravelRoute planetTravelMap)
 {
 }
 //return true if we should should search this route. false to skip it
 protected virtual bool PlanetRouteSelected(Planet onwedPlanet, PlanetaryTravelRoute routesFromPlanet)
 {
     return(true);
 }
 protected static IOrderedEnumerable <IGrouping <int, Route> > PlanetRouteByDistanceDictionary(PlanetaryTravelRoute routesFromPlanet)
 {
     return(routesFromPlanet.ToLookup(item => item.DistanceInTurns).OrderBy(item => item.Key));;
 }
 protected abstract void CreateAttackPlanForOwnedPlanet(AttackPlan attack, Route attackRoute, PlanetaryTravelRoute planetTravelMap, ref bool continueRoute);
 protected virtual IEnumerable <Route> SortRoutesForBattlePlanCreation(PlanetaryTravelRoute planetTravelMap)
 {
     return(planetTravelMap);
 }