static UpdatedMap FindClosestHabitablePlanet(List <Planet> OrderedPlanetList, FlightPlan route)
        {
            double speed = OrderedPlanetList[1].Distance / 600; //10 minutes to the immediate neighbour

            for (int loop = 1; ; loop++)
            {
                if ((OrderedPlanetList[loop].Monster == false) && (OrderedPlanetList[loop].Habbitable == true) && (OrderedPlanetList[loop].Colonized == false))
                {
                    UpdatedMap map = new UpdatedMap();
                    map.Route       = ColonisePlanet(route, OrderedPlanetList[loop]);
                    map.Route.Time += (OrderedPlanetList[loop].Distance / speed);
                    if (map.Route.Time < 86400)
                    {
                        OrderedPlanetList.ForEach(c => c.Distance =
                                                      CalculateDistance(OrderedPlanetList[loop].X,
                                                                        OrderedPlanetList[loop].Y,
                                                                        OrderedPlanetList[loop].Z,
                                                                        c.X,
                                                                        c.Y,
                                                                        c.Z));
                        map.Map = OrderedPlanetList;
                        map.Map[loop].Colonized = true;
                    }
                    else
                    {
                        map.Route.Time  -= (OrderedPlanetList[loop].Distance / speed);
                        map.Route.Time  -= map.Route.TimeTakenToColonizeLastPlanet;
                        map.EndIndicator = true;
                    }


                    return(map);
                }
                //else if (OrderedPlanetList[loop].Monster == true)
                //{

                //}
            }
        }
        static void Main(string[] args)
        {
            List <FlightPlan> routes             = new List <FlightPlan>();
            List <Planet>     objectsInSpaceList = GetUniverseDetails();

            objectsInSpaceList.ToList()
            .ForEach(x => x.Distance = CalculateDistance(objectsInSpaceList[0].X, objectsInSpaceList[0].Y, objectsInSpaceList[0].Z, x.X, x.Y, x.Z)); //Populate the distance to every other planet in the universe from the current one
            var nearestObjects = objectsInSpaceList.OrderBy(x => x.Distance).ToList();                                                               //.Where(x => x.Habbitable == true && x.Planet == true && x.Controlled == false)

            routes.Add(new FlightPlan()
            {
                Objects = new List <Planet>()
            });
            routes[0].Objects.Add(nearestObjects[0]); //Add homeworld as my starting point for my route



            //max travel time to the next destination that will be considered is less than 30 minutes (or 1800 seconds).
            //Because in 20 minutes I could get passed a space monster (if it's my nearest neighbour) and add another 10 minutes to get to it's nearest neighbour (assuming it's a habbitable planet)... alot of time wasted!
            //for (int loop = 1; ; loop++) //loop starts at 1 as objectsInSpaceList[0] would be the planet I'm currently standing on as it's distance from us is 0
            //{//travelTime < 1800
            //    routeCounter = routes.Count;
            //    if (loop == 1)
            //        travelTime = 10;
            //    else
            //        travelTime = nearestObjects[loop].Distance / speed;

            //    if ( travelTime < 1800)
            //    {
            //        if(nearestObjects[loop].Monster == false && nearestObjects[loop].Habbitable == true)
            //        {

            //        }
            //        routeCounter++;

            //    }
            //}
            //double travelTime = 0;


            //for (int loop = 0; ; loop++)
            //{
            int loop = 0;

            using (var writer = new StreamWriter("..\\..\\..\\FlightPlan.txt"))
            {
                UpdatedMap map = new UpdatedMap();
                do
                {
                    map            = FindClosestHabitablePlanet(nearestObjects, routes[loop]); //
                    routes[loop]   = map.Route;
                    nearestObjects = map.Map;
                } while (map.EndIndicator == false);


                writer.WriteLine("**********************THE 24 HOUR COLONIZATION FLIGHT PLAN DEPARTING FROM HOME**********************");
                routes[0].Objects.Remove(routes[0].Objects[0]);//remove home planet
                foreach (Planet item in routes[loop].Objects)
                {
                    writer.WriteLine(
                        string.Format("X : {0} | Y : {1} | Z : {2} | Space on planet : {3} Million square kilometers",
                                      item.X.ToString("0,0").PadLeft(11),
                                      item.Y.ToString("0,0").PadLeft(11),
                                      item.Z.ToString("0,0").PadLeft(11),
                                      item.Space.ToString().PadLeft(3)
                                      ));
                }

                writer.WriteLine(
                    string.Format(" Time : {0} hours, Colonized : {1} square kilometers, Colonized a total of {2} planets!!!",
                                  (routes[loop].Time / 3600),
                                  routes[loop].TotalConquredSpace,
                                  routes[loop].TotalPlanetsColonized
                                  ));
            }

            //}
        }