Generieren eines Stadtlayouts in einem Raster


9

Ich möchte ein Stadtlayout in einem quadratischen Raster (isometrisch gerendert, aber das spielt keine Rolle) mit den folgenden Elementen generieren:

  • 2x2 Häuser
  • Straßen, 1 Einheit breit
  • Kanäle, 1 Einheit breit

Beispiellayout:

Beispiellayout

  • Ich habe immer eine bestimmte Anzahl von Häusern und so viele Straßen und Kanäle wie nötig, um sie alle zu verbinden.
  • Die Häuser müssen zwei Straßenstücke vor ihrer Haustür haben (die immer nach rechts zeigt)
  • Es wäre schön, dazwischen Grasfelder (Leere) zu haben.

Gibt es dafür einen vorgefertigten Algorithmus? Wenn nicht, in welche Richtung sollte ich denken, um dies umzusetzen?

Antworten:


8

Es gibt viele Möglichkeiten, je nachdem, wie Sie es möchten. Hier ist eine grobe Darstellung eines Weges, von dem ich denke, dass er zu Ihrer Beschreibung passt:

Generieren Sie zuerst die Kanäle. Beginnen Sie dann damit, Häuser nach dem Zufallsprinzip zu platzieren. Platzieren Sie für jedes Haus, das Sie platzieren, die Straße davor und zeichnen Sie eine Straße von diesem Stück zum vorhandenen Straßennetz, falls dies nicht möglich ist oder wenn Sie die Straße davor platzieren, entsteht ein hässlicher 2x2-Block von Straße neu positionieren das Haus. Erkennen Sie einige Straßenpunkte, die nahe beieinander liegen, aber weit voneinander entfernt sind, und versuchen Sie, einige Verknüpfungen für diese zu erstellen.

Diese Art von Sachen erfordert vor allem Experimentieren und Erfahrung. Oft erhalten Sie gute Ergebnisse, wenn Sie Details auf zufällige Weise erstellen, feststellen, ob sie bestimmte Kriterien erfüllen, und rückgängig machen und erneut versuchen, wenn dies nicht der Fall ist.

Für genau diese Aufgabe benötigen Sie sicherlich auch ein gutes Verständnis der grundlegenden Pfadfindung. Wenn Sie noch kein Experte sind, lesen Sie das Thema. Und denken Sie daran, dass die Pfadfindung nicht nur der kürzeste Weg sein muss. Im letzten Teil meiner Beschreibung möchten Sie möglicherweise der Wiederverwendung bereits vorhandener Pfade etwas Gewicht beimessen.

Dies ist überhaupt keine leichte Aufgabe. Wenn Sie nicht weiterkommen, kommen Sie zurück und zeigen Sie uns Ihren Code und einige Beispielausgaben. Erklären Sie ausführlich, wie es anders sein soll.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.