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); } }
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 { } }
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"); } }