कोडिंग वास्तव में इतना कठिन नहीं है । कठिन हिस्सा कोड लिखना है जो समझ में आता है, पठनीय और समझने योग्य है। इसलिए मैं एक बेहतर डेवलपर प्राप्त करना चाहता हूं और कुछ ठोस वास्तुकला बनाना चाहता हूं।
इसलिए मैं वीडियो गेम में एनपीसी के लिए एक आर्किटेक्चर बनाना चाहता हूं । यह Starcraft की तरह एक रीयलटाइम रणनीति खेल है, साम्राज्यों की आयु, कमान और विजय, आदि। .. तो मैं NPCs के विभिन्न प्रकार होंगे। एक एनपीसी कई क्षमताओं इनमें से (विधि) के लिए हो सकते हैं: Build()
, Farm()
और Attack()
।
उदाहरण:
कार्यकर्ता कर सकते हैं Build()
और Farm()
योद्धा कर सकते हैं Attack()
नागरिक कर सकते हैं Build()
, Farm()
और Attack()
मछुआरे कर सकते हैं Farm()
औरAttack()
मुझे उम्मीद है कि अब तक सब कुछ स्पष्ट है।
इसलिए अब मेरे पास मेरे एनपीसी प्रकार और उनकी क्षमताएं हैं। लेकिन तकनीकी / प्रोग्राम पहलू पर आने देता है।
मेरे विभिन्न प्रकार के एनपीसी के लिए एक अच्छा प्रोग्रामेटिक आर्किटेक्चर क्या होगा?
ठीक है मैं एक आधार वर्ग हो सकता है। वास्तव में मुझे लगता है कि यह DRY सिद्धांत के साथ एक अच्छा तरीका है । इसलिए मेरे पास WalkTo(x,y)
मेरे आधार वर्ग की तरह विधियां हो सकती हैं क्योंकि प्रत्येक एनपीसी को स्थानांतरित करने में सक्षम होगा। लेकिन अब चलिए असली समस्या पर आते हैं। मैं अपनी क्षमताओं को कहां लागू करूं? (याद रखें: Build()
, Farm()
और Attack()
)
चूँकि क्षमताओं में एक ही तर्क समाहित होगा, इसलिए यह प्रत्येक एनपीसी (कार्यकर्ता, योद्धा, ..) के लिए लागू करने के लिए कष्टप्रद / डीआरवाई सिद्धांत को तोड़ देगा।
ठीक है मैं बेस क्लास के भीतर क्षमताओं को लागू कर सकता हूं । इस तर्क के कुछ प्रकार की आवश्यकता होगी सत्यापन अगर एक एनपीसी क्षमता एक्स उपयोग कर सकते हैं कि IsBuilder
, CanBuild
, .. मुझे लगता है कि यह स्पष्ट है कि मैं क्या व्यक्त करना चाहता हूँ।
लेकिन मैं इस विचार के साथ बहुत अच्छा महसूस नहीं करता। यह बहुत अधिक कार्यक्षमता के साथ एक फूला हुआ बेस क्लास लगता है ।
मैं प्रोग्रामिंग भाषा के रूप में C # का उपयोग करता हूं। इसलिए कई विरासत यहाँ एक विकल्प नहीं है। मीन्स: अतिरिक्त बेस क्लास जैसे Fisherman : Farmer, Attacker
काम नहीं करेंगे।