आप एक एल्गोरिथ्म का उपयोग कर सकते हैं जो ब्लॉकों के पास जांचता है, और जो कुछ है उसके आधार पर संभावना भिन्न होती है - लेकिन मुझे लगता है कि यह काफी हद तक गलत दृष्टिकोण है।
आप जो देखना चाहते हैं वह भग्न शोर प्रकार है - इस मामले में, पर्किन या सिंप्लेक्स शोर। यदि आप शोर उत्पन्न करते हैं, तो आपको -1 से 1 तक मान मिलेंगे।
http://en.wikipedia.org/wiki/Perlin_noise
फिर आप पानी बनाता है की सीमा को निर्धारित करके अपने जल स्तर को समायोजित कर सकते हैं। अन्य ब्लॉकों के लिए आप रॉक और घास के बीच स्विच करने के लिए शोर का दूसरा सेट चला सकते हैं। (इस तरह आपके पास पानी के बड़े पैच हो सकते हैं, लेकिन पत्थर के छोटे गुच्छे)।
getTerrain(x,y) {
if(perlin_noise(x,y) > 0) {
if(perlin_noise(x * scale,y * scale) > 0) {
return rock
} else {
return dirt
}
} else {
return water
}
जैसा कि मुझे लगता है कि स्कैन और टॉस विधि अत्यधिक जटिल है और अत्यधिक मजबूत स्केलेबल नहीं है, मैं एक और तरीका सुझाऊंगा जिसका मैंने आनंद लिया:
अपने नक्शे में एक ग्रिड बिछाएँ, नक्शे को बड़े वर्गों में तोड़ दें।
प्रत्येक चौराहे पर एक यादृच्छिक संख्या उत्पन्न करें (0 और 1 के बीच आपके प्रतिशत के लिए काम करेगा)
प्रत्येक वर्ग को 4 सम वर्गों में काटकर उपविभाजित करें - पुरानी रेखाओं का अनुसरण करें, और जहां आपको उपखंड रेखाएं मिलें, 2 आसन्न बिंदुओं के बीच एक यादृच्छिक संख्या उत्पन्न करें, इसी तरह, क्रॉस के केंद्र के लिए, एक बिंदु उत्पन्न करें जो सबसे अधिक के बीच हो और सबसे कम मूल्य।
धोये और दोहराएं। आपको पहले पास से प्रारंभिक यादृच्छिकता मिलेगी, लेकिन बाद वाले पास को कुछ समानता दे देंगे।
0-------5 0---3---5 0-1-3-4-5 011233455
| | | | | | | | | | 012344555
| | | | | 0-2-4-6-5 002445665
| | | | | | | | | | 123445666
| | 2---5---7 2-4-5-7-7 234455777
| | | | | | | | | | 233455688
| | | | | 2-3-5-5-9 223455589
| | | | | | | | | | 233455589
2-------9 2---4---9 2-4-4-5-9 234445579
यह त्रिभुजों के लिए और भी बेहतर काम करता है, क्योंकि जब आप उप-विभाजित होते हैं तो आपके पास क्रॉस-बार नहीं होता है।
बेशक, इन तरीकों के संयोजन से पूर्ण सर्वोत्तम परिणाम आएगा - परत पर परत, कुछ तकनीक आपको महान भूमि-द्रव्यमान देगी, अन्य आपको भयानक गुफाएं देंगे, अन्य लोग पहाड़ियों के लिए काम करेंगे, और अधिक पानी-प्रणालियों के लिए काम करेंगे।