जवाबों:
क्या आपने लॉयड के एल्गोरिथम की कोशिश की है ? प्रक्रिया बहुत सरल है, और काफी नियमित रूप से दिखने वाले क्षेत्रों को उत्पन्न करेगा (यह आपके द्वारा चलाए जाने वाले पुनरावृत्तियों पर निर्भर करता है)।
एक अच्छा दिखने वाला नक्शा बनाने के लिए आपको इसे बहुत लंबा नहीं चलाना पड़ेगा। इस उदाहरण के लिए केवल तीन पुनरावृत्तियों की आवश्यकता थी।
एक आसान तरीका है जिसे आप आज़मा सकते हैं।
n
हेक्स का चयन करें । प्रत्येक एक समूह शुरू करेगा।मैंने परीक्षण नहीं किया, लेकिन इससे द्वीप उत्पन्न होने चाहिए और कुछ हद तक लंबे पतले ब्रेसिज़ से बचना चाहिए। इसके अलावा, सबसे अधिक संभावना है कि पड़ोसी सीमाएं होंगी, लेकिन जरूरी नहीं कि हर एक दूसरे के संपर्क में होगा, घनत्व घनत्व के मूल्य पर निर्भर करेगा n
।
कुछ समूह दूसरों के लिए भी सीमित हो सकते हैं और 20 से कम आकार तक पहुंच सकते हैं, आप एक-दूसरे की न्यूनतम दूरी पर स्टार्टर हेक्स को जगाने के द्वारा बढ़ी हुई जगह को आश्वस्त कर सकते हैं।
परीक्षण और आवश्यकतानुसार टहनी।
इसके अलावा, इस समस्या से संबंधित नहीं है, लेकिन बहुत, हेक्स के साथ काम करने के लिए बहुत उपयोगी है, इस पृष्ठ पर जाएं: http://www.redblobgames.com/grids/hexagons/#basics
यह एक ही स्थान पर हेक्स जानकारी की एक पूरी गुच्छा एकत्र करता है। एक अच्छा दृश्य।
मुझे निश्चित रूप से लगता है कि कुछ प्रकार की ग्राफ संरचना यह संभव बना देगी। मूल रूप से दो हेक्स नोड्स के बीच एक बढ़त बनाते हैं यदि वे पूरे मानचित्र को अनुकरण करने के लिए एक दूसरे के बगल में हों। हालाँकि, मुझे यकीन नहीं है कि उस नक्शे में "देश" बनाने के लिए सटीक एल्गोरिदम है। बात यह है कि आप किस तरह से देश को "देखना" चाहते हैं, इसके आधार पर आपको अलग-अलग एल्गोरिदम की आवश्यकता होगी।
मेरे सिर के ऊपर से, मैं एक बिंदु चुनने और वहाँ से बाहर जाने की सलाह दूंगा, जो आपके "बढ़ते देश" के भीतर एक यादृच्छिक टाइल उठाता है जिसमें एक निकटवर्ती टाइल है जो देश का हिस्सा नहीं है।
एक रणनीति पैटर्न का उपयोग एल्गोरिदम को बदलने के लिए किया जा सकता है जो इस बात पर निर्भर करता है कि आप किस प्रकार का देश चाहते हैं। http://en.wikipedia.org/wiki/Strategy_pattern यानी क्या आप एक पतली तटरेखा जैसा देश चाहते हैं? या आप कुछ ऐसा चाहते हैं जो अधिक गोल और सम्मिलित हो?
ग्राफ़ के गुण भी आपको "देश" के रूप में देखने के लिए जो चाहते हैं उसे ट्विक करने की अनुमति दे सकते हैं: http://en.wikipedia.org/wiki/Eccentricity_(graph_theory)
एक बड़ा देश चाहते हैं? ग्राफ गुणों को ट्वीक करें और उत्पन्न देश (जो कि सिर्फ एक ग्राफ है) को उन गुणों के लिए बाध्य करें जो इसे "लुक" देंगे जो आप चाहते हैं।
अंतिम लेकिन कम से कम, देशों के बीच सीमाओं को परिभाषित करने के लिए रेखांकन भी बहुत उपयोगी होगा। यदि आप एक दूसरे देश की सीमा पर एक ग्राफ का निर्माण कर सकते हैं जिसका दो नोड्स के बीच संबंध है। यह आपके खेल में कुछ प्रकार के विभाजन के लिए उपयोगी हो सकता है और आपको विकास में संभवतः कुछ और चीजों को अनुकूलित करने की अनुमति देगा।
एक छोटा नोट: आप कहते हैं 'विभिन्न आकारों के समान आकार के देशों के साथ एक वास्तविक जीवन मानचित्र जैसा दिखता है), लेकिन' असली 'देश कुछ क्षेत्रों के आकार में भी बहुत भिन्न होते हैं - यहां तक कि यूरोप के' बड़े 'देश बेहद भिन्न हो सकते हैं, उदाहरण के लिए फ्रांस इटली से दोगुना बड़ा है। उस के साथ, स्पष्ट रूप से गेमप्ले क्षेत्र हैं जो आकार देने की कोशिश करते हैं और आकार लगभग समान रखते हैं - बस इस बात से अवगत रहें कि यहाँ थोड़ा बदलाव शायद एक अच्छी बात है!
समस्या के लिए मेरा प्रारंभिक दृष्टिकोण आपके क्षेत्रों के 'विकसित' ('बढ़ने' के बजाय) होगा:
अब, जब तक आप चाहें, तब तक निम्नलिखित सूडोकोड चलाएं:
Pick a random hex A from the boundary list;
Pick a random neighbor B of this hex from a different country;
if (A's country has more hexes than B's country has) {
change hex A to belong to B's country;
} else if (B's country has more hexes than A's country has) {
change hex B to belong to A's country;
} else {
flip a coin to decide which to change;
}
if ( the changed hex's old country has become disconnected ) {
undo and reject this move;
} else {
update the boundary list around the changed hex and its neighbors;
}
यह किसी भी दो पड़ोसी देशों के आकार के बीच एक मोटा संतुलन बनाए रखेगा, और 'डिस्कनेक्ट' किया गया चेक (जो एक साधारण बाढ़-भराव एल्गोरिथ्म के साथ किया जा सकता है) सुनिश्चित करता है कि कोई भी देश कभी भी टुकड़ों में नहीं टूटता। सीमा सूची को अद्यतन करना एक निरंतर समय का संचालन है - बदली हुई हेक्स स्पष्ट रूप से हमेशा सीमा पर रहेगी, और आप सिर्फ इसके छह पड़ोसियों की जांच कर सकते हैं कि क्या उनमें से कोई भी एक सीमा सेल बन गया है (क्योंकि इसका पड़ोसी अब अंदर है एक अलग देश) या एक बाउंड्री सेल होना बंद हो गया (क्योंकि उसके पड़ोसी अब उसी देश में हैं), सीमा सेट को आवश्यकतानुसार संशोधित करना।
इस दृष्टिकोण के परिशोधन के लिए, आप ऐसी स्थिति भी बना सकते हैं, जिसमें हेक्स को थोड़ा यादृच्छिक रूप से बदलना है - दोनों देशों को हमेशा 'संतुलित' करने के बजाय, आप हमेशा एक निश्चित संभावना के साथ स्वैप कर सकते हैं, और यहां तक कि धीरे-धीरे इस संभावना को कम कर सकते हैं समय (एक नकली एनालाइजिंग एल्गोरिथ्म में शीतलन प्रक्रिया के समान ) उन्हें समान आकार के लिए मजबूर करने के लिए शुरू करने के लिए।
ध्यान दें कि यह गारंटी नहीं देगा कि सभी क्षेत्र बिल्कुल एक ही आकार के हैं (जो कि असंभव है जब तक कि एन अपने ग्रिड आकार को पूरी तरह से विभाजित नहीं करता है), और यह भी गारंटी नहीं देगा कि सभी देश क्षेत्र में एक दूसरे के एक हेक्स के भीतर हैं; इसकी गारंटी होनी चाहिए (पर्याप्त पुनरावृत्तियों के लिए) कि प्रत्येक देश अपने निकटतम पड़ोसियों की तुलना में बड़ा या छोटा एक से अधिक नहीं है, हालांकि।