示例#1
0
        private void button2_Click(object sender, EventArgs e)
        {
            if (PlanetTypes.SelectedItem != null)
            {
                Random random = new Random();

                Planet planet = new Planet(Game.Game.Data.Names.PlanetNames[random.Next(Game.Game.Data.Names.PlanetNames.Length - 1)]);
                planet.type = (PlanetClass)PlanetTypes.SelectedItem;

                if (system.planets == null)
                {
                    system.planets = new List<Planet>();
                }
                system.planets.Add(planet);
                planet.Solarsystem = system;

            }

            planetList.Clear();
            foreach (Planet pl in system.planets)
            {
                planetList.AppendText(pl.type.Name + " - " + pl.Name + Environment.NewLine);

            }
        }
示例#2
0
        private void button1_Click(object sender, EventArgs e)
        {
            Random random = new Random();
            List<PlanetClass> planetTypes = data.getPlanetTypes();

            try
            {
                int count = int.Parse(textBox1.Text);

                for (int i = 0; i < count; i++)
                {

                    Planet planet = new Planet(Game.Game.Data.Names.PlanetNames[random.Next(Game.Game.Data.Names.PlanetNames.Length - 1)]);
                    planet.type = planetTypes[random.Next(planetTypes.Count - 1)];

                    if (system.planets == null)
                    {
                        system.planets = new List<Planet>();
                    }
                    system.planets.Add(planet);
                    planet.Solarsystem = system;
                }

                planetList.Clear();
                foreach (Planet pl in system.planets)
                {
                    planetList.AppendText(pl.type.Name + " - " + pl.Name + Environment.NewLine);

                }

            }
            catch
            {
            }
        }
示例#3
0
文件: Map.cs 项目: MRH4287/GameServer
        private void generateMapData(int addCount = -1)
        {
            /* Erstellung der Map:

             *  1. Erstellen der Refferenzen der Sonnensystem
             *  2. Berrechnen der Abstände / Koordinaten der Systeme
             *  3. Erstellen der Verbindundungen zwischen den Systemen
             *  4. Überprüfen, ob jedes System mindestens eine Verbindung hat
             *  5. Überprüfen, ob es von jedem Punkt eine Verbindung zu jedem Punkt gibt
             */

            if (loadedMap != null)
            {

                if (loadedMap.randomArea != null)
                {
                    int systemcount = loadedMap.systemcount;
                    int min_distance = loadedMap.min_distance;

                    if (addCount != -1)
                    {
                        systemcount = addCount;
                    }

                    int min_X, min_Y, max_X, max_Y;

                    if (loadedMap.randomArea.x1 > loadedMap.randomArea.x2)
                    {
                        min_X = loadedMap.randomArea.x2;
                        max_X = loadedMap.randomArea.x1;
                    }
                    else
                    {
                        min_X = loadedMap.randomArea.x1;
                        max_X = loadedMap.randomArea.x2;
                    }

                    if (loadedMap.randomArea.y1 > loadedMap.randomArea.y2)
                    {
                        min_Y = loadedMap.randomArea.y2;
                        max_Y = loadedMap.randomArea.y1;
                    }
                    else
                    {
                        min_Y = loadedMap.randomArea.y1;
                        max_Y = loadedMap.randomArea.y2;
                    }

                    int connectrange = 100;
                    int maxconnections = 4;
                    try
                    {
                        connectrange = int.Parse(main.config["Game/Map/ConnectRange"]);
                        maxconnections = int.Parse(main.config["Game/Map/MaxConnections"]);
                    }
                    catch { }

                    //  Parallel.For(0, systemcount, i =>
                    for (int i = 0; i < systemcount; i++)
                    {
                        Random rand = new Random();
                        Solarsystem system = new Solarsystem();

                        int x = rand.Next(min_X, max_X);
                        int y = rand.Next(min_Y, max_Y);

                        system.x = x;
                        system.y = y;

                        system.name = Game.Game.Data.Names.SolarsystemNames[rand.Next(Game.Game.Data.Names.SolarsystemNames.Length - 1)];

                        int count = 0;
                        bool ok = true;
                        while (getSystemsInRange(system, min_distance).Count > 0)
                        {

                            count++;

                            x = rand.Next(min_X, max_X);
                            y = rand.Next(min_Y, max_Y);

                            system.x = x;
                            system.y = y;

                            if (count > 100)
                            {
                                ok = false;
                                break;
                            }
                        }

                        if (ok)
                        {

                            LinkedList<Solarsystem> near = getSystemsInRange(system, connectrange);
                            if (near.Count > 0)
                            {
                                int anzahl = rand.Next(1, near.Count);
                                int j = 0;
                                foreach (Solarsystem nearSystem in near)
                                {
                                    try
                                    {
                                        j++;
                                        if (j > anzahl)
                                        {
                                            break;
                                        }

                                        if ((getConnectionCount(system) < maxconnections) && (getConnectionCount(nearSystem) < maxconnections) && !isConnection(system, nearSystem))
                                        {
                                            Node node = new Node();
                                            node.pointa = system;
                                            node.pointb = nearSystem;
                                            node.distance = getDistance(system, nearSystem);
                                            system.nodes.Add(node);
                                            nearSystem.nodes.Add(node);

                                        }
                                    }
                                    catch { }
                                }
                            }
                            if (system != null)
                                systemList.Add(system);
                        }
                        // });
                    }

                    // Überprüfung der Systeme

                    bool sysok = true;

                    List<Solarsystem> delet = new List<Solarsystem>();
                    Parallel.ForEach(systemList, system =>
                        {

                            if ((system != null) && sysok)
                            {
                                if (getSystemsInRange(system, 0).Count > 0)
                                {
                                    Console.WriteLine("Invalides System endteckt!");

                                    system.nodes.Clear();
                                    foreach (Node node in system.nodes)
                                    {
                                        node.pointa.nodes.Remove(node);
                                        node.pointb.nodes.Remove(node);
                                    }
                                    try
                                    {
                                        delet.Add(system);

                                    }
                                    catch
                                    {
                                    }
                                }
                                else
                                    if (system.nodes.Count == 0)
                                    {

                                        LinkedList<Solarsystem> near = getSystemsInRange(system, connectrange * 2);
                                        if (near.Count > 0)
                                        {
                                            int anzahl = (new Random()).Next(1, near.Count);

                                            int j = 0;
                                            foreach (Solarsystem nearSystem in near)
                                            {
                                                j++;
                                                if (j > anzahl)
                                                {
                                                    break;
                                                }

                                                if ((getConnectionCount(system) < 2) && (getConnectionCount(nearSystem) < maxconnections) && !isConnection(system, nearSystem))
                                                {
                                                    Node node = new Node();
                                                    node.pointa = system;
                                                    node.pointb = nearSystem;
                                                    node.distance = getDistance(system, nearSystem);
                                                    system.nodes.Add(node);
                                                    nearSystem.nodes.Add(node);

                                                }
                                            }

                                        }
                                        if (system.nodes.Count == 0)
                                        {
                                            main.log("Unnereichbares System gefunden! Bitte Passen Sie die Map-Daten oder die AnwendungsKonfiguration an");
                                            sysok = false;
                                        }
                                    }
                            }
                        });

                    if (!sysok)
                    {
                        //  reCreateMap();
                        return;
                    }

                    //  Parallel.ForEach(delet, del => { systemList.Remove(del); });
                    //   Console.WriteLine(delet.Count + " Systeme entfernt");
                    foreach (Solarsystem del in delet)
                    {
                        if (systemList.Contains(del))
                        {

                            del.nodes.Clear();
                            foreach (Node node in del.nodes)
                            {
                                node.pointa.nodes.Remove(node);
                                node.pointb.nodes.Remove(node);
                            }

                            systemList.Remove(del);
                        }

                    }
                    systemList.Remove(null);

                    //  if (delet.Count > 0)
                    // generateMapData(delet.Count);

                }

                //Erstelle Zufalls Planeten
                List<PlanetClass> planetTypes = game.getPlanetTypes();
                if (planetTypes.Count > 0)
                {
                    Random random = new Random(DateTime.Now.Millisecond);
                    Parallel.ForEach(systemList, system =>
                           {

                               for (int i = 0; i < random.Next(15); i++)
                               {

                                   Planet planet = new Planet(Game.Game.Data.Names.PlanetNames[random.Next(Game.Game.Data.Names.PlanetNames.Length - 1)]);
                                   planet.type = planetTypes[random.Next(planetTypes.Count - 1)];

                                   if (system.planets == null)
                                   {
                                       system.planets = new List<Planet>();
                                   }
                                   system.planets.Add(planet);
                                   planet.Solarsystem = system;
                               }

                           });
                }

            }
            else
            {
                throw new GameException("Keine Map-Datei geladen");
            }
        }