आप कितना सही होना चाहते हैं? एक अच्छा लेकिन जटिल विकल्प उस सभी इतिहास का अनुकरण करेगा:
- इन क्षेत्रों के बीच एक यादृच्छिक क्षेत्र सूची और आसन्न उत्पन्न करें।
- जनसंख्या, जुझारूपन, तकनीक ... जैसी विशेषताओं के साथ यादृच्छिक सभ्यताएँ बनाएँ और क्षेत्रों को आबाद करें।
- सभ्यता के लक्षणों के आधार पर परिणामों का निर्धारण करते हुए, इतिहास के कई वर्षों तक का अनुकरण करें।
उदाहरण: दो आसन्न जुझारू सभ्यताओं में एक दूसरे पर युद्ध शुरू करने की संभावना अधिक है, जो समय के साथ कम आबादी की ओर ले जाती है। व्यापारी सभ्यताओं के पास उच्च संसाधन हैं, लेकिन आक्रमणों के लिए एक महान लक्ष्य हैं। अत्यधिक आबादी वाले तेजी से बढ़ेंगे लेकिन भूख की संभावना भी अधिक होगी। सांस्कृतिक रूप से विषम civs में आंतरिक युद्ध (जिससे ब्रेकअप हो सकता है) की संभावना कम होती है ... और इसी तरह ... नतीजों से सभ्यता की विशेषताओं में भी बदलाव आएगा: उच्च प्रौद्योगिकी से बेहतर व्यापार, मजबूत हथियार आदि बनते हैं।
यह कुछ प्रक्रियात्मक कहानी कहने के लिए भी अनुमति देता है: आप न केवल एक क्षेत्र आरेख का उत्पादन कर सकते हैं, बल्कि समय के माध्यम से इतिहास के पाठ्य विवरण भी। आप इस प्रणाली को जितना चाहें उतना जटिल बना सकते हैं।
EDIT: यहां चुनौती एक तकनीकी नहीं है, लेकिन यथार्थवादी और दिलचस्प इतिहास पीढ़ी के लिए विशेषताओं को समायोजित करना है। करीब से देखें और 3 उपरोक्त बिंदुओं के बारे में सोचें ... यह आपकी तकनीकी व्याख्या है! इसे एक लूप में अनुवाद करें (प्रत्येक पुनरावृत्ति जितना चाहें उतना समय का प्रतिनिधित्व कर सकता है, 1 वर्ष, आधा वर्ष, 1 महीना ...) और यही वह है। आपको इनवर्टर (डेटा संरचनाएं, आंकड़े) पर काम करना होगा और इसे अपनी विशिष्ट समस्या और आवश्यकताओं के अनुकूल बनाना होगा। यह कठिन हिस्सा है यहां और कोई भी आपकी मदद नहीं कर सकता, क्योंकि यह कल्पना, परीक्षण और त्रुटि के बारे में है।
इस समस्या के लिए कोई भी आम डेटा संरचना नहीं हैं इसके अलावा आप लगभग किसी भी समस्या के लिए उपयोग करेंगे: सूचियां, कतारें, पेड़ ... और ये आपके विशिष्ट कार्यान्वयन के लिए बंधे होंगे (क्या मुझे एक वंशावली वृक्ष की आवश्यकता है? सभ्यताओं की सूची? युद्ध में? प्रत्येक नागरिक के लिए कार्यों की एक कतार?) बेशक आपको सभ्यताओं की एक सूची भी चाहिए। विकल्प स्पष्ट और बहुत सामान्य ज्ञान हैं।
सिमुलेशन मौका / संभावना का मामला है और आप इसे यादृच्छिक संख्याओं के साथ एक हजार अलग-अलग तरीके से बना सकते हैं। किसी भी अन्य खेल के बारे में सोचें जहां सिमुलेशन फुटबॉल प्रबंधकों, आरपीजी (सब के बाद, हिटप्वाइंट्स / आँकड़े सिर्फ मुकाबला सिमुलेशन है ), रणनीति के खेल की तरह शामिल है ... यह सिर्फ विशेषताओं है (इसलिए आपको सभ्यता विशेषताओं और डेटा को संग्रहीत करने के लिए एक तरीके की आवश्यकता होगी) और यादृच्छिक परिणाम सांख्यिकीय रूप से उन पर आधारित होते हैं (इसलिए आपको इन विशेषताओं के आधार पर सिमुलेशन स्थिति को यादृच्छिक रूप से बदलना होगा।)
यह आपके एल्गोरिथ्म का सार है: उत्तराधिकारियों को समायोजित करने के लिए कठिन: प्रत्येक सभ्यता के लिए सिमुलेशन की शुरुआत में विशेषताओं को कैसे वितरित किया जाए और उनके आधार पर सिमुलेशन राज्य को सांख्यिकीय रूप से कैसे बदला जाए।
संक्षेप में: आपका एल्गोरिथ्म सिर्फ एक लूप है जिसमें किसी भी वांछित वृद्धि के साथ नकली समय है। कम वेतन वृद्धि ऐतिहासिक ऐतिहासिक सिमुलेशन को जन्म देती है, लेकिन स्पष्ट रूप से अधिक समय लगेगा। अपने पाश के अंदर (लगभग) जैसे बस्तियों का एक गुच्छा होगा:
for each civilization
if civ.isAtWar
civ.population -= civ.population * 0.05;
civ.wealth -= 1000.0;
civ.belligerence += 1.0;
if civ.population < 100
civ.negotiatePeace()
यह सब काम करने के बाद (या यदि आप डेटा स्टोर नहीं करना चाहते हैं) तो आपको सभी सिमुलेशन स्टेट को मानव-पठनीय प्रारूप जैसे पाठ, चित्र या आप जो भी चाहते हैं, उसकी व्याख्या करनी होगी। यह परीक्षण और त्रुटि है और आपके कार्यान्वयन के लिए बहुत विशिष्ट है।
आपके प्रश्न के लिए विशिष्ट: अपने प्रश्न में एक आरेख उत्पन्न करने के लिए, आपको विश्व क्षेत्रों को ट्रैक करना होगा (आरेख के ऊपर, एक्स अक्ष, यह बिंदु 1 है: मेरे उत्तर में क्षेत्र सूची बनाएं) और उनकी सभ्यताएं (रंगों में) आरेख, बिंदु 2 ) समय के माध्यम से (y अक्ष, बिंदु 3 में अनुकार लूप ।)
राज्य की मशीनेंव्यापक विषयों का अनुकरण करने में काफी अच्छे हैं (ऊपर कोड नमूना एक हार्ड-कोडेड स्टेट मशीन का एक अनुमान है) - इसलिए आप एक साधारण राज्य मशीन फ्रेमवर्क को लागू करके शुरू कर सकते हैं जो समग्र रूप से ट्वीक करना आसान है। प्रत्येक सभ्यता इन राज्य मशीनों में से एक के साथ शुरू होगी और सिमुलेशन प्रत्येक मोड़ के लिए प्रत्येक राज्य मशीन चलाएगा। प्रत्येक राज्य मशीन को अन्य राज्य मशीन के साथ बातचीत करने में सक्षम होने की आवश्यकता होगी: उदाहरण के लिए युद्ध शुरू करने से दूसरे नागरिक की राज्य मशीन पर प्रभाव पड़ेगा, संभवतः उनके आंतरिक राज्य के आधार पर अलग-अलग परिणामों के साथ - जैसे यदि वे 'अकाल' राज्य में हैं तो वे संभवतः शांति पर बातचीत करना चाहते हैं, लेकिन एक सभ्यता 'मुसीबत की तलाश में' प्रतिशोध की संभावना होगी। मशीन के प्रत्येक राज्य का सभ्यता पर सार्थक प्रभाव होगा ' प्रत्येक 'फ्रेम' (धन, जुझारूपन, आबादी, आदि) के दौरान ऊपर उल्लिखित मैट्रिक्स। सबसे महत्वपूर्ण बात यह है कि आपको हर फ्रेम पर राज्यों को बदलने की ज़रूरत नहीं है - बस जब अवसर और / या यादृच्छिक मौका उत्पन्न होता है: यह लंबे समय तक होने वाली घटनाओं (जैसे युद्ध) को होने देता है।