एक अच्छी दुनिया मानचित्र पीढ़ी एल्गोरिथ्म की तलाश [बंद]


97

मैं एक सभ्यता जैसे खेल पर काम कर रहा हूं और मैं पृथ्वी जैसे दुनिया के नक्शे बनाने के लिए एक अच्छे एल्गोरिथ्म की तलाश कर रहा हूं। मैंने कुछ विकल्पों के साथ प्रयोग किया है, लेकिन अभी तक एक वास्तविक विजेता पर नहीं मारा है।

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

पेर्लिन का शोर

एक दूसरा विकल्प एक बेतरतीब ढंग से तैनात एक-टाइल के बीज के साथ शुरू करना है (मैं टाइलों के ग्रिड पर काम कर रहा हूं), महाद्वीप के लिए वांछित आकार का निर्धारण करता हूं और प्रत्येक मोड़ एक टाइल जोड़ देता है जो मौजूदा महाद्वीप तक क्षैतिज या लंबवत समीप है। आप इच्छित आकार तक पहुँच चुके हैं। अन्य महाद्वीपों के लिए दोहराएं। यह तकनीक सभ्यता 4 में उपयोग किए जाने वाले एल्गोरिदम का हिस्सा है। समस्या यह है कि पहले कुछ महाद्वीपों को रखने के बाद, एक शुरुआती स्थान चुनना संभव है जो अन्य महाद्वीपों से घिरा हुआ है, और इस तरह से नया फिट नहीं होगा। इसके अलावा, इसमें महाद्वीपों को एक साथ बंद करने की प्रवृत्ति होती है, जिसके परिणामस्वरूप कुछ ऐसा होता है जो महाद्वीपों की तुलना में नदी की तरह दिखता है।

यादृच्छिक विस्तार

क्या किसी को ग्रिड-आधारित मानचित्र पर यथार्थवादी महाद्वीप बनाने के लिए एक अच्छा एल्गोरिदम जानने के लिए होता है, जबकि उनकी संख्या और सापेक्ष आकारों पर नियंत्रण रखते हैं?


2
मैं नहीं देखता कि 90+ अपवोट के साथ एक प्राकृतिक प्रश्न क्यों बंद होना चाहिए। फिर से मतदान करना।
जॉन कोलमैन

जवाबों:


38

आप प्रकृति से एक संकेत ले सकते हैं और अपने दूसरे विचार को संशोधित कर सकते हैं। एक बार जब आप अपने महाद्वीपों (जो सभी एक ही आकार के होते हैं) उत्पन्न करते हैं, तो उन्हें बेतरतीब ढंग से स्थानांतरित करने के लिए और घुमाएं और टकराएं और एक दूसरे को अलग करें और एक दूसरे से अलग हो जाएं। (नोट: यह कभी लागू करने के लिए सबसे आसान बात नहीं हो सकती है।)

संपादित करें: इसे लागू करने का एक और तरीका है, एक कार्यान्वयन के साथ पूरा - खेलों के लिए बहुभुज मानचित्र सृजन


2
यह एक महान विचार है। मैं स्पष्ट रूप से टेक्टोनिक प्लेटों का अनुकरण करने की कोशिश करने के बारे में नहीं जानता, लेकिन जब तक प्रत्येक महाद्वीप "अपनी भूमि टाइल्स" का मालिक है (जैसा कि एक मानचित्र सरणी के लिए जनरेटर के रूप में कार्य करने का विरोध किया जाता है) और अनिवार्य रूप से अपनी प्लेट के रूप में बैठता है या कार्य करता है, इसे लागू करना कठिन नहीं होगा। मैं अब यह कोशिश करने जा रहा हूँ :)
nathanchere

@FerretallicA धन्यवाद। मैं खुद इस पर जाने के लिए बहुत ललचाता हूँ - जब मेरे पास कुछ और खाली समय होता है ... :-)
डेविड जॉनस्टोन

3
एक सस्ती चाल जो आप हमेशा उपयोग कर सकते हैं वह एक गणितीय फ़ंक्शन को परिभाषित करने के लिए है जो "अच्छा" मानचित्र को परिभाषित करता है, और फिर दस यादृच्छिक मामूली बदलाव पैदा करता है और फिर उनमें से सबसे अच्छा उपयोग करता है। ऐसा करते रहो और वह जिस तरह के नक्शे को चाहता है, उसकी ओर बढ़ेगा।
dascandy

आप यह निर्धारित करने के लिए K- साधन क्लस्टरिंग के एक संशोधन का उपयोग कर सकते हैं कि कौन सा 'महाद्वीप' भूमि के प्रत्येक व्यक्ति के स्वामित्व में था। फिर प्लेट सीमाओं को निर्धारित करने के लिए एक वोरोनोई आरेख का उपयोग करें (जो आपको एक बार आसान होना चाहिए) प्लेट सीमाओं को निर्धारित करने के लिए ... वोरोनोई में प्रत्येक पंक्ति खंड के लिए आप एक यादृच्छिक गति वेक्टर निर्धारित करेंगे, और भूकंप क्षेत्रों बनाम ज्वालामुखी का निर्धारण करने में सक्षम होना चाहिए। ज़ोन, आदि। भूमि का प्रत्येक बिंदु तब प्लेट सीमाओं के संबंध में अपने स्थान के आधार पर एक व्यक्तिगत वेक्टर के साथ समाप्त होगा, और काम करने के लिए एक काफी यथार्थवादी सिमुलेशन के साथ समाप्त होना चाहिए।
स्टीव

मैं एक-टाइल बीज विधि का उपयोग कर रहा हूं। किसी भी सुझाव पर कि कैसे अधिक जटिल इलाके जैसे कि पर्वत श्रृंखलाओं को इसमें जोड़ा जाए?
एक टिस्का

11

मैं आपको सुझाव दूंगा और

  1. "अच्छा" महाद्वीप बनाने के बारे में सोचें।
  2. एक एल्गोरिथ्म लिखें जो एक बुरे से एक अच्छा महाद्वीपीय लेआउट बता सकता है।
  3. एल्गोरिथ्म को परिष्कृत करें ताकि आप यह निर्धारित कर सकें कि एक अच्छा लेआउट कितना अच्छा है।

एक बार जब आपके पास जगह हो जाती है, तो आप एक एल्गोरिथ्म को लागू करना शुरू कर सकते हैं, जिसे इस तरह आकार देना चाहिए:

  • गंदे महाद्वीपों को पैदा करें और फिर उन्हें सुधारें।

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


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

1
@FerretallicA दृढ़ता से असहमत हैं। ग्राफिक्स के साथ, स्क्रीन पर कुछ, कुछ भी प्राप्त करके शुरू करना बहुत उपयोगी हो सकता है । तब आपका राइट ब्रेन कुछ काम करना शुरू कर सकता है।
लूज़र ने

11

मैंने सभ्यता के एक स्वचालित स्क्रीनसेवर-शैली वाले क्लोन के लिए जो कुछ किया है, उसके समान कुछ लिखा है। रिकॉर्ड के लिए मैंने इसे VB.net में लिखा था, लेकिन चूंकि आप अपने प्रश्न में भाषा या मंच के बारे में कुछ भी उल्लेख नहीं करते हैं यह अमूर्त है।

"मानचित्र" महाद्वीपों की संख्या को निर्दिष्ट करता है, महाद्वीप आकार भिन्नता (जैसे 1.0 सभी महाद्वीपों को एक ही अनुमानित भूमि क्षेत्र के साथ रखेगा, 0.1 से नीचे महाद्वीपों को 1/10 वें सबसे बड़े महाद्वीप के द्रव्यमान के साथ मौजूद करने की अनुमति देगा), अधिकतम भूमि क्षेत्र (एक प्रतिशत के रूप में) उत्पन्न करने के लिए, और केंद्रीय भूमि पूर्वाग्रह। केंद्रीय महाद्वीप के अनुसार नक्शे के केंद्र की ओर भारित एक "बीज" को नक्शे के केंद्र के चारों ओर बेतरतीब ढंग से वितरित किया जाता है (उदाहरण के लिए, एक निम्न पूर्वाग्रह पृथ्वी के समान वितरित महाद्वीपों का उत्पादन करता है, जहां एक उच्च केंद्रीय पूर्वाग्रह और अधिक समान होगा। पैंजिया)। फिर वृद्धि के प्रत्येक पुनरावृत्ति के लिए, "बीज" एक अधिकतम एल्गोरिथ्म तक एक वितरण एल्गोरिथ्म (उस पर बाद में) के अनुसार भूमि टाइल प्रदान करते हैं।

भूमि वितरण एल्गोरिथ्म जितना संभव हो उतना सटीक हो सकता है, लेकिन मुझे विभिन्न आनुवंशिक एल्गोरिदम को लागू करने और पासा को लुढ़काने वाले अधिक दिलचस्प परिणाम मिले। कॉनवे का "गेम ऑफ लाइफ" वास्तव में शुरू करने के लिए आसान है। आपको एक दूसरे में बढ़ रहे महाद्वीपों जैसी चीजों से बचने के लिए विश्व स्तर पर जागरूक तर्क जोड़ने की आवश्यकता होगी, लेकिन अधिकांश भाग के लिए चीजें खुद का ख्याल रखती हैं। जो समस्या मुझे अधिक भग्न-आधारित दृष्टिकोणों के साथ मिली (जो कि मेरा पहला झुकाव था) वह परिणाम था जो या तो बहुत अधिक पैटर्न वाला दिखता था, या बहुत अधिक परिदृश्यों को जन्म देता है, जिसके परिणामस्वरूप हैकी-वर्किंग नियमों की आवश्यकता होती है ताकि परिणाम प्राप्त हो सके जो अभी भी पर्याप्त गतिशील नहीं लग रहा था। आपके द्वारा उपयोग किए जाने वाले एल्गोरिदम के आधार पर, आप प्रचुर मात्रा में एकल-वर्ग महासागर टाइल और चेकरलाइन जैसी चीजों को समाप्त करने के लिए परिणाम पर "धुंधला" पास लागू करना चाह सकते हैं। इस घटना में जैसे कोई महाद्वीप कई अन्य लोगों से घिरा हुआ है और बढ़ने के लिए कहीं नहीं बचा है, बीज को नक्शे पर एक नए बिंदु पर स्थानांतरित कर देता है और विकास पास जारी रखता है। हां, इसका मतलब यह हो सकता है कि आप कभी-कभी नियोजित की तुलना में अधिक महाद्वीपों के साथ समाप्त हो सकते हैं, लेकिन अगर यह वास्तव में ऐसा कुछ है जो आप दृढ़ता से नहीं चाहते हैं, तो इससे बचने में मदद करने का एक और तरीका विकास एल्गोरिदम पूर्वाग्रह है, इसलिए वे कम से कम निकटता के साथ दिशा में विकास का पक्ष लेते हैं बीज। सबसे कम (वैसे भी मेरी राय में), आप एक श्रृंखला को अमान्य के रूप में चिह्नित कर सकते हैं जब एक बीज एक नया नक्शा बनाने और उत्पन्न करने के लिए कहीं नहीं बचा है। बस यह सुनिश्चित करें कि आप अधिक से अधिक संख्या में प्रयास करें ताकि यदि कुछ भी अवास्तविक हो तो निर्दिष्ट हो (जैसे 10x10 बोर्ड पर 50 सम-विषम महाद्वीपों को फिट करना) यह हमेशा के लिए एक वैध समाधान खोजने की कोशिश में खर्च नहीं करता है।

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


11

मैंने जावास्क्रिप्ट में आपकी पहली छवि के समान कुछ बनाया है। यह सुपर परिष्कृत नहीं है, लेकिन यह काम करता है:

http://jsfiddle.net/AyexeM/zMZ9y/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<style type="text/css">
    #stage{
        font-family: Courier New, monospace;
    }
    span{
        display: none;
    }
    .tile{
        float:left;
        height:10px;
        width:10px;
    }
    .water{
        background-color: #55F;
    }
    .earth{
        background-color: #273;
    }
</style>
</head>

<body>


<div id="stage">

</div>

<script type="text/javascript">

var tileArray = new Array();
var probabilityModifier = 0;
var mapWidth=135;
var mapheight=65;
var tileSize=10;

var landMassAmount=2; // scale of 1 to 5
var landMassSize=3; // scale of 1 to 5


$('#stage').css('width',(mapWidth*tileSize)+'px');


for (var i = 0; i < mapWidth*mapheight; i++) {

    var probability = 0;
    var probabilityModifier = 0;

    if (i<(mapWidth*2)||i%mapWidth<2||i%mapWidth>(mapWidth-3)||i>(mapWidth*mapheight)-((mapWidth*2)+1)){

        // make the edges of the map water
        probability=0;
    }
    else {

        probability = 15 + landMassAmount;

        if (i>(mapWidth*2)+2){

            // Conform the tile upwards and to the left to its surroundings 
            var conformity =
                (tileArray[i-mapWidth-1]==(tileArray[i-(mapWidth*2)-1]))+
                (tileArray[i-mapWidth-1]==(tileArray[i-mapWidth]))+
                (tileArray[i-mapWidth-1]==(tileArray[i-1]))+
                (tileArray[i-mapWidth-1]==(tileArray[i-mapWidth-2]));

            if (conformity<2)
            {
                tileArray[i-mapWidth-1]=!tileArray[i-mapWidth-1];
            }
        }

        // get the probability of what type of tile this would be based on its surroundings 
        probabilityModifier = (tileArray[i-1]+tileArray[i-mapWidth]+tileArray[i-mapWidth+1])*(19+(landMassSize*1.4));
    }

    rndm=(Math.random()*101);
    tileArray[i]=(rndm<(probability+probabilityModifier));

}

for (var i = 0; i < tileArray.length; i++) {
    if (tileArray[i]){
        $('#stage').append('<div class="tile earth '+i+'"> </div>');
    }
    else{
        $('#stage').append('<div class="tile water '+i+'"> </div>');
    }
}

</script>

</body>
</html>

3
बहुत सुंदर कार्यान्वयन, मुझे पसंद है।
nathanchere

धन्यवाद भाई !! यह बहुत ही हल्का और अच्छा है
लिबर्टीवेंट

9

बहुभुज नक्शा पीढ़ी लेख कदम नक्शा पीढ़ी Voronoi बहुभुज unsing द्वारा कदम का वर्णन।

यह आदमी सभी सोर्स कोड भी देता है। यह Flash (ActionScript 3 / ECMAScript) है, लेकिन किसी भी अन्य ऑब्जेक्ट ओरिएंटेड भाषा के लिए ट्रांसफ़ॉर्मेट है

या टेराजे जैसे कुछ भग्न एनवायरनमेंट सॉफ्टवेयर्स में लागू एल्गोरिदम का उपयोग करने का प्रयास करें


5

यहाँ कफ से हटकर सोचें:

कुछ शुरुआती बिंदु चुनें, और प्रत्येक को बेतरतीब ढंग से तैयार (आकार के लिए आशा) असाइन करें। यदि आप चाहें तो आप नियोजित महाद्वीपों और नियोजित द्वीपों के लिए एक अलग आकार आकर्षित बना सकते हैं।

भूमि तत्वों पर लूप, और जहां वे अभी तक नियोजित आकार में नहीं हैं, एक वर्ग को जोड़ते हैं। लेकिन मज़े की बात यह है कि प्रत्येक पड़ोसी तत्व एक ही होगा। कुछ सुझाई गई बातें जो इसमें कारक हो सकती हैं:

  1. निकटतम "अन्य" भूमि की दूरी। आगे बेहतर व्यापक समुद्री स्थान उत्पन्न करता है। पास बेहतर है संकीर्ण चैनल बनाता है। आपको तय करना होगा कि आप बिट्स को भी मर्ज करने जा रहे हैं या नहीं।
  2. बीज से दूरी। निकटवर्ती बेहतर साधन है कॉम्पैक्ट भूमि द्रव्यमान, दूर बेहतर है लंबे समय तक बाहर बिट्स का मतलब है
  3. आस-पास मौजूदा भूमि वर्गों की संख्या। कई आसन्न चौकों के पक्ष में भार आपको चिकनी तट देता है, कुछ को प्राथमिकता देता है आपको बहुत सारे इनलेट्स और प्रायद्वीप देता है।
  4. पास में "संसाधनों" वर्गों की उपस्थिति? खेल के नियमों पर निर्भर करता है, जब आप संसाधन वर्ग उत्पन्न करते हैं, और यदि आप इसे आसान बनाना चाहते हैं।
  5. क्या आप डंडों से संपर्क करने या जुड़ने की अनुमति देंगे?
  6. ??? और नहीं जानते

तब तक जारी रखें जब तक कि सभी भूमि जनता नियोजित आकार तक नहीं पहुंच जाती या किसी कारण से आगे नहीं बढ़ सकती।

ध्यान दें कि इन वज़निंग कारकों के पैरामीटर को डिडलिंग करने से आप उस तरह की दुनिया को तैयार कर सकते हैं, जो एक ऐसी विशेषता है जिसे मैंने कुछ Civs के बारे में पसंद किया है।

इस तरह आपको प्रत्येक बिट पर अलग-अलग इलाके बनाने की आवश्यकता होगी।


4

आप ऊंचाई के नक्शे की तरह कुछ उत्पन्न करने के लिए एक डायमंड स्क्वायर एल्गोरिदम या पेर्लिन शोर की कोशिश कर सकते हैं। फिर, मानचित्र पर दिखाए जाने वाले मानों को मान असाइन करें। यदि आपकी "ऊंचाई" 0 से 100 तक जाती है, तो 0 - 20 पानी, 20 - 30 समुद्र तट, 30 - 80 घास, 80 - 100 पहाड़ बनाएं। मुझे लगता है कि नॉट ने मिनिक्राफ्ट में कुछ ऐसा ही किया है, लेकिन मैं एक विशेषज्ञ नहीं हूं, मैं बस काम करने के बाद हीरे की वर्ग मानसिकता में हूं।


3

मुझे लगता है कि आप यहां "गतिशील प्रोग्रामिंग" शैली दृष्टिकोण का उपयोग कर सकते हैं।

छोटी समस्याओं को पहले हल करें और बड़ी समस्या को हल करने के लिए स्मार्ट तरीके से समाधानों को मिलाएं।

A1= [elliptical rectangular random ... ]// list of continents with area A1 approx. 
A2= [elliptical rectangular random ... ]// list of continents with area A2 approx.
A3= [elliptical rectangular random ... ]// list of continents with area A3 approx.
...
An= [elliptical rectangular random ... ]// list of continents with area An approx.

// note that elliptical is approximately elliptical in shape and same for the other shapes.

Choose one/more randomly from each of the lists (An).

Now you have control over number and area of continents.

You can use genetic algorithm for positioning them 
as you see "fit" ;)

कुछ "ग्राफ लेआउट एल्गोरिदम" पर एक नज़र रखना बहुत अच्छा होगा

आप अपने उद्देश्य के अनुरूप इन्हें संशोधित कर सकते हैं।


3

मुझे टेक्टोनिक प्लेटों के उत्तर के समान मानचित्र निर्माण का विचार था। यह कुछ इस प्रकार रहा:

  1. ग्रिड वर्गों के माध्यम से स्वीप करें यदि प्रत्येक वर्ग "भूमि" वर्ग दे तो rnd <= 0.292 (पृथ्वी पर शुष्क भूमि का वास्तविक प्रतिशत)।
  2. प्रत्येक भूमि को अपने निकटतम बड़े पड़ोसी की ओर एक वर्ग को स्थानांतरित करें। यदि पड़ोसी समान हैं, तो बड़े चंक की ओर जाएं। यदि विखंडू समान आकार हैं, तो एक यादृच्छिक रूप से चुनें।
  3. यदि दो भूमि वर्ग स्पर्श करते हैं, तो उन्हें एक समूह में बदल दें, सभी वर्गों को अब से एक के रूप में स्थानांतरित करें।
  4. चरण 2 से दोहराएँ। जब सभी विखंडू जुड़े हों तो रोकें।

यह एक 3 डी अंतरिक्ष में गुरुत्वाकर्षण कैसे काम करता है, इसके समान है। यह बहुत जटिल है। आपकी आवश्यकताओं के लिए एक सरल एल्गोरिथ्म निम्नानुसार काम करेगा:

  1. एक दूसरे से यादृच्छिक x, y स्थिति और स्वीकार्य दूरी पर n स्टार्टर भूमि वर्गों में छोड़ें। ये आपके महाद्वीपों के लिए बीज हैं। (यह सुनिश्चित करने के लिए पाइथागोरस प्रमेय का उपयोग करें कि बीज अपने और अन्य सभी के बीच न्यूनतम दूरी तय करें।)
  2. किसी मौजूदा भूमि वर्ग से एक भूमि वर्ग को एक यादृच्छिक दिशा में रखें, यदि वह दिशा एक महासागर वर्ग है।
  3. दोहराएँ चरण 2. बंद करो जब भूमि वर्ग कुल नक्शा आकार का 30% भरते हैं।
  4. यदि महाद्वीप एक दूसरे के काफी करीब हैं, तो पनामा प्रकार के प्रभाव का अनुकरण करने के लिए भूमि पुलों में छोड़ दें।
  5. अधिक प्राकृतिक लुक के लिए छोटे, यादृच्छिक द्वीपों में ड्रॉप करें।
  6. प्रत्येक अतिरिक्त "द्वीप" वर्ग के लिए, आप अंतर्देशीय समुद्रों और झील वर्गों को काटते हुए महाद्वीपों से रिवर्स में एक ही एल्गोरिदम का उपयोग करते हैं। यह वांछित मात्रा में भूमि का प्रतिशत बनाए रखेगा।

मुझे पता है कि यह कैसे काम करता है। मैंने खुद इसे कभी आजमाया नहीं है।

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


2

मैंने वास्तव में यह कोशिश नहीं की है, लेकिन यह टेक्टोनिक प्लेटों के बारे में डेविड जॉनस्टोन के जवाब से प्रेरित था। मैंने अपने पुराने Civ प्रोजेक्ट में खुद इसे लागू करने की कोशिश की और जब टकराव से निपटने की बात आई तो मेरे पास एक और विचार था। सीधे टाइल बनाने के बजाय, प्रत्येक महाद्वीप में नोड्स होते हैं। प्रत्येक नोड के लिए द्रव्यमान को वितरित करें फिर 2 डी मेटाबॉल दृष्टिकोण का उपयोग करके "बूँद" महाद्वीपों की एक श्रृंखला उत्पन्न करें। टेक्टोनिक्स और महाद्वीपीय बहाव को केवल नोड्स के चारों ओर ले जाकर "नकली" करना आसान होगा। आप कितना जटिल जाना चाहते हैं, इसके आधार पर, आप नोड मूवमेंट को हैंडल करने के लिए धाराओं जैसी चीजों को भी लागू कर सकते हैं और पर्वत श्रृंखलाएं उत्पन्न कर सकते हैं जो प्लेट बाउंड ओवरलैपिंग के अनुरूप हैं। संभवतः चीजों के गेमप्ले पक्ष में इतना नहीं जोड़ा जाएगा,

मेटाबॉल की एक अच्छी व्याख्या यदि आपने पहले उनके साथ काम नहीं किया है:

http://www.gamedev.net/page/resources/_//feature/fprogramming/exploring-metaballs-and-isosurfaces-in-2d-r2556


2

यहाँ मैं क्या सोच रहा हूँ, चूंकि मैं कुछ इस तरह से लागू करने वाला हूं, जो मुझे विकास में एक खेल के लिए है। :

दुनिया क्षेत्रों में विभाजित है। दुनिया के आकार के आधार पर, यह निर्धारित करेगा कि कितने क्षेत्र हैं। इस उदाहरण के लिए, हम 6 क्षेत्रों के साथ एक मध्यम आकार की दुनिया मान लेंगे। प्रत्येक ग्रिड ज़ोन 9 ग्रिड ज़ोन में टूट जाता है। उन ग्रिड क्षेत्रों में से प्रत्येक में 9 ग्रिड टूट जाते हैं। (यह चरित्र आंदोलन के लिए नहीं है, लेकिन केवल मानचित्र निर्माण के लिए है) ग्रिड बायोम के लिए हैं, ग्रिड ज़ोन आर्चिंग भूमि सुविधाओं के लिए हैं, (महाद्वीप बनाम महासागर) और क्षेत्र समग्र जलवायु के लिए हैं। ग्रिड टाइल में टूट जाते हैं।

बेतरतीब ढंग से उत्पन्न, क्षेत्रों को तार्किक जलवायु सेट मिलते हैं। उदाहरण के लिए, ग्रिड जोन को बेतरतीब ढंग से सौंपा गया है; सागर या भूमि। ग्रिड अपने ग्रिड ज़ोन और जलवायु के आधार पर संशोधक के साथ यादृच्छिक रूप से बायोम प्राप्त करते हैं, ये वन, रेगिस्तान, मैदान, हिमनद, दलदल या ज्वालामुखी हैं। एक बार जब उन सभी मूल बातें निर्दिष्ट की जाती हैं, तो टाइल सेट में भरने वाले यादृच्छिक प्रतिशत आधारित फ़ंक्शन का उपयोग करके, उन्हें एक साथ मिश्रण करने का समय है। उदाहरण के लिए; यदि आपके पास एक जंगल बायोम है, तो एक रेगिस्तान बायोम के बगल में, आपके पास एक एल्गोरिथ्म है जो संभावित हुड को कम करता है कि एक टाइल "फॉरेसी" होगी और बढ़ जाती है कि यह "वांछनीय" होगा। तो, उनके बीच लगभग आधे रास्ते, आप देखेंगे कि दो बायोम के संयोजन से मिश्रित प्रभाव को उनके बीच कुछ हद तक सुचारू रूप से प्रभावित किया जा सकता है। एक ग्रिड ज़ोन से दूसरे में संक्रमण शायद लॉजिक लैंडमास फॉर्मूलेशन का बीमा करने के लिए थोड़ा और काम करेगा। उदाहरण के लिए, एक ग्रिड ज़ोन से एक बायोम जो निकट से एक साधारण स्विचिंग प्रतिशत होने के बजाय दूसरे से बायोम को छूता है। उदाहरण के लिए, बायोम के केंद्र से बायोम के किनारे तक 50 टाइलें हैं, जिसका अर्थ है, किनारे से 50 यह अगले बायोम के केंद्र को छूता है। यह तार्किक रूप से एक बायोम से अगले तक 100% परिवर्तन छोड़ देगा। इसलिए जैसे ही टाइलें दो बायोम की सीमा के पास पहुँचती हैं, प्रतिशत लगभग 60% या इससे अधिक हो जाता है। मुझे लगता है, सीमा से बहुत दूर बायोमों को पार करने की संभावना देने के लिए नासमझ हो, लेकिन आप चाहते हैं कि सीमा कुछ हद तक मिश्रित हो। ग्रिड क्षेत्रों के लिए, प्रतिशत परिवर्तन अधिक स्पष्ट होगा। % के लगभग 60% से नीचे जाने के बजाय, यह केवल लगभग 80% तक गिर जाएगा। और फिर एक माध्यमिक जांच यह सुनिश्चित करने के लिए किया जाना चाहिए कि समुद्र के बगल में भूमि के बायोम के बीच में एक यादृच्छिक पानी की टाइल नहीं है, इसके लिए कुछ तर्क के बिना। तो, या तो, पानी की टाइल की व्याख्या करने के लिए एक चैनल बनाने के लिए उस पानी की टाइल को समुद्र के द्रव्यमान से कनेक्ट करें, या इसे पूरी तरह से हटा दें। एक जल आधारित बायोम में भूमि रॉक आउटक्रॉप्स और इस तरह का उपयोग करके समझाने में आसान है।

ओह, थोथा गूंगा, क्षमा करें।


सुनो! मैं कुछ शोध कर रहा था क्योंकि im एक नक्शा बनाने की कोशिश कर रहा था .. और मैं आपके द्वारा बताए गए वास्तव में लागू करने के बारे में था। जिज्ञासा से बस यह कैसे निकला?
विवियनलेगर

1

मैं फ्रैक्टल इलाके को कुछ लेआउट के अनुसार रखूँगा जो आप जानते हैं कि "काम करता है" (जैसे 2x2 ग्रिड, हीरा, आदि, कुछ घबराहट के साथ), लेकिन एक गाऊसी वितरण के साथ महाद्वीप केंद्रों के किनारों की ओर नीचे की ओर झाँकती है। पानी का स्तर कम रखें ताकि ज्यादातर किनारों के पास तक जमीन हो।

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