2008-09-26 12 views
11

मैं इस तरह के "Rollercoaster टाइकून" और "सिम्स" और एफपीएस खेल के रूप में अनुप्रयोगों के प्रदर्शन से रोमांचित हूँ। मैं बुनियादी अनुप्रयोग वास्तुकला के बारे में और जानना चाहता हूं। (यूआई से इतना चिंतित नहीं है - मुझे लगता है कि एमवीसी/एमवीपी पिरिसियल्स यहां लागू होते हैं। न ही मैं इस बिंदु पर गणित और भौतिकी से चिंतित हूं।)वास्तविक दुनिया सिमुलेशन कैसे डिज़ाइन किया गया है?

मेरा मुख्य प्रश्न अनुकरण में दसियों या सैकड़ों व्यक्तिगत वस्तुओं से संबंधित है (लोगों, वाहन, आइटम, आदि) है कि सभी कदम, निर्णय लेने और घटनाओं के लिए & प्रतिक्रिया बढ़ा - सभी एक ही समय प्रतीयमान, और कैसे वे इस तरह के अच्छे प्रदर्शन के लिए डिजाइन किए हैं।

प्रश्न: मुख्य रूप से, इन वस्तुओं को एक विशाल लूप में संसाधित किया जा रहा है, एक समय में - या प्रत्येक ऑब्जेक्ट अपने स्वयं के धागे में प्रसंस्करण कर रहा है? इस तरह के अनुकरण में कितने धागे व्यावहारिक हैं? (पाठ्यक्रम का बॉलपार्क आंकड़ा, 10, 100, 1000)

मैं एक गेम लिखना नहीं चाहता हूं, मुझे सिर्फ डिजाइन सिद्धांत चाहिए क्योंकि मैं सोच रहा हूं कि ऐसा डिज़ाइन अन्य अनुप्रयोगों पर लागू हो सकता है जहां कई निर्णय हो रहे हैं एक ही समय में प्रतीत होता है।

उत्तर

8

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

सिस्टम गतिशीलता पूरी तरह से अलग प्रणाली में एक इकाई की कोई प्रतिनिधित्व नहीं है है, यह केवल रकम और योग के साथ सौदों,। इसका सबसे आसान उदाहरण शिकारी और शिकार मॉडल है।

इनमें से

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

FSMs और Celular automata कैसे एक खेल में सिस्टम अनुकरण में अन्य तरीके हैं। जैसे एजेंट आधारित दृष्टिकोण में आप एक एजेंट के व्यवहार को एफएसएम के साथ मॉडल कर सकते हैं। Simcity कुछ सिमुलेशन काम करने के लिए सेलुलर ऑटोमाटा का इस्तेमाल किया।

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

+0

बिल्कुल सही! धन्यवाद! –

1

बहुत हाल तक, खेल के तर्क और प्रबंधन एक बड़ी परिमित राज्य मशीन में एकल थ्रेड में था। अब, हालांकि, आप खेल के विभिन्न टुकड़े (ऑडियो, ग्राफिक्स, भौतिकी, 'सिमुलेशन' तर्क, आदि) को अपने स्वयं के एफएसएम में धागे में विभाजित करते हैं।

संपादित करें: Btw, धागे अनुकरण 'एक ही समय' पर हो में बातें होने का एक बहुत बुरा तरीका है - यह स्थिति दौड़ के लिए ले जाता है। यह आम बात है कि जब आप 'एक ही समय' पर चीजें चलाना चाहते हैं, तो आप आसानी से पता लगाएंगे कि आपके डेटा पर फिर से चलने और इसे अलग से स्टोर करने की आवश्यकता क्या है, फिर सभी डेटा संसाधित होने के बाद इसे लागू करें। रंस, दोहराना।

+0

क्या प्रत्येक ऑब्जेक्ट अपने स्वयं के थ्रेड में एक ही समय में "राज्य" गुणों को सेट कर सकता है और फिर परिणामों के साथ एक मास्टर प्रोसेस सौदा कर सकता है। कोई घटना या दौड़ नहीं। लेकिन लूप प्रत्येक ऑब्जेक्ट को संसाधित करने के लिए लंबे समय तक इंतजार नहीं करता है ...? –

+1

आप इसे थ्रेडपूल या कुछ ऐसे कुशलतापूर्वक के माध्यम से कर सकते हैं, लेकिन मुझे पता चला है कि आपके डेटा को ब्लॉक में विभाजित करना बेहतर है और फिर इसके लिए हैंडलर थ्रेड करना, जैसा मैंने वर्णन किया है, एक बदलाव का निर्माण करना। –

+0

पूरी तरह से अपने उत्तर से असहमत हैं। यदि यह "विभिन्न धागे पर बिट्स के साथ एक वसा एफएसएम" जितना सरल था, तो हर कोई इस तरह के गेम जारी करेगा। इस oversimplified प्रतिक्रिया से इसके लिए और भी रास्ता है। क्या आपने कभी पहले एक गंभीर गेम खिताब पर काम किया है? –

0

@Cody Brocious

यह CodeProject इस अभ्यास का प्रदर्शन करने Linq का उपयोग करता है। (लिंक टू लाइफ)

+0

मैंने इस विधि को स्केलेबल के रूप में नहीं बताया था और इस तरह, इससे पहले कि मुझे एहसास हुआ कि यह केवल इसका कार्यान्वयन है - LINQ समझ की कमी की कमी;) अच्छा लिंक। –

+0

यह प्रतिक्रिया कोडी के पोस्ट पर एक टिप्पणी होनी चाहिए, न कि एक पोस्ट अपने अधिकार में। –

+0

यह प्रोजेक्ट बहुत ही आशाजनक दिखता है - धन्यवाद! –

0

पोस्ट किए गए सुझावों के अतिरिक्त मैं स्रोतforge पर सिमुलेशन टैग ब्राउज़ करने की अनुशंसा करता हूं। जटिलता के विभिन्न स्तरों पर सिमुलेशन प्रोजेक्ट की एक किस्म है।

Sourceforge

इसके अलावा, मैं एक बुनियादी अवलोकन के लिए निम्न पुस्तक की सलाह देते हैं, हालांकि यह भौतिक विज्ञान पर केंद्रित है यह अनुकरण के मुद्दों से संबंधित है।

Physics for Game Developers

+0

धन्यवाद! मैं इन दोनों स्रोतों की जांच करूंगा। –

4

मूल SimCity के लिए स्रोत कोड खुला Micropolis के रूप में sourced किया गया है। यह एक दिलचस्प अध्ययन हो सकता है।

संबंधित मुद्दे