खेलों में एमवीसी जैसा कंपार्टमेंटलाइजेशन? [बन्द है]


19

मैं एक गेम के डिजाइन (कंप्यूटर के लिए एक बोर्डगेम का अनुवाद, विशेष रूप से, जो मुझे लगता है कि इस मामले में प्रासंगिक है) पर विचार कर रहा था और यह मेरे लिए हुआ कि यह 'गेम' को 'डिस्प्ले' से अलग बनाने के लिए समझ में आता है।

यह मुझे एक सरल पाठ इंटरफ़ेस के साथ जल्दी से कुछ प्रोटोटाइप करने की अनुमति देगा, और फिर बाद में इसे बहुत सुंदर बना देगा। यह मुझे खेल को अन्य मीडिया में अधिक आसानी से पोर्ट करने देगा।

क्या खेलों में इस तरह का कंपार्टमेंटलाइज़ेशन आम है? क्या मुझे चीजों को और नीचे तोड़ने की कोशिश करनी चाहिए? क्या ऐसी जटिलताएँ हैं जो मुझे याद आ रही हैं?

जवाबों:


7

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

http://cowboyprogramming.com/2007/01/05/evolve-your-heirachy/

http://gameprogrammingpatterns.com/component.html


MPS कम से कम एक संदर्भ के लिए FPSes को gamasutra.com/features/20050414/rouwe_01.shtml देखें ।
स्टोनमेटल

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

5

इस पर मेरी ले:

  • मॉडल जहां ज्यादातर डेटा झूठ है और सभी तर्क जगह लेता है।
    यह इनपुट घटनाओं की एक कतार पढ़ता है, और तदनुसार खेल की स्थिति को संशोधित करता है।
    फिर यह भौतिक विज्ञान और अन्य मुख्य घटकों की तरह सामान को संसाधित करता है जो गेम स्थिति को भी अपडेट करते हैं।
    लूप। बस इतना ही।
    मॉडल को स्वतंत्र बनाने के लिए लक्ष्य है: इसमें दृश्य या नियंत्रक सामग्री पर कोई निर्भरता नहीं है: आपको एक प्रोग्राम बनाने में सक्षम होना चाहिए जो केवल एक मॉडल चलाता है।
  • दृश्य बस, मॉडल के खेल राज्य पढ़ता स्क्रीन पर अपने स्वयं के डेटा का प्रतिनिधित्व करने के लिए समर्पित घटकों, और प्रदर्शन बातें अद्यतन करता है।
    यह कभी भी मॉडल पर कुछ भी नहीं लिखता है, यह केवल पढ़ने की प्रक्रिया है, सिवाय इसके कि शायद किसी इवेंट हैंडलर का पंजीकरण हो (जैसे "अरे मिस्टर मॉडल, जब आप उन दो वस्तुओं के बीच टकराव का पता लगाते हैं, तो कृपया मेरे ईवेंट हैंडलर को कॉल करें जो एक ध्वनि बजाता है!" ")।
  • नियंत्रक के इनपुट ईवेंट पकड़ता है और उन्हें मॉडल के इनपुट कतार में गुजरता है। यह दृश्य पढ़ता है (क्या यह बटन UI बटन पर होता है?)।

इस तरह आप एक फर्जी नियंत्रक को प्लग कर सकते हैं जो एक फाइल को पढ़ता है जिसमें पहले से दर्ज इनपुट इवेंट होते हैं।
एक सरल दृश्य भी बनाएं जो चीजों को केवल एक फाइल पर लॉग करता है।
परीक्षण और डिबगिंग के लिए बहुत उपयोगी है।

मॉडल को एक स्थिर दर (निश्चित समय कदम) पर अद्यतन करने के लिए याद रखें, और जितनी जल्दी हो सके दृश्य और नियंत्रक (लेकिन बहुत अधिक चर नहीं)।


0

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

आपके इंजन और आपके गेम के विशिष्ट ग्राफिक डेटा हालांकि व्यू, आपके गेमबॉक्‍स मॉडल के रूप में हो सकते हैं, और कंट्रोलर आपके इंजन को यह बताने के लिए जो भी गोंद का उपयोग करेगा वह आपके गैम्‍बोस्कोप में किस इकाई पर लागू होगा।


2
यह बिल्कुल सच नहीं है। MVC उपयोगकर्ता इंटरफ़ेस (दृश्य और नियंत्रक) से राज्य (मॉडल) को अलग करने को परिभाषित करता है। एक "इंजन" एक सामान्य ढांचा है जिस पर खेल बनाए जा सकते हैं, और इसमें मॉडल, दृश्य और नियंत्रक के लिए आधार तत्व शामिल हो सकते हैं।
माइकविट ने
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.