Zuallererst gibt es eine Unmenge von Möglichkeiten zur Erstellung von Prozeduren, und keine von ihnen ist überhaupt einfach. Ich werde eine Art Ansatz finden, wie Sie es zum Laufen bringen könnten, ob Sie es annehmen, modifizieren oder verwerfen.
Wird Pseudocode in JS, da es einfacher zu verstehen ist.
1º Definieren Sie einen Einstiegspunkt. Wenn Sie eine mittelalterliche Stadt bauen möchten, beginnen wir mit einem Quadrat. Nehmen wir also an, Ihre Stadt hat 300 quadratische Einheiten und das Quadrat befindet sich in der Mitte (dargestellt mit einem X).
300
________________
| |
| |
| | 300
| X |
| |
| |
|_______________|
const square = [ 150, 150 ];
2º jetzt werden wir die Alleen sehen, es wird eine zufällige Anzahl von ihnen geben, sie werden gerade sein und vom mittleren Platz oder von anderen Alleen ausgehen
let avenues = [] // will contain start and end [[sx,sy],[ex,ey]]
const n_avenues = RANDOM(4, 8); // number of avenues
const n_av_from_square = RANDOM(0, avenues); // starting in the square
for av in av_from_square
avenues.push(square, [RANDOM(0, 200) + 100, RANDOM(0, 200) + 100])
// we want avenues to have, at least 100 units length, thats why we randomize just te last 200 units of the whole town size
Dies sollte Ihnen einen Platz und ein paar Hauptstraßen geben
300
________________
| \\ |
| \\ |
| \\ | 300
| X===== |
| |
| |
|_______________|
Jetzt müssen wir die Alleen festlegen, die nicht auf dem Hauptplatz beginnen, sondern die anderen Alleen kreuzen
for av in (n_avenues - av_from_square){
const av_to_intersect = avenues[RANDOM(0,avenues.length)];
//check av_to... and get a perpendicular vector (explained bellow)
av[0] = [ av_to_intersect[0][1], - av_to_intersect[0][0] ];
av[1] = [ av_to_intersect[1][1], - av_to_intersect[1][0] ];
}
Um senkrechte Vektoren zu erhalten, müssen Sie die x- und y-Schnüre vertauschen und das neue y negieren:
swiped == x: noswiped.y, y: -1 * (noswiped.x)
Im Moment solltest du etwas Ähnliches haben, sieht es nicht aus wie eine Stadt? : P
300
________________
| \\ // |
| \\// || |
| \\ || | 300
| //\X===== |
| // || |
| || |
|_______________|
3º Jetzt müssen Sie nur noch die Alleen mit kurzen Straßen verbinden. Außerdem können Sie überall in der Stadt zufällige Quadrate erzeugen und für alle die gleichen Werte wie oben festlegen.
Denken Sie daran, je kürzer Ihre Straßen sind, desto chaotischer sieht die Stadt aus.