Ich erstelle derzeit eine prozedural generierte Karte und wollte den Städten Regionen hinzufügen, die ihre Reichweite angeben. Ich erreiche dies derzeit, indem ich mich vom Stadtzentrum nach außen ausdehne, bis entweder die Reichweite der Stadt überschritten wird oder das Wasser- / Berggelände überschritten wird getroffen, ein bisschen wie Raytracing, nehme ich an:
Dies führt zu den oben genannten Problemen, da große hässliche / unnatürliche Löcher entstehen und Bereiche nicht außer Sichtweite gefüllt werden, sondern wohl in Reichweite der Stadt liegen. Stadtregionen sollen durch Gebirgszüge und größere Gewässer blockiert sein, sich aber auf natürliche Weise um kleine Seen / Felsen krümmen. Ich kann meinen aktuellen Code bereitstellen. Ich glaube, er ist grundlegend fehlerhaft für das, was ich tun möchte, und nicht verwendbar.
Grundsätzlich sollte die gewünschte Region, die ich großartig machen möchte, ungefähr so aussehen:
Ich bin ein bisschen ratlos, wonach ich suchen muss, um Literatur zu diesem Thema zu finden, sei es ein Algorithmus oder ein Hinweis, also frage ich mich im Grunde, wie das heißt. (Alle Tipps / Tricks wäre auch sehr dankbar)
Antworten:
Um den Kommentaren von @Ranth & @JackFrost nachzugehen, sollte eine breite erste Suche, die sich vom Ursprungsort weg erstreckt, das gewünschte Ergebnis liefern. Dabei:
Da sich die Suche entweder um Hindernisse wickeln oder langsamer durch sie bewegen muss, erhalten Sie keinen perfekten Kreis um Ihren Ursprungspunkt. Wenn die Dinge immer noch zu glatt aussehen und / oder Sie einen Bereich ohne Hindernisse haben, können Sie jederzeit einige falsche Hindernisse für die Suche nach der Stadt hinzufügen.
Wie bei den meisten PCG-Dingen müssen Sie wahrscheinlich ein wenig experimentieren, um das zu finden, was Sie wollen. Ich verwende gerne Perlin / Simplex-Rauschen und / oder Poisson-Festplattenverteilungen für solche Dinge, aber für jeden seine eigenen.
quelle
Ich glaube, dies könnte mit dem Flutfüllungsalgorithmus erreicht werden, der im Grunde alle verbundenen Bereiche in einem bestimmten Raum berechnet, je nachdem, wie Sie möchten, dass dies funktioniert, da dies zu Bereichen führen kann, die beispielsweise einem Fluss gegenüberliegen (wo der Fluss den ganzen Weg entlang fließt) Das größte Gebiet, das die Stadt einnehmen kann, wird nicht in das Gebiet einbezogen, das einer besonderen Behandlung bedarf.
In Bezug auf das Wachstum können Sie einfach den Radius des Kreises vergrößern und die Flutfüllung den Bereich innerhalb dieses Kreises auswählen lassen.
In Bezug auf die Implementierung ist es am besten, einem Tutorial zu folgen, aber Wikipedia hat auch eine anständige Pseudo-Code-Implementierung: https://en.wikipedia.org/wiki/Flood_fill#Pseudocode
quelle
Wie Kyranstar erklärte in seinem Kommentar vielleicht zellulären Automaten kann eine Lösung sein.
Fordern Sie neues Terrain mit einer zufälligen Logik an, die den Geländetyp und die Wasserpräsenz überprüft (eine Stadt wächst normalerweise in der Nähe eines Flusses oder der Seekosten).
quelle