क्यों MVC और TDD खेल वास्तुकला में अधिक कार्यरत नहीं हैं? [बन्द है]


155

मैं यह कहकर इसकी पुष्टि करूंगा कि मैंने खेल स्रोत की एक बड़ी मात्रा नहीं देखी है, और न ही खेल के तरीके में बहुत कुछ बनाया है।

लेकिन वेब ऐप में 'एंटरप्राइज' कोडिंग प्रथाओं को नियोजित करने की कोशिश से आने से, गेम सोर्स कोड को गंभीरता से देखने पर मेरे सिर में दर्द होता है: "यह लॉजिक लॉजिक को बिजनेस लॉजिक के साथ क्या कर रहा है? इसको रिफैक्ट करने की जरूरत है ... तो क्या यह रिफ्लेक्टर, रिफलेक्टर है? "

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

निम्नलिखित प्रोटोटाइप खेल पर एक महान लेख से एक उद्धरण है , हालांकि मेरे लिए यह बिल्कुल ऐसा लग रहा था कि उत्पादन गेम कोड लिखते समय कई खेल देवों का उपयोग करना प्रतीत होता है:

गलती # 4: एक प्रणाली का निर्माण, एक खेल नहीं है

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

एक सुरुचिपूर्ण गेम घटक प्रणाली न लिखें, संपादक को पूरी तरह से छोड़ दें और कोड में राज्य को हार्डविअर करें, डेटा-चालित, स्वयं-पार्सिंग, एक्सएमएल पागलपन, और बस शापित चीज़ को कोड करने से बचें।

... जितनी जल्दी हो सके स्क्रीन पर सामान प्राप्त करें।

और कभी नहीं, कभी भी, "यदि हम कुछ अतिरिक्त समय लेते हैं और सही तरीके से करते हैं, तो तर्क का उपयोग करें, हम इसे खेल में पुन: उपयोग कर सकते हैं"। कभी।

क्या यह इसलिए है क्योंकि खेल दृष्टिगत रूप से उन्मुख होते हैं इसलिए यह समझ में आता है कि कोड को दृश्य में बहुत अधिक भारित किया जाएगा, इस प्रकार सामानों को मॉडल / नियंत्रकों से बाहर ले जाने से कोई लाभ काफी कम होता है, इसलिए परेशान क्यों होते हैं?

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

TDD के बारे में एक ही बात। ऐसा अक्सर नहीं होता है कि मैं गेम को टेस्ट के मामलों में नियोजित करता हूं, लेकिन शायद यह ऊपर डिजाइन मुद्दों (मिश्रित दृश्य / व्यवसाय) और तथ्य यह है कि दृश्य घटकों, या घटकों का परीक्षण करना मुश्किल है, जो संभावित परिणामों पर भरोसा करते हैं (जैसे भौतिकी सिमुलेशन के भीतर काम करते हैं) )।

शायद मैं सिर्फ गलत स्रोत कोड देख रहा हूं, लेकिन हम गेम डिजाइन में नियोजित इन 'उद्यम' प्रथाओं को अधिक क्यों नहीं देखते हैं? क्या खेल वास्तव में उनकी आवश्यकताओं में बहुत भिन्न हैं, या एक लोगों / संस्कृति का मुद्दा है (यानी खेल देवता एक अलग पृष्ठभूमि से आते हैं और इस प्रकार अलग-अलग कोडिंग की आदतें हैं)?

जवाबों:


137

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

प्रोटोटाइप और पुनरावृति बहुत बेहतर काम करते हैं। अंत में, एक महान डिजाइन इससे बाहर आ सकता है, लेकिन अधिक बार कुछ और अधिक सरल और परिष्कृत इससे बाहर आता है। KISS और YAGNI दिमाग में आते हैं।

मेरा निजी तौर पर मानना ​​है कि संतुलन बनाने की जरूरत है। यदि आपके खेल का एक मुख्य मैकेनिक है, तो उस पर काम करें। आपको अभी भी इसे पुन: व्यवस्थित करने की आवश्यकता है, लेकिन आपको इसे परिष्कृत करने की आवश्यकता है। संकेत: आपके कोड का संगठन आपके खेल का एक मुख्य मैकेनिक नहीं है।

: बिंदु में प्रकरण Peggle , PopCap खेलों द्वारा। खेल का एक मुख्य मैकेनिक गेंद भौतिकी है। उन्होंने इसे पूरा किया! मुझे यकीन है कि उन्होंने यह सुनिश्चित करने में काफी समय बिताया कि यह बिल्कुल सही है, क्योंकि यह वही है जो खेल बनाता है। लेकिन एक ही समय में, मैं उनके खेल के शुरुआती प्रोटोटाइप को पूरी तरह से चित्रित कर सकता हूं जो कि शायद स्क्रीन पर फैलता है और कुछ प्रकार की अधिक आदिम टक्कर का पता लगाता है और उछलता है, बस यह देखने के लिए कि क्या खेल विचार मजेदार है। फिर एक बार उन्हें पता चला कि एक गेंद की शूटिंग और इसे उछालते हुए देखना वास्तव में मजेदार हो सकता है, उन्होंने गेंद की उछाल को परिष्कृत किया। (यह सब सिर्फ अटकलें हैं, बेशक)

यह आपकी तकनीकी आवश्यकताओं पर भी निर्भर करता है, जिसके लिए आपको जल्दी से नाखून काटना चाहिए (न कि आपके गेम डिज़ाइन, बस तकनीकी आवश्यकताओं को)। जिस प्लेटफ़ॉर्म पर आपका गेम चलता है, उसे बदलना नहीं चाहिए, या यदि उसे बदलने की अनुमति दी जानी चाहिए, तो आपको ठीक उसी सीमा तक जानने की आवश्यकता है कि आप उसे बदलने की अनुमति देने की योजना बनाते हैं, इससे अधिक और कम नहीं। उस पर डिजाइन। यदि आप OpenGL के लिए एक गेम विकसित कर रहे हैं, और आप DirectX की परवाह नहीं करते हैं, तो वास्तव में, इसके बारे में परवाह न करें। इसका मतलब है कि अगर आपके लिए प्रत्येक इकाई को खुद से खींचना अधिक सुविधाजनक है और फैक्ट्रियों और उस जैसे अन्य डिजाइन पैटर्न के बारे में चिंता न करें, तो ऐसा करें। यह ठीक है, क्योंकि यह आवश्यकताओं को पूरा करता है। आपको बाद में इसे बदलना नहीं चाहिए, इसके बावजूद कि आप खुद को क्या बताते हैं। और वास्तव में, सबसे खराब स्थिति? बाद में रिफलेक्टर।एक मंच पर एक काम कर रहे खेल हो रही है, भले ही इसका मतलब है कि यह एक साथ और स्वचालित रूप से अपने टोस्टर पर नहीं चल सकता है।

हालांकि, परीक्षण संचालित डिजाइन एक अधिक विचारशील विषय है। मेरा मानना ​​है कि गेम डेवलपर्स को इसका अधिक उपयोग करना चाहिए। मुझे यह भी लगता है कि गेम डेवलपर्स के पास कुछ सबसे कठोर, तंग शेड्यूल हैं, और उन्हें लगता है कि वे TDD पर समय बिताने का जोखिम नहीं उठा सकते हैं जब वे सिर्फ एक गेम प्राप्त करना चाहते हैं। इसके अलावा, फिर से प्रेरणा के साथ, टीडीडी बहुत धीमा है और आपको एक कामकाजी खेल बहुत कम देखने को मिलता है (शुरुआत में कम से कम)। यह प्रोग्रामर प्रेरणा पर गंभीर नकारात्मक प्रभाव डाल सकता है।

मुझे लगता है कि यह ज्ञान और अभ्यास का सिर्फ एक सामान्य अभाव है। मुझे नहीं लगता कि टीडीडी अन्य क्षेत्रों में भी प्रचलित है, लेकिन चुस्त विकास की तरह, मुझे लगता है कि यह फैल रहा है। आप कह सकते हैं कि यह अपने समय से आगे है (या शायद नहीं, क्योंकि मामला अभी से वर्षों का हो सकता है)। TDD से अधिक महत्वपूर्ण "RDD" है - आवश्यकताएँ प्रेरित विकास। मैंने वह कर दिखाया।आपका लक्ष्य क्या है? एक खेल बनाने के लिए। बाकी सब कुछ दूसरा आता है। यदि आप साबित कर सकते हैं कि टीडीडी उत्पादकता बढ़ाता है और टीमों को समय सीमा तक पहुंचने में मदद करता है, तो आपको नहीं लगता कि हर कोई इसका उपयोग कर रहा होगा? और शायद यही बात है। लेकिन अभी, हमारे उद्योग पहले से कहीं अधिक प्रतिस्पर्धी हैं, कठिन और जल्द ही समय सीमाएं हैं, और सामान को बस काम करने की आवश्यकता है। निर्माण श्रमिक पहले मचान का निर्माण नहीं करते हैं; वे एक नींव रखते हैं, फिर वे कुछ दीवारें और फर्श उठाते हैं, और उसके बाद ही वे विशिष्ट कार्यों को करने के लिए मचान के चुनिंदा बिट्स का निर्माण करते हैं जो मचान अधिक सुविधाजनक बनाते हैं। मुझे लगता है कि सॉफ्टवेयर विकास के लिए भी यही बात लागू होती है।

इतनी लंबी पोस्ट के लिए क्षमा करें। मुझे आशा है कि आपने इससे कुछ ज्ञान प्राप्त किया होगा। मैं सिर्फ एक छात्र हूं, मेरी टिप्पणियों के बारे में बात करता हूं, बहुत सीमित उद्योग अनुभव के साथ लेकिन उद्योग के विशेषज्ञों से बहुत कुछ पढ़ना है। तो नमक के एक दाने के साथ मेरे शब्दों को ले लो।

और हे, जो तुम सोचते हो वह काम करेगा। आप इसे हमेशा बदल सकते हैं या इसे स्क्रैप कर सकते हैं और शुरू कर सकते हैं। इंजीनियरिंग के किसी भी रूप के बारे में यह अच्छी बात है; अगर पहली बार में आप सफल नहीं होते हैं, तो कुछ अलग करने की कोशिश करें। (या ऐसा कुछ :-P) आप कंक्रीट नहीं डाल रहे हैं; सॉफ्टवेयर निंदनीय है।


वैसे, मैं इस प्रकार के प्रश्न पूछ रहा हूं और कुछ समय के लिए इन प्रकार के डिजाइन सिद्धांतों पर शोध कर रहा हूं। यहाँ कुछ प्रश्न हैं, यहाँ और स्टैक ओवरफ्लो में, जो आपको प्रासंगिक लग सकते हैं:


32

यहाँ कुछ समय पहले से SO पर एक समान प्रश्न का मेरा मूल उत्तर है , कम से कम आपके प्रश्न के MVC भाग के विषय में:

इसका इस्तेमाल शायद ही कभी खेलों में होता है। मुझे यह पता लगाने में थोड़ा समय लगा कि क्यों, लेकिन यहाँ मेरे विचार हैं:

एमवीसी दो अभ्यावेदन के बीच अंतर करने के लिए मौजूद है। मॉडल आपके डेटा का सार प्रतिनिधित्व है। यह है कि मशीन आपके आवेदन की स्थिति को कैसे देखती है। व्यू (और नियंत्रक) उस प्रणाली के एक अधिक ठोस दृश्यमान इंस्ट्रूमेंटेशन का प्रतिनिधित्व करते हैं जो मनुष्यों के लिए सार्थक है।

अधिकांश व्यावसायिक ऐप्स में, ये दोनों दुनिया बहुत अलग हैं। उदाहरण के लिए, एक स्प्रेडशीट का मॉडल केवल मूल्यों का 2 डी ग्रिड है। यह सोचने की ज़रूरत नहीं है कि कोशिकाएँ पिक्सेल में कितनी चौड़ी हैं, जहाँ स्क्रॉलबार्स आदि हैं, वहीं, स्प्रेडशीट दृश्य यह नहीं जानता कि सेल वैल्यू की गणना या संग्रह कैसे किया जाता है।

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

अंतिम परिणाम यह है कि किसी खेल में मॉडल और दृश्य के बीच की रेखा मनमानी होगी और सहायक नहीं होगी: आप उनके साथ बहुत सारे राज्य की नकल कर लेंगे।

इसके बजाय, खेल डोमेन की सीमाओं के साथ चीजों को कम करने के लिए करते हैं: एआई, भौतिकी, ऑडियो, रेंडरिंग, आदि को यथासंभव अलग रखा जाएगा।


20

क्योंकि MVC किसी गेम के आर्किटेक्चर में फिट नहीं होता है। एक गेम के लिए डेटाफ्लो पूरी तरह से एक एंट्रिप्रेस एप्लिकेशन से भिन्न होता है, क्योंकि यह इवेंट संचालित नहीं होता है और इन ऑपरेशनों को करने के लिए अक्सर (बहुत) तंग मिलीसेकंड बजट होता है। बहुत सारी चीजें हैं जो 16.6 मिलीसेकंड में होने की आवश्यकता होती है, इसलिए 'निश्चित' और कठोर डेटा पाइपलाइन होना अधिक फायदेमंद है जो उस समय स्क्रीन पर आपके द्वारा आवश्यक डेटा को संसाधित करता है।

इसके अलावा, जुदाई वहाँ है; अधिकांश समय यह MVC पैटर्न के समान नहीं है। एक रेंडरिंग इंजन (दृश्य), उपयोगकर्ता इनपुट हैंडलिंग (नियंत्रक) और बाकी गेमप्ले लॉजिक, एआई और भौतिकी (मॉडल) है। इसके बारे में सोचो; यदि आप उपयोगकर्ता इनपुट प्राप्त कर रहे हैं, तो एआई चला रहे हैं और प्रति सेकंड 60 बार छवि प्रदान कर रहे हैं, तो आपको मॉडल और देखने के बीच एक ऑब्जर्वर की आवश्यकता क्यों होगी, यह बताने के लिए कि क्या बदल गया है? मुझे यह कहते हुए व्याख्या न करें कि आपको खेलों में ऑब्जर्वर पैटर्न की आवश्यकता नहीं है, आप करते हैं, लेकिन इस मामले में आप वास्तव में नहीं करते हैं। आप वैसे भी हर काम कर रहे हैं, हर फ्रेम।

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

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

यह भी याद रखें कि कंसोल दुनिया में यह अभी भी अलग है, क्योंकि आप हार्डवेयर के लिए अधिक प्रोग्रामिंग कर रहे हैं और फिर किसी और चीज के लिए। यह आम तौर पर (PS2 / PS3) का अर्थ है कि डेटा का प्रवाह अधिक महत्वपूर्ण है और लगभग हर मामले में कोड का प्रवाह; प्रदर्शन के कारणों के कारण। जो ज्यादातर मामलों में एक वास्तु उपकरण के रूप में टीडीडी के उपयोग को कम करता है। अच्छा OOP कोड में आम तौर पर खराब डेटाफ्लो होता है, जिससे इसे वेक्टर करना और समानांतर बनाना मुश्किल हो जाता है।


13

क्यों MVC और TDD खेल वास्तुकला में अधिक कार्यरत नहीं हैं?

चेतावनी: आगे की राय।

MVC का उपयोग नहीं किया गया है (बहुत) क्योंकि:

  1. एमवीसी अपेक्षाकृत नया दृष्टिकोण है और खेल आमतौर पर पुराने कोड पर बनाए जाते हैं। MVC ऐप बनाने वाले ज्यादातर लोग हर बार कुछ न कुछ बना रहे हैं। (मुझे पता है कि MVC वास्तव में दशकों पुराना है; नया क्या है इसमें व्यापक रुचि है, जो अनिवार्य रूप से RoR जैसे वेब ऐप से आया है)। जिस बिजनेस सॉफ्टवेयर में मैंने काम किया, वह विरासत कोड पर आधारित था, वहां भी एमवीसी का कोई उपयोग नहीं था। यह एक संस्कृति की बात है, लेकिन यह खेल-विशिष्ट नहीं है।
  2. MVC अनिवार्य रूप से इवेंट-संचालित कार्यक्रमों के लिए एक GUI पैटर्न है। गेम्स न तो GUI-प्रभुत्व वाले हैं और न ही इवेंट-संचालित हैं, इसलिए यह प्रयोज्यता उतनी महान नहीं है जितनी कि वेब ऐप्स या अन्य फॉर्म-आधारित एप्लिकेशन के लिए। MVC आमतौर पर कुछ प्रसिद्ध भूमिकाओं के साथ ऑब्जर्वर पैटर्न है, और खेल में अक्सर कुछ दिलचस्प देखने के लिए इंतजार करने की लक्जरी नहीं होती है - उन्हें हर फ्रेम (या उस पर कुछ भिन्नता) को अपडेट करना होगा चाहे किसी ने कुछ भी क्लिक किया हो या नहीं ।

यह कहना है कि खेल MVC से बहुत कुछ नहीं सीख सकते हैं। मैं हमेशा कोशिश करता हूं कि मैं जो गेम बनाता हूं उसमें मॉडल को देखने से अलग कर दूं। दृश्य और नियंत्रक के पारंपरिक विचार एक ही (विजेट) ऑब्जेक्ट के 2 भाग होते हैं, हालांकि वास्तव में काम नहीं करता है, इसलिए आपको इसके बारे में थोड़ा और सार होना चाहिए। मैं आपसे सहमत हूं कि प्रदर्शन यहां एक वास्तविक समस्या होने की संभावना नहीं है। अगर कुछ भी प्रदर्शन दृश्य सामग्री और तर्क सामान को अलग रखने से लाभान्वित हो सकता है क्योंकि कैश सुसंगतता, समानता, आदि के लिए अधिक उत्तरदायी है।

TDD का उपयोग नहीं किया जाता है (बहुत) क्योंकि:

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

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

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


9

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

आप जिस घटक मॉडल को देखते हैं, उदाहरण के लिए एकता कोड गेम कोड को व्यवस्थित करने का सबसे अच्छा तरीका है।


4

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

टीडीडी का उपयोग नहीं किया जाता है क्योंकि यह शायद ही कभी जाना जाता है कि एक गेम को कई बार प्रोटोटाइप पर पुनरावृति करने से पहले एक गेम "करना चाहिए" है। टीडीडी से अभ्यास, जैसे निरंतर परीक्षण या एकीकरण परीक्षण, अक्सर खेल के विकास में उपयोग किए जाते हैं।


3

गेम सिस्टम धीरे-धीरे बेहतर प्रथाओं पर आगे बढ़ रहे हैं। XNA जैसी रूपरेखाएँ डिज़ाइन या निष्पादन समय में बहुत अधिक ओवरहेड जोड़े बिना कोड को अधिक सामान्य / स्वच्छ बनाने में एक अंतर्दृष्टि प्रदान करती हैं। लेकिन सामान्य तौर पर मैं यह कहूंगा कि गेम सिस्टम सभी जटिलता जटिलता निष्पादन की गति के बारे में हैं, सभी एक तंग विकास कार्यक्रम पर रहने और प्रेरित रहने के दौरान। सॉफ्टवेयर इंजीनियरिंग अवधारणाओं और सिस्टम डिजाइन को लागू करना ऐसे वातावरण में # 1 प्राथमिकता नहीं है।

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

आमतौर पर जब तक आप अपना गेम समाप्त करते हैं, तब तक आपको अंतर्निहित मैकेनिक्स, कोर सिस्टम इत्यादि को बेहतर बनाने के लिए कम से कम 1000 विचार प्राप्त होते हैं, इस तरह से उस "पुनः प्रयोग करने योग्य" कोड के बहुत कम वास्तव में प्रयोग करने योग्य हो। दिन में मैं एक नियमित एसई नौकरी करता हूं, और जब हम जिन प्रणालियों पर काम करते हैं, वे बड़े पैमाने पर हो सकते हैं, सभी ईमानदारी से मुझे लगता है कि वे खेलों में जटिलता की तुलना में कम हैं।


2

इस तथ्य से बाहर एमवीसी की मेरी कोई खास राय नहीं है कि दृश्य को अक्सर इस तथ्य से अलग कर दिया जाता है कि रेंडर लूप किसी हार्डवेयर की प्रक्रिया के लिए सामान का एक गुच्छा पैकेजिंग कर रहा है और यह वह जगह नहीं है जहाँ आप चाहते हैं "खेल" तर्क "समवर्ती रूप से हो रहा है। "कंट्रोलर" को भी हार्डवेयर द्वारा अलग किया जाता है, लेकिन दुर्भाग्य से कई अगर अधिकांश गेम डेवलपर्स कंट्रोलर हैंडलर में "दिलचस्प" काम नहीं करते हैं। (IMO कंट्रोलर हैंडलर को बटन और स्टिक पढ़ना चाहिए और गेम को देखने के लिए "प्रेजेंटेशन" बनाना चाहिए, लेकिन मेरा साबुन बॉक्स उतना मजबूत नहीं है।)

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

टीडीडी को गले लगाने से वास्तव में प्रोग्रामिंग के लिए दृष्टिकोण बदल जाता है। टीडीडी पथ को शुरू करने से पहले मुझे कुछ एहसास था कि क्या सही है और क्या गलत है, लेकिन एक बार जब मैं दोनों पैरों से कूद गया तो मुझे वास्तव में बहुत कुछ समझ में आया कि मैं जो कुछ भी कर रहा था वह भविष्य के विकास में मदद कर रहा था या बाधा डाल रहा था। । वास्तव में, यह कोड के बिना कोड के पीछे के बिंदु की तरह है, टी के बिना टीडीडी

वापस क्यों इसका उपयोग खेलों में अधिक नहीं किया जाता है, कठिन होने से परे, यह लोगों को यह एहसास कराता है कि जिस तरह से उन्होंने हमेशा अतीत में किया है, वह अनावश्यक रूप से अपने स्वयं के काम को कठिन बना देता है, और प्रोग्रामर के लिए विशेष रूप से यह एक कड़वी गोली भी देखने के लिए है, बहुत कम निगल।

मुझे यकीन है कि जो लोग TDD को स्वीकार करने से इनकार करते हैं, वे बेहतर प्रोग्रामर नहीं बनना चाहते हैं। वे पहले से ही सोचते हैं कि वे प्रोग्रामिंग या डिज़ाइन या आर्किटेक्चर में "उत्कृष्ट" हैं, जब वास्तव में उनका कोड कुछ अलग तरह से कहता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.