প্রথমত, পদ্ধতিগত জেনারেশন করার উপায়গুলি খুব ফাঁকা আছে এবং সেগুলির কোনওোটাই মোটেও সহজ নয়, আপনি কীভাবে এটি কাজ করতে পারেন তা সম্পর্কে আমি একধরনের পন্থা করব, এটি গ্রহণ করা, এটি সংশোধন করতে বা বাতিল করতে হবে।
এটি বুঝতে সহজ হিসাবে জেএসে সিউডো-কোড দেবে।
1º একটি এন্ট্রি পয়েন্টটি সংজ্ঞায়িত করুন, আপনি যেমন একটি মধ্যযুগীয় শহর বানাতে চান যা আমরা একটি বর্গ দিয়ে শুরু করব, সুতরাং বলি যে আপনার শহরে 300 বর্গাকার ইউনিট থাকবে এবং বর্গটি এর মাঝখানে থাকবে (একটি এক্স দিয়ে উপস্থাপিত)।
300
________________
| |
| |
| | 300
| X |
| |
| |
|_______________|
const square = [ 150, 150 ];
2º এখন আমরা উপায়গুলি করব, এগুলির একটি এলোমেলো সংখ্যা থাকবে, সেগুলি সোজা হবে এবং মধ্য বর্গ থেকে শুরু হবে বা অন্যান্য পথ থেকে শুরু হবে
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
এটি আপনাকে একটি বর্গাকার এবং কয়েকটি প্রধান রাস্তা দেওয়া উচিত
300
________________
| \\ |
| \\ |
| \\ | 300
| X===== |
| |
| |
|_______________|
এখন আমাদের অ্যাভিনিউগুলি সেট করতে হবে যা মূল স্কোয়ারে শুরু হয় না, তারা অন্যান্য সুযোগগুলিকে ছেদ করবে
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] ];
}
লম্ব লম্বা ভেক্টর পেতে আপনাকে এক্স, ওয়াই কর্ড অদলবদল করতে হবে এবং নতুন y টি উপেক্ষা করতে হবে:
swiped == x: noswiped.y, y: -1 * (noswiped.x)
এই মুহুর্তে আপনার কি এরকম কিছু হওয়া উচিত, এটি কি শহরের মতো দেখাচ্ছে না? : P: P
300
________________
| \\ // |
| \\// || |
| \\ || | 300
| //\X===== |
| // || |
| || |
|_______________|
3º এখন আপনাকে কেবল ছোট ছোট রাস্তাগুলির সাথে সংযোগ স্থাপন করতে হবে, এছাড়াও আপনি শহর জুড়ে সমস্ত এলোমেলো স্কোয়ারগুলি স্প্যান করতে পারেন এবং সেগুলির জন্য উপরের মতই তৈরি করতে পারেন, বা কিছু সেকেন্ডারি স্কোয়ার থেকে কেবল ছোট ছোট রাস্তাগুলি স্প্যান করতে পারেন, এটি আপনার বিষয়।
মনে রাখবেন, আপনার রাস্তাগুলি সবচেয়ে কম, বিশৃঙ্খল শহরটি দেখতে।