मान लें कि आप का एक hexmap है n
कुल में कोशिकाओं, और p
खिलाड़ियों, जहां p <= n
, सबसे अच्छा तरीका यह से निपटने के लिए करने के लिए के माध्यम से है राउंड-रोबिन वितरण के माध्यम से सेलुलर ऑटोमेटा (सीए)।
initialisation
बेतरतीब ढंग से (और / या कुछ या अन्य अनुमानी का उपयोग करके, जैसे मानचित्र केंद्र से दूरी) प्रत्येक खिलाड़ी के लिए एक प्रारंभिक सेल चुनें। चूंकि p <= n
, यह एक समस्या नहीं होनी चाहिए।
सेल्यूलर आटोमेटा
आपको अपने हेक्स कोशिकाओं के बीच पूर्ण कनेक्टिविटी की आवश्यकता होती है। मैं प्रति सेल 6-पड़ोसी सरणी का सुझाव दूंगा:
class Cell
{
//... other members...
Cell[6] neighbours = new Cell[6];
}
निश्चित आकार के सरणियों का उपयोग कोशिकाओं के बीच स्थलाकृतिक दिशाओं की अवधारणा को मौजूद करने की अनुमति देता है, जो एक सूची या वेक्टर नहीं होगा। मैं यह सलाह देता हूं, क्योंकि इससे कुछ नेविगेशन ऑप्स आसान हो सकते हैं।
आप अपने हेक्समैप को 2 डी सरणी में भी रख सकते हैं, प्रति पंक्ति ऑफसेट के साथ। हालांकि यह प्रति कक्ष पड़ोसी सरणी को संग्रहीत करने की तुलना में थोड़ा कम सहज हो सकता है, केवल इसलिए कि हर दूसरी पंक्ति पर ज्यामितीय ऑफसेट हो।
सुनिश्चित करें कि हर सेल पड़ोसी से जुड़ी हर चीज से जुड़ा है। आप इस पंक्ति को पंक्ति द्वारा कर सकते हैं, सेल द्वारा सेल के रूप में आप पूर्ण हेक्समैप उत्पन्न करते हैं। पुनश्च यदि आप अंततः एक गैर-आयताकार रूप से बंधे हुए हेक्समैप चाहते हैं, तो आप केवल नकारात्मक कोशिकाओं को बनाने के लिए व्यक्तिगत कोशिकाओं और संदर्भों को हटा सकते हैं, जिससे आप एक कार्बनिक मानचित्र रूपरेखा तैयार कर सकते हैं।
गोल-रॉबिन वितरण
स्यूडोकोड:
count number of neutral cells in entire map, minus those starting cells taken by players
while neutral cells remain (or while true)
for each player
if player has not yet reached expected territory size in cells
for each cell already constituting this player's territory
if territory can grow by one cell into a neutral neighbour
grow into neighbour
reduce neutral cell count for entire map by one
if no more neutral cells remain in map
break out of outermost while loop immediately
else
continue to next player immediately
begin game
यह एल्गोरिथ्म प्रत्येक खिलाड़ी को एक राउंड रॉबिन फैशन में एक-एक करके अपने क्षेत्र को विकसित करने का मौका देगा, बशर्ते कि खिलाड़ी के क्षेत्र में अभी भी जगह बढ़ रही हो। यदि कुछ खिलाड़ियों को आगे बढ़ने से रोक दिया जाता है, तो इसके बावजूद एल्गोरिथ्म उन खिलाड़ियों के क्षेत्रों को विकसित करना जारी रखेगा, जिनके पास अभी भी वैध स्थान है। जैसे ही उनमें से कोई एक सीमा मारता है, आप प्रत्येक खिलाड़ी को समान संख्या में कोशिकाओं तक आसानी से सीमित कर सकते हैं, लेकिन यदि वांछित हो तो आपके लिए यह आसान होना चाहिए।
यह प्रत्येक खिलाड़ी के लिए अधिकतम आकार का "घरेलू क्षेत्र" प्रदान करेगा। यदि आप उस खिलाड़ी के लिए सेल काउंट कोटा पूरा करने के लिए, इसके अलावा "द्वीप" प्रदेश चाहते हैं, तो एक बार एक खिलाड़ी बढ़ने के लिए स्थानीय स्थान से बाहर चला जाता है, तो आप तटस्थ कोशिकाओं की सूची से एक नया स्टार्ट सेल चुन सकते हैं और वहां से उसी "वृद्धि" प्रक्रिया के साथ आगे बढ़ें। इस तरह, आप यादृच्छिक शोर के बजाय, प्रत्येक खिलाड़ी के लिए द्वीपों के सुसंगत सेटों के साथ समाप्त हो जाएंगे।