यह ठोस सॉफ्टवेयर डिजाइन बनाम हो रहा है?


17

हमारे द्वारा तैयार किए गए खेलों को पूरा करने के लिए हमारे हाथों में मुश्किल से ही समय के साथ, आप ठोस सॉफ्टवेयर वास्तुकला के बीच एक अच्छा संतुलन कैसे बना सकते हैं और इसे पूरा करने के लिए अच्छी प्रगति कर रहे हैं?

मेरी व्यक्तिगत चुनौती: एक ही समय में आज और प्रभावी दीर्घकालिक सोच के बारे में कैसे? इसके अलावा, जब आप ऐसा कर रहे हैं तो आप उसी तरह दोहराए जा सकने वाले पैटर्न का सहारा लेने के बजाय रास्ते में नई चीजों को सीखना चाहते हैं, जो आप पिछले 5 सालों से इस्तेमाल कर रहे हैं?

जवाबों:


20

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

मेरा आदर्श वाक्य: चीजों को पहले स्थान पर प्राप्त करें, लेकिन आप सामान्य ज्ञान का उपयोग करके यह पता लगा सकते हैं कि कौन से घटक दूसरों की तुलना में अधिक महत्वपूर्ण हैं और आपके समय सीमा के भीतर उन लोगों को अच्छी तरह से डिजाइन करते हैं। उदाहरण के लिए, यदि AI आपके खेल के लिए महत्वपूर्ण है, तो सुनिश्चित करें कि आप इसे बाद में आसानी से बढ़ा / बदल सकते हैं। या, यदि आप एक घटक लिखने जा रहे हैं जिसे आप हर खेल में उपयोग करेंगे, तो इसे पुन: प्रयोज्य के लिए डिज़ाइन करें। अपने समय को ट्रैक करें और डिजाइनिंग पर ध्यान न दें। एक डिज़ाइन-डेडलाइन सेट करें और उसके बाद, अपनी रिलीज़-डेडलाइन प्राप्त करने के लिए सब कुछ हैक करना शुरू करें। लेकिन सुनिश्चित करें कि आप उन बातों को सुधारने के लिए अगले गेम को शुरू करने से पहले कुछ बिंदुओं पर विचार करने / फिर से डिजाइन करने और बाद में गणना करने की आवश्यकता पर ध्यान दें, ताकि वे आपको वापस काटने के लिए न हों!

एक अच्छी सलाह: यदि आपको दो विकल्पों के बीच चयन करना है, तो विवरणों पर बहुत अधिक समय तक नहीं टिकें। ज्यादातर, कोई "अच्छा" या "बुरा" नहीं होता है। कुछ स्थितियों में, ए बेहतर होगा, कुछ में, बी होगा, और कुल मिलाकर, दोनों के बीच का अंतर हमेशा समय के लायक नहीं हो सकता है।

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


7
+1, अच्छी सलाह। अपने आप को कुख्यात विश्लेषण पक्षाघात द्वारा पकड़े न जाने दें क्योंकि यह आपको कहीं नहीं मिलता है। जबकि रिफ्लेक्टिंग पिछले दोषों को सीधा करने के लिए एक शक्तिशाली उपकरण है, इसलिए गलती करने से डरो मत।
माइकल क्लेमेंट

1
आह। विश्लेषण पक्षाघात । मेरा सबसे बड़ा दुश्मन! मुझे एक खेल का निर्माण करना चाहिए जहां विश्लेषण पक्षाघात एंड-बॉस के रूप में कार्य करता है। मैं सबसे पहले गेम-आर्किटेक्चर डिजाइन करके सबसे पहले शुरू करता हूं ... नूओ! एक तरफ मजाक: महान जवाब और अच्छी टिप्पणी!
बुमज़ैक

12

लोग भविष्य की भविष्यवाणी करने में भयानक हैं। यह खेलों के लिए विशेष रूप से सच है, जहां आवश्यकताओं को दैनिक आधार पर बदल सकते हैं।

नामक एक सिद्धांत है YAGNI , उर्फ ​​"यू आर गॉन नीड इट", जो मूल रूप से कहता है कि आपको तब तक कुछ लागू नहीं करना चाहिए जब तक आप नहीं जानते कि आपको इसकी आवश्यकता है।

मैंने देखा है कि बहुत सी प्रणालियाँ वास्तुशिल्प कठोरता से ग्रस्त हो गई हैं जो वास्तव में इसका कोई उपयोग नहीं करती हैं क्योंकि लोगों को लगता है कि जिन सुविधाओं की उन्हें आवश्यकता थी वे कभी भी उपयोग किए जाने वाले नहीं थे।

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


8

यह आज मेरी मानसिकता में सच का मूल्यांकन करता है:

  • विचारधारा पर व्यावहारिकता
  • (१) इसे काम करें (२) फिर इसे सही बनायें - यदि आप चरण २ भूल जाते हैं तो खेल खत्म हो जायेगा
  • छोड़ दीजिए!
  • बहुत अधिक फ्रंट-फ्रंट डिज़ाइन समय की बर्बादी होगी
  • टीडीडी और क्लीन कोड अधिक सरल, अधिक स्थिर सॉफ़्टवेयर डिज़ाइन की ओर जाता है

क्या आप एक गेम सेटिंग में टेस्ट-संचालित विकास करने पर विस्तार से बता सकते हैं? कुछ बुनियादी तर्क के अलावा, मैंने इस तरह की चीज़ों के लिए कभी-कभी अत्यधिक इंटरैक्टिव कार्यक्रमों को बहुत अच्छी तरह से अनुकूल नहीं पाया है। इसके अलावा, आप
संवितरण

2
@ रानियरी यदि आप ग्राफिक्स हार्डवेयर और उपयोगकर्ता इनपुट के साथ इंटरफेस वाले भागों के बीच एक रेखा खींचते हैं, तो परीक्षण सीधा है।
जोनाथन फिशऑफ

@ रैनियर थैंक्स, लिंक तय किया। मैं मानता हूं कि इंटरेक्टिव सिमुलेशन या क्लाइंट-सर्वर गेम के लिए पहले परीक्षण करना मुश्किल हो सकता है। अपने यूनिट परीक्षणों के अलावा आप शायद कुछ उच्च स्तर की कार्यक्षमता परीक्षण और संभवतः प्लेबैक सत्र भी कर सकते हैं जो कुछ निश्चित अंतराल पर चलते हैं। किसी भी मामले में, पहले परीक्षणों के बारे में सोचने से कई परिदृश्यों में भुगतान करने की संभावना है। Gamedev.stackexchange.com/questions/1905/… पर
jmp97

5

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

Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
 Testing();
 LotOfFixing();
 PlayingWith(); 
 bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();

रैपिड प्रोटोटाइप के मेरे संस्करण में उचित प्रोटोटाइप क्रस्ट है:

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

लाभ:

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

यदि आप इसे अच्छी तरह से करते हैं तो आपके पास अंत में अपने उत्पाद का वास्तविक डिबग / लर्न संस्करण हो सकता है।
हम इसे अपने प्रोजेक्ट में इस्तेमाल कर रहे हैं और हम इससे खुश हैं।


1
यह बहुत अच्छी सलाह है, हालांकि मैं एक समय या किसी अन्य प्रकार के संसाधन को लूप पर बाध्य करने की सलाह दूंगा, जिसके बाद आप बस बाहर निकलते हैं (0) और दूसरे प्रोटोटाइप का प्रयास करें।

@Joe Wreschnig - समय की योजनाओं को AnalysingResults () में शामिल किया जा सकता है, लेकिन मुझे लगता है कि आप RapidPrototype का थोड़ी देर के लिए उपयोग कर सकते हैं और बाद में इसे समाप्त कर सकते हैं या इसे योजनाओं में डाल सकते हैं। बेहतर तो हमेशा के लिए इस पर अटक गया :)। रैपिडप्रोटोटाइप में आप कार्यक्षमता को भी अनुकरण कर सकते हैं। यह कई मायनों में उपयोगी है।
सांभर

1

चुस्त सॉफ्टवेयर विकास पर एक नजर है । हालांकि यह एक चांदी की गोली नहीं है, इसका उद्देश्य दोनों को करना है (इसे पूरा करें और ठोस सॉफ्टवेयर डिजाइन करें)।


2
मुझे नहीं लगता कि कोई भी विकास पद्धति है जो "इसे पूरा करने और एक ठोस सॉफ़्टवेयर डिज़ाइनर होने" का दावा नहीं करती है।

@ मुझे लगता है कि कई "हैवीवेट" तरीके ठोस सॉफ्टवेयर पर CYA को पसंद करते हैं। वास्तव में, मेरे गैर-फुर्तीले अनुभव में से बहुत कुछ "सही होने की आवश्यकता नहीं है, यह अभी होना चाहिए," जबकि "फुर्तीले" कहने का लक्ष्य है "इसे अभी होना चाहिए, लेकिन वह सब कुछ करें जो आप करते हैं सामान को सही बनाने के लिए जैसे आप साथ जाते हैं। "
डैश-टॉम-बैंग

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