समान टाइल के लिए एक दूसरे के बगल में उत्पन्न होने की संभावना बढ़ाना


9

मैं एक टाइल मैप सिस्टम पर काम कर रहा हूं, जो इनोफ़ार इस तरह दिखता है (हरी घास है, हवा सफेद है, पत्थर ग्रे है, और नीला पानी है):

टाइल्स

यह एक साधारण यादृच्छिक संख्या जनरेटर का उपयोग करता है ताकि टाइल के 45% होने की संभावना घास हो, 30% पानी होने की संभावना हो, और 25% की संभावना पत्थर हो।

वहाँ वैसे भी मैं घास / पत्थर ब्लॉकों के लिए भूमि जनता बनाने के लिए एक साथ टकराव की प्रवृत्ति को बढ़ा सकता हूं, और पानी के ब्लॉक को महासागरों के रूप में बना सकता हूं (जैसे कि Minecraft जैसे खेल में क्या देखा जा सकता है)?

जवाबों:


17

आप एक एल्गोरिथ्म का उपयोग कर सकते हैं जो ब्लॉकों के पास जांचता है, और जो कुछ है उसके आधार पर संभावना भिन्न होती है - लेकिन मुझे लगता है कि यह काफी हद तक गलत दृष्टिकोण है।

आप जो देखना चाहते हैं वह भग्न शोर प्रकार है - इस मामले में, पर्किन या सिंप्लेक्स शोर। यदि आप शोर उत्पन्न करते हैं, तो आपको -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

यह त्रिभुजों के लिए और भी बेहतर काम करता है, क्योंकि जब आप उप-विभाजित होते हैं तो आपके पास क्रॉस-बार नहीं होता है।

बेशक, इन तरीकों के संयोजन से पूर्ण सर्वोत्तम परिणाम आएगा - परत पर परत, कुछ तकनीक आपको महान भूमि-द्रव्यमान देगी, अन्य आपको भयानक गुफाएं देंगे, अन्य लोग पहाड़ियों के लिए काम करेंगे, और अधिक पानी-प्रणालियों के लिए काम करेंगे।


+1 जैसा कि मुझे लगता है कि कूदने की आवाज़ आम तौर पर होती है, जहाँ से यह आगे बढ़ेगा .. मैं सोच रहा हूँ कि क्या यह छलांग से थोड़ा बड़ा हो सकता है, लेकिन शुरुआती 'स्कैन के आसपास और पर्टिकुलेट को बदलने' ने मुझे वोट देने में आसानी कर दी :)
जेम्स

3

शोर एक अच्छा समाधान है, जैसा कि पहले ही उल्लेख किया गया है। एक अन्य विकल्प यह है कि डेटा पर दूसरा पास लेना है ताकि आप इसे उस लेआउट की ओर बढ़ा सकें जो आप चाहते हैं। गाऊसी ब्लर कई तरीकों में से एक है जिसे आप इसे हासिल कर सकते हैं। इसके साथ एक पास करना आपको प्रत्येक प्रकार के अच्छे "गोल" ब्लब्स मिलना चाहिए।

इससे कोई फर्क नहीं पड़ता कि आप किस विधि के साथ जाते हैं, लेकिन एक महत्वपूर्ण बात यह है कि प्रक्रिया के परिणामों को एक नए स्थान पर संग्रहीत करना है। यदि आप मानचित्र को जगह में संशोधित करते हैं, तो आपके द्वारा पहले से ही संसाधित किए गए भाग एल्गोरिथम को प्रभावित करना शुरू कर देंगे और आप कुछ अजीब पैटर्न के साथ समाप्त हो जाएंगे।


2

ऐसा करने का एक अपेक्षाकृत सरल तरीका यादृच्छिक पदों पर कई नाभिक बनाना होगा। इन बिंदुओं के वोरोनोई आरेख को ड्रा करें । परिणाम के प्रत्येक क्षेत्र में एक तत्व असाइन करें।

यह बदसूरत और यांत्रिक दिखने के बजाय कुछ का परिणाम है। सीमाओं को थोड़ा बढ़ाएं और आप सभ्य आकार में होंगे।

यदि आप बड़े मानचित्र के लिए उत्पन्न कर रहे हैं, तो आप इसे दो स्तरों पर कर सकते हैं। 20 नाभिकों का उपयोग करते हुए, अपना प्रारंभिक वोरोनोई आरेख बनाएं और प्रत्येक परिणामी क्षेत्र को एक राष्ट्र कहें। 400 नाभिक का उपयोग करके एक और आरेख बनाएं और प्रत्येक परिणामी क्षेत्र को एक विचरण कहते हैं।

एक राष्ट्र के भीतर पूरी तरह से निहित सभी vicarages में राष्ट्र का तत्व होगा। विकाराज आंशिक रूप से दो या अधिक राष्ट्रों में समाहित होता है, अपने राष्ट्रों के तत्वों में से एक को यादृच्छिक पर ले जाएगा।

यह पोस्ट एक तस्वीर की हकदार है, लेकिन मैं एक प्रदान करने के लिए बहुत आलसी हूं।


2

पॉलीगॉनल मैप जेनरेटर अलग-अलग 'ज़ोन' के साथ मैप बनाने में एक अच्छा पढ़ा जाएगा, जो आपको एक बेहतर गठित मैप्स भी देगा। यह वोरोनोई आरेखों पर आधारित है, लेकिन मुझे लगता है कि यह इसमें एक अच्छी शुरुआत होगी।


0

आप इसे इस विधि का उपयोग करके कर सकते हैं:

  • सभी टाइलों को अनिर्दिष्ट सूची में रखें
  • जबकि अनिर्दिष्ट सूची में एक टाइल है
  • शुरू
  • उस सूची में से एक टाइल चुनें
  • उस टाइल के पड़ोसियों की जाँच करें, और यह पड़ोसियों के आधार पर एक प्रकार का चयन करें
  • अनिर्दिष्ट सूची से उस टाइल को हटा दें
  • समाप्त
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.