Her şeyden önce, prosedürel üretim yapmanın yolları vardır ve bunların hiçbiri hiç de kolay değildir, nasıl çalıştırabileceğinize, nasıl yapacağınıza, değiştirdiğinize veya attığınıza nasıl bir yaklaşım yapacağım.
Anlaması daha kolay olduğu için JS'de sözde kod yazacaktır.
1º bir giriş noktası tanımlayın, bir ortaçağ şehri inşa etmek istediğiniz gibi bir kare ile başlayacağız, bu yüzden kasabanızın 300 kare birimi olacak ve kare bunun ortasında olacak (X ile temsil edilecek).
300
________________
| |
| |
| | 300
| X |
| |
| |
|_______________|
const square = [ 150, 150 ];
2º Şimdi caddeler olacağız, rastgele bir sayı olacak, düz olacaklar ve orta meydandan veya diğer caddelerden başlayacaklar
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
Bu size bir kare ve çift ana cadde vermeli
300
________________
| \\ |
| \\ |
| \\ | 300
| X===== |
| |
| |
|_______________|
Şimdi ana meydanda başlamayan caddeleri ayarlamamız gerekiyor, diğer caddelerle kesişecekler
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] ];
}
Dik vektörler elde etmek için x, y kablolarını değiştirmeniz ve yeni y'yi reddetmeniz gerekir:
kaydırıldı == x: noswiped.y, y: -1 * (noswiped.x)
Şu an buna benzer bir şeye sahip olmalısın, kasaba gibi görünmüyor mu? : P
300
________________
| \\ // |
| \\// || |
| \\ || | 300
| //\X===== |
| // || |
| || |
|_______________|
Şimdi, sadece caddeleri kısa sokaklarla birbirine bağlamak zorundasınız, ayrıca, tüm kasaba boyunca rastgele kareler oluşturabilir ve hepsi için yukarıdakiyle aynı şeyi yapabilir veya sadece bazı meydanlardan küçük sokaklar çıkarabilirsiniz, bu size kalmış.
Unutmayın, sokaklarınız ne kadar kısaysa, kasaba kaotik gibi görünüyor.