रैंडम मैप जनरेशन


63

मैं जावा में 2D तिलमप आरपीजी गेम शुरू / शुरू कर रहा हूं और मैं यादृच्छिक मानचित्र पीढ़ी को लागू करना चाहता हूं। मेरे पास विभिन्न टाइलों की एक सूची है, (गंदगी / रेत / पत्थर / घास / बजरी आदि) के साथ-साथ पानी की टाइलें और पथ टाइलें, मेरे पास समस्या यह है कि मुझे पता नहीं है कि यादृच्छिक रूप से मानचित्र बनाने पर कहां से शुरू करना है।

इसके लिए भू-भाग खंड होने चाहिए (जैसे इसका एक हिस्सा रेत, भाग गंदगी, आदि होगा) इसी तरह से Minecraft है जहां आपके पास अलग-अलग बायोम हैं और वे मूल रूप से एक-दूसरे में बदल जाते हैं। अन्त में मुझे पूरे नक्शे में अलग-अलग दिशाओं में जाने के साथ-साथ इसमें यादृच्छिक रास्ते भी जोड़ने होंगे।

मैं किसी को भी मुझे सभी कोड या कुछ भी लिखने के लिए नहीं कह रहा हूं, बस मुझे सही दिशा में इंगित करें।

tl; dr - बायोम, रास्तों के साथ एक टाइल मैप तैयार करें और सुनिश्चित करें कि बायोम मूल रूप से एक दूसरे में जाते हैं।

जवाबों:


68

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

एक ट्यूटोरियल नहीं है, वहीं पर एक लेख है कि कैसे बौना गढ़ दुनिया के नक्शे उत्पन्न होते हैं। मूल रूप से आप ऊंचाई, नमी, तापमान, लवणता के लिए शोर की कई परतें उत्पन्न करते हैं। तो आप इस तरह से कुछ का उपयोग करेंगे:

यहाँ छवि विवरण दर्ज करें

या यह

यहाँ छवि विवरण दर्ज करें

आपके द्वारा पहले उत्पादित शोर की परतों के आधार पर बायोम उत्पन्न करने के लिए। आमतौर पर यह बायोम के बीच काफी सहज संक्रमण देता है और संक्रमण तार्किक होते हैं। मैं ऊंचाई के आधार पर नमी और तापमान के नक्शे को भी संशोधित करता हूं। यह स्वाभाविक रूप से एक "लकड़ी की रेखा" उत्पन्न करता है और बर्फीली टोपी के साथ चट्टानी पहाड़ों का निर्माण करता है।

मैं इस रणनीति को अपने खेल का उपयोग कर रहा हूं और यह बहुत जल्दी इस तरह के नक्शे तैयार करता है:

यहाँ छवि विवरण दर्ज करें

इसके अतिरिक्त, आप मुझे इस वीडियो की शुरुआत में कुछ और मानचित्रों के माध्यम से स्क्रॉल कर सकते हैं ।

और यहाँ कुछ और आप शुरू करने के लिए है:

मैं एक टाइल इंजन में एक यादृच्छिक "दुनिया" कैसे बना सकता हूं?

मैं एक प्रक्रियागत रूप से उत्पन्न दुनिया में फ़ीचर क्षेत्रों की पहचान कैसे कर सकता हूं?

मैं मैप जनरेशन के लिए टिलिबल सॉलिड शोर कैसे बनाऊं?


जबकि गेम लिंक के लिए पॉलीगोनल मैप जेनरेशन एक बहुत अच्छा लेख है, मुझे नहीं लगता कि यह इस सवाल के लिए बहुत अच्छा है क्योंकि a) यह एक टिलमैप ग्रिड नहीं है और b) इसमें बायोम नहीं है - इलाके की बनावट है ऊंचाई के आधार पर।
तापियो

@ टैपियो तुम सही हो, मैंने अधिक जानकारी के साथ अपडेट किया है।
MichaelHouse

@ Byte56 धन्यवाद, यह सब मुझे एक प्रारंभिक बिंदु देता है! :)
टॉम ओ

@ Byte56 मैंने देखा कि आपने कुछ साल पहले मेरे प्रश्न का उल्लेख किया था, इसलिए मैंने इसे काम करने वाले कोड के साथ अपडेट किया!
निक बादल

1
BTW बहुभुज मानचित्र पीढ़ी परियोजना एक गेम के लिए बनाई गई थी जिसमें एक टाइल का नक्शा था जो ऊंचाइयों को प्रदर्शित नहीं करता था। हाइट और पॉलीगॉन बायोम उत्पन्न करने के लिए हैं, लेकिन वे वास्तव में खेल में नहीं दिखाए जाते हैं।
१p

29

जबकि यहाँ अन्य उत्तर वास्तव में स्थिर परिदृश्य के प्रकार उत्पन्न करने के लिए अच्छे हैं जो इस विशिष्ट आवश्यकता के लिए काम करेंगे। ऐसे अन्य तरीके हैं जो इस सवाल पर आने वाले लोगों को लग सकते हैं कि क्या वे ऐसे परिदृश्य बनाना चाहते हैं जो समय के साथ बदलते हैं या बहुत अधिक यथार्थवादी दिखाई देते हैं जो आप इस तकनीक का अनुसरण कर सकते हैं।

अन्य उत्तरों के विपरीत आप इसे पूरी तरह से खाली मानचित्र के साथ शुरू करते हैं। समुद्र तल से जो आप पर विचार करेंगे उसके साथ शुरू करें। बहुत कम भिन्नता जोड़ने के लिए पेरलिन शोर का उपयोग करें , यदि आपके पास 256 संभव ऊँचाई है, तो दोनों दिशाओं में 3-5 से अधिक न भिन्न हों। यह वास्तव में उस लंबे समय के लिए सिमुलेशन चलाने के बिना आपके परिदृश्य के पहले कुछ अरब वर्षों का निर्माण करता है।

प्लेट टेक्टोनिक्स

प्लेट बनाने के लिए सीधे या घुमावदार रेखाओं के साथ मानचित्र को विभाजित करें, प्लेटों के आकार को जितना अधिक विस्तृत किया जाए उतना ही आपके परिदृश्य के साथ दिलचस्प होगा। उन्हें बड़ा रखें। प्रत्येक प्लेट को एक दिशा, गति दें। किसी निश्चित समय-सीमा पर प्लेट्स को मानचित्र के चारों ओर चरण-वार फैशन में स्थानांतरित करें, ऊपर की सभी टाइलों को उनके साथ खींचकर।

जब दो प्लेटें पार हो जाती हैं, तो एक विकल्प चुनें कि कौन सा खत्म हो जाएगा और कौन सा नीचे जाएगा, यह विकल्प यादृच्छिक हो सकता है। के तहत नामित प्लेटों पर टाइलें 5 चरणों में तुरंत कम हो जाती हैं। एक बार एक प्लेट को या उसके नीचे नामित किया गया है, प्लेटों के साथ भविष्य के सभी इंटरैक्शन इन नियमों का पालन करेंगे:

  • जहां एक निर्दिष्ट प्लेट एक अविभाजित प्लेट को पार करती है, तो अनिर्दिष्ट प्लेट विपरीत प्रकार बन जाती है। (इसलिए एक पार करते समय यूडी प्लेट्स बन जाती हैं।)
  • जहां एक ओवर प्लेट एक अंडर प्लेट के ऊपर बैठती है, उन सभी टाइलों में 0-1 ऊंचाई के कदम बढ़ते हैं, और टाइलें ओवर प्लेट के रास्ते का अनुसरण करती हैं।
  • जहां एक ओवर प्लेट एक ओवर प्लेट को पार कर जाती है, उन सभी टाइलों में 1-2 कदम बढ़ जाते हैं, और क्रॉस ओवर टाइल में अब और अधिक बहाव नहीं होता है।
  • जहां एक अंडर प्लेट एक अंडर प्लेट को पार कर जाती है, क्षेत्र में क्रॉस ओवर में दोनों प्लेटों के लिए 66% से अधिक ऊँचाई वाले क्षेत्र में कोई भी टाइल 1-3 कदम चलती है (जैसे कि ज्वालामुखी गतिविधि से, यह पर्याप्त समय में द्वीपों का उत्पादन करेगा। ) और इस क्षेत्र में टाइलें बहना बंद हो जाती हैं।

सभी प्लेटें जो अपनी वर्तमान गति का 20% प्रत्येक चरण पर धीमी गति से पार करती हैं। अतिरिक्त यथार्थवाद के लिए, प्रत्येक चरण में गति की दिशा में 10% परिवर्तन के लिए यादृच्छिक -10% जोड़ें।

वांछित संख्याओं के प्रदर्शन के बाद। संभवत: 5-10 काफी हैं। कोई भी टाइल जहां कोई प्लेटें नहीं हैं, उन्हें मौजूदा मौजूदा स्तर तक गिरा दिया जाना चाहिए।

बड़ा या छोटा?

इस मानचित्र का उपयोग इस प्रकार किया जा सकता है, या इसे 4X4 टाइल (सेल) के टुकड़ों में तोड़कर और उनके अलग-अलग उन्नयन के आधार पर उन वर्गों का विस्तार करके एक बहुत बड़ा मानचित्र बनाने के लिए विस्तारित किया जा सकता है। एक बिंदु के रूप में प्रत्येक कोशिका के उत्थान का इलाज करें, और उन बिंदुओं के बीच बड़े मानचित्र में एक सुचारु उन्नयन बनाएं। इसलिए, यदि बड़ा नक्शा 4X4 के बजाय 40X40 है, और बिंदु (0,0) 10 था और बिंदु (0,1) 1 था, तो उनके बीच के बड़े मानचित्र पर टाइल 10,9,8,7,6 होगी , ऊँचाई 5,4,3,2,1 है। इसके अलावा पर्लिन शोर को ढलानों को सुचारू करने के लिए जोड़ा जा सकता है। यह सब स्केलिंग तकनीक डायमंड स्क्वायर एल्गोरिदम के समान है ।

पानी

नदियों और झीलों, महासागरों और जल तालिकाओं का अनुकरण करना। मैं सेलुलर ऑटोमेटा का उपयोग करना पसंद करता हूं ।

महीन दानेदार ट्रैकिंग की अनुमति देने के लिए ऊँचाई फ़्लोट या विस्तारित इंट रेंज होती है। पानी की कोशिकाओं में संतृप्ति मूल्य होते हैं, 1-256 की सीमा में कहते हैं। नक्शे समान रूप से शुरू होने चाहिए। आपको अपने व्यक्तिगत मानचित्र आकारों के लिए संख्याओं के साथ खेलना होगा, हालाँकि आमतौर पर आप नियमों का पालन कुछ इस तरह से करेंगे:

  • यदि एक पड़ोसी कोशिका अधिक संतृप्त है, तो संतृप्ति को बढ़ाएं और ऊंचाई हासिल करें।
  • यदि एक पड़ोसी कोशिका कम संतृप्त है, तो संतृप्ति में कमी करें और ऊंचाई कम करें।

हर पड़ोसी सेल के लिए यह जाँच करें। पर्याप्त संख्या में चरणों से गुजरें। यदि आप चाहें, तो आप उस तापमान से खोए / प्राप्त संतृप्ति की मात्रा को बदलकर इस सिमुलेशन में तापमान जोड़ सकते हैं। आप इसे ऊंचाई के आधार पर भी बदल सकते हैं। प्राकृतिक झीलें और नदियाँ बननी चाहिए। कुछ समंदर में गिर जाएंगे। (सागर शायद किसी भी मीट्रिक से नहीं भरेगा, लेकिन आप समुद्र के स्तर के नीचे कुछ भी नामित करेंगे, वैसे भी अंत में पानी भरा जाएगा।)

आप बायोम बनाने के लिए तापमान और संतृप्ति डेटा का उपयोग अन्य उत्तरों की तरह रख सकते हैं। उन्हें अधिक सटीक और दिलचस्प होना चाहिए। बीच में डंडे और गर्म वाले पर बर्फीले बायोम के साथ (यदि आप तापमान की एक चिकनी स्नातक की गई सूची का उपयोग करते हैं।)

आप हवा का अनुकरण भी कर सकते हैं, और इसलिए ऊंचाई के आधार पर तापमान में परिवर्तन होता है। आप चाहें तो तापमान सिमुलेशन और पानी सिमुलेशन चलाने के बीच आगे और पीछे कदम रख सकते हैं। हालाँकि मैंने तापमान परिवर्तन का उपयोग करके कुछ भी नहीं बनाया है इसलिए मैं यह नहीं बताऊंगा कि यह कैसे करना है।

परिदृश्य का विकास

यदि आप भूमि, पानी, और गर्मी के लिए सिमुलेशन को बनाए रखते हैं और नाटकीय रूप से उनके प्रभावों को कम करते हैं और प्लेटों को हिलने से भी रोकते हैं, तो आप समय के साथ इन सभी मैट्रिक्स को बदलना जारी रख सकते हैं। मैं गणनाओं को बहुत बार नहीं चला सकता, लेकिन आप एक विश्व मानचित्र प्राप्त कर सकते हैं जो इस तरह से परिवर्तन के प्रति प्रतिक्रिया करता है।

निष्कर्ष

जबकि इस प्रकार की तकनीकें अधिक शामिल हैं, वे बहुत अधिक यथार्थवादी और विकसित करने वाले प्रभाव पैदा करते हैं। इसके लायक क्या है इसे ले लो?


15

आप इलाके की पीढ़ी के लिए पेर्लिन शोर का उपयोग कर सकते हैं , यहां बताया गया है कि Minecraft में बायोम कैसे काम करते हैं। जैसा कि आप देख सकते हैं कि वह बायोम बनाने के लिए एक रेनमैप के साथ संयोजन में हीटमैप का उपयोग करता है।

Minecraft से बायोम

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.