हार्ड-कोड सामग्री के लिए यह बुरा क्यों है?


41

मुझे पता है कि अधिकांश गेम फ़ाइलों को संवाद पाठ में संग्रहीत करते हैं, लेकिन मैंने कुछ पाठ-आधारित गेम भी देखे हैं जो वास्तव में गेम कोड में सामग्री (मानचित्र, विकल्प, संभव खिलाड़ी कमांड, कहानी पाठ) को प्रोग्राम करते हैं।

मैं कुछ कारणों के बारे में सोच सकता हूं, लेकिन क्या प्रमुख कारण है कि पाठ खेल भी कार्यक्रम के बाहर फाइलों में सब कुछ रखते हैं?

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

कुछ गेम कोड के अंदर ग्राफिक्स (ASCII कला?) भी रखते हैं। मुझे पता है कि यह सही नहीं है, और मैं कुछ कारणों का अनुमान लगा सकता हूं कि यह खराब क्यों है, लेकिन प्रमुख कारण या तो पता नहीं है।

कार्यक्रम के बाहर अधिकांश सामग्री रखना बहुत लोकप्रिय है। यहां तक ​​कि बौना किला वास्तविक ASCII वर्णों का उपयोग नहीं करता है, लेकिन ASCII वर्णों की छवियां मेमोरी में लोड की जाती हैं।

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


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

7
i18n स्रोत में एम्बेडेड सामग्री के साथ करना बहुत कठिन होगा।
22

5
ऐसा नहीं है कि यह खेल विकास विशिष्ट है। भविष्य में प्रोग्रामर एसई या स्टैकओवरफ़्लो पर पूछने पर विचार करें।
MichaelHouse

13
just making every unique dungeon (content) its own class.जिसने मुझे झकझोर कर रख दिया। तर्क से डेटा का पृथक्करण मेरे लिए एक ऐसा मूलभूत सिद्धांत है, मुझे आश्चर्य है कि अभी भी डेवलपर्स इसका उल्लंघन कर रहे हैं।
लिलिएनथाल

4
जो कुछ भी आप तय करते हैं, उसे महसूस करें कि हार्डकॉडिंग सामग्री बहुत अधिक विशेष मामलों की अनुमति देती है। एक निश्चित बॉस चाहते हैं जो केवल मध्यरात्रि और 7AM (वास्तविक समय) के बीच दिखाई दे? यह हार्डकोड करने के लिए बहुत आसान है कि राक्षसों के लिए एक सामान्य तरीका बनाने के बजाय केवल निश्चित समय पर दिखाई दे।
user253751

जवाबों:


85

उसके कई कारण हैं। मैं बस कुछ पर छूने वाला हूँ:

  1. यह आपके स्रोत कोड को गड़बड़ बनाता है। यदि आपके पास बहुत सारे संवाद (पेड़) हैं, तो आपके कोडबेस का एक बड़ा हिस्सा सिर्फ टेक्स्ट है जिसका आपके वास्तविक गेम कोड से कोई लेना-देना नहीं है।
  2. हर बार जब आप एक ही चरित्र के रूप में बदल जाते हैं, तो आपको पुनर्मूल्यांकन करने की आवश्यकता होगी।
  3. संवाद स्वयं नेविगेट करना कठिन है। मैं कल्पना करता हूं कि एक पूरे संवाद के पेड़ को लागू करने की कोशिश करूं, कई को अकेले छोड़ दें, पूरी तरह से आपके स्रोत के अंदर स्पेगेटी और नेस्टेड ifएस, switchतों और इतने पर एक नेस्टेड गड़बड़ हो जाएगी । जिसके बाद कोड में त्रुटि, पढ़ने में कठिन और डीबग करने में मुश्किल होती है।
  4. यदि आप लोगों को अपने गेम को मॉडिफाई या विस्तारित करने के लिए सक्षम करना चाहते हैं, तो यह बहुत आसान है यदि उन्हें कुछ बदलने के लिए सोर्स कोड से निपटने की आवश्यकता नहीं है।
  5. यदि आप किसी टीम में काम करते हैं तो उपरोक्त बिंदु और भी महत्वपूर्ण है। आप नहीं चाहते कि आपके लेखक को संवाद का एक टुकड़ा दर्ज करने के लिए कोड के साथ गड़बड़ करनी पड़े।
  6. यदि आप मौजूदा पुस्तकालयों का उपयोग करते हैं, तो XML या अन्य मानक फ़ाइल स्वरूपों को पार्स करना बहुत आसान है, इसलिए आपको बहुत सारे फायदे देते हुए और ऊपर बताई गई समस्याओं से बचने के लिए इसे लागू करने की लागत बहुत कम है।
  7. जैसा कि @MiloPrice ने नीचे बताया है, यदि आपका पाठ बाहरी फ़ाइलों में है तो खेल को स्थानीय बनाना भी आसान है। आप एक फ़ाइल जोड़कर एक भाषा जोड़ सकते हैं, आपकी टीम स्रोत को छूने के बिना अनुवाद का ध्यान रख सकती है (जो विशेष रूप से महत्वपूर्ण है यदि आप लोगों को अनुवाद करने देते हैं जो आपके सभी कोड को नहीं देखना चाहते हैं - फ्रीलांसरों से सोचें, लोग समुदाय जो आपकी टीम आदि से संबंधित नहीं है)।

10
मैं यह नहीं कहूंगा कि यह आपके कोड को गड़बड़ कर देगा। अन्यथा, सामग्री या नहीं, कुछ भी थोक में गड़बड़ माना जा सकता है। आप कोड की तरह एक अच्छी संरचना में सामग्री संरचना कर सकते हैं। लेकिन, बाकी बिंदु अभी भी मजबूत हैं।
ग्लेन स्वैन

28
स्थानीयकरण / अनुवाद में आसानी एक और बड़ा लाभ है।
मिलो पी

2
@ क्रिसियन: आपके पास एक डेटा-संचालित कार्यक्रम हो सकता है जहां डेटा प्रोग्राम में एक प्रारूप में एम्बेडेड होता है जहां यह सीधे प्रयोग करने योग्य स्थान पर होता है (जैसे सी या सी ++ में, बड़े, उम्मीद के constमुताबिक- स्थिर भंडारण अवधि के साथ सरणियाँ)। यह आपको सभी कोड, और रनटाइम मेमोरी लागत, रनटाइम पर एक बाहरी डेटा प्रतिनिधित्व को लोड / परिवर्तित करने से बचाता है। बेशक बाहरी डेटा रखने के लिए आपके अन्य सभी कारण अभी भी लागू होते हैं।
र ..

2
निजी तौर पर मैं यहाँ पर उतने ही कारणों के लिए और भी अधिक मजबूत दृष्टिकोण का पक्ष लेता हूँ: अपने अधिकांश कोड को स्क्रिप्टिंग भाषा में भी स्थानांतरित करें। C / C ++ में एक कोर बनाएँ, Python या Lua जैसी भाषा एम्बेड करें और इसके लिए एक API निर्यात करें। Don't Starveइस दृष्टिकोण का अनुसरण करता है और यह मेरे द्वारा देखे गए सबसे अच्छे लिखित खेलों में से एक है। अतीत और वर्तमान में कई अन्य खेल भी ऐसा करते हैं, साथ ही साथ अनुप्रयोगों (और शायद ही कभी उपयोगिताओं)। मैं कहूंगा कि कुल मिलाकर, छोटी परियोजनाओं और छोटे उपयोगिताओं के बाहर, भारी स्तर पर लेयरिंग और अलगाव हमेशा आपके मित्र हैं।
मेकलेनक्स


30

गेम कंटेंट डेटा को कोड में रखने का अर्थ है कि उस गेम कंटेंट डेटा के किसी भी संभावित परिवर्तन या पुनरावृत्ति को देखने के लिए, आपको गेम को फिर से खेलना होगा। यह दो कारणों से खराब है:

  • कई भाषाएं जो खेल लिखी जाती हैं, वे लंबे संकलन समय में होती हैं। C ++ विशेष रूप से इस संबंध में बहुत खराब हो सकता है, और C ++ बड़े वाणिज्यिक खेलों के लिए एक बहुत ही सामान्य भाषा है। यह सी # और जावा जैसी भाषाओं के साथ एक समस्या से कम है, लेकिन फिर भी उतनी तेजी से नहीं है कि बाहरी फ़ाइलों में गेम डेटा को स्टोर करने में सक्षम हो जो कि गर्म-पुनः लोड हो सकते हैं जबकि गेम वास्तव में बदलाव देखने के लिए चल रहा है।

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

मुझे लगता है कि आप पाठ या XML फ़ाइलों से डेटा लोड करने की जटिलता को कम कर रहे हैं। ज्यादातर समय आपको ऐसा करने के लिए एक पुस्तकालय का उपयोग करना चाहिए, जो कि XML / JSON / जो भी बहुत आसान है, को पार्स करने की प्रक्रिया करता है। हां, एक लेवल लोडिंग सिस्टम लिखने के लिए अप-फ्रंट कॉस्ट है जो कि डेटा-चालित है, लेकिन यह आमतौर पर प्रत्येक स्तर का प्रतिनिधित्व करने के लिए लंबे समय तक बनाम अद्वितीय कक्षाओं के लंबे समय में आपको बहुत समय बचाएगा ।

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

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


मुझे नहीं लगता कि संकलन का समय वास्तव में इतना महत्वपूर्ण है, लेकिन एक डेवलपर के रूप में हम हमेशा "नीट कोड" के लिए प्रयास करते हैं ... यह चीजों को अपने आप में अलग करने का एक बहुत अच्छा कारण है ... सामग्री को कोड नहीं होना चाहिए!
वार

4
Card ++ में वास्तव में महत्वपूर्ण समय है। मैंने ऐसे समाधानों के साथ काम किया है जिन्हें बनाने में 15 मिनट से अधिक समय लगा है, या तो परियोजना के आकार के कारण, टेम्पलेट्स का आक्रामक उपयोग या यहां तक ​​कि डेवलपर आलस्य (अनावश्यक हेडर सहित)। और मुझे यकीन है कि यह विशाल व्यावसायिक खेलों के मामले में है।
अवधारणा

1
@ concept3d: काश मेरी परियोजना 15 मिनट की होती। एक समर्पित बिल्ड सर्वर पर एक साफ बिल्ड ~ 50 मिनट लगते हैं।
मिंग डक

कम लोग जिनके पास स्रोत कोड तक पहुंच है, वे कम लोग जो मस्तिष्क क्षति से पीड़ित होंगे जो C ++ का कारण बनते हैं। : पी
सर्ज बोर्श

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

7

हमेशा की तरह, हमेशा की तरह, यह निर्भर करता है। लेकिन पहले, मैं यह तर्क देना चाहूंगा कि हार्ड कोडिंग अपने आप में खराब नहीं है।

मेरे पास कठिन कोडेड सामग्री है, विशेष रूप से संवाद पाठ, कुछ सरल खेलों में, और दुनिया समाप्त नहीं हुई। हम प्रोग्रामर को अमूर्त चीजें पसंद हैं, लेकिन याद रखें कि अमूर्तता की प्रत्येक परत आपके कार्यक्रम को और अधिक जटिल और समझने में अधिक कठिन बना देगी।

यदि आपका खेल काफी सरल है, तो आप इसमें कुछ सामग्री को हार्डकोड कर सकते हैं, तो मैं निश्चित रूप से इसे सादगी के लिए विचार करूंगा।

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

हालाँकि, प्रोग्राम और सामग्री के बीच की रेखा खींचना वास्तव में बहुत मामूली नहीं है। कोई कह सकता है कि बनावट 100% सामग्री है; लेकिन प्रक्रियात्मक रूप से उत्पन्न बनावट के बारे में क्या? संवाद पाठ को 100% सामग्री माना जा सकता है; लेकिन जब संवाद आपके पिछले कार्यों के आधार पर बदलता है तो क्या होगा? अन्य तत्व जिन्हें कोई भी कार्यक्रम का 100% हिस्सा मान सकता है, जैसे स्क्रिप्ट या शेडर्स, को भी खेल की सामग्री का हिस्सा माना जा सकता है। क्या उन्हें हार्डकोड किया जाना चाहिए? क्या उन्हें बाहरी संसाधन के रूप में लोड किया जाना चाहिए?

यद्यपि याद रखें, कि आपके खेल में आपके द्वारा समर्थित प्रत्येक प्रकार की सामग्री में एक लोडिंग और इंटरप्रिटिंग कोड होना चाहिए, इसलिए आमतौर पर, यदि संदेह है, तो मैं हार्ड कोडिंग सामग्री की सिफारिश करूंगा, और केवल जब आप इसे किसी बाहरी संसाधन पर ले जाऊं वास्तव में उस लचीलेपन की आवश्यकता होती है (जब आप सोचते हैं कि आप नहीं-आवश्यकता है, लेकिन जब आप वास्तव में करते हैं)

अंत में, संसाधन फ़ाइलों में डेटा संग्रहीत करने का एक फायदा यह है कि आप उन्हें केवल तभी लोड कर सकते हैं जब आपको उनकी आवश्यकता होती है (इसलिए संभवतः गेम लोड समय में तेजी लाते हैं), और उन्हें तब अनलोड करें जब आपको उनकी आवश्यकता न हो (इसलिए आपको अधिक सामग्री रखने की अनुमति देता है की तुलना में स्मृति में फिट हो सकते हैं)। (नाइटपिकर्स कॉर्नर: संसाधन DLL यकीनन बाहरी संसाधन माने जा सकते हैं)


7
"लेकिन याद रखें कि अमूर्तता की प्रत्येक परत आपके कार्यक्रम को और अधिक जटिल और समझने में अधिक कठिन बना देगी।" मुझे असहमत होना पड़ेगा, अमूर्तता एक कार्यक्रम को और अधिक सरल बना सकती है और निश्चित रूप से इसे समझना आसान बनाना चाहिए।
NPSF3000

1
@ NPSF3000 सार जटिलता जोड़ देगा , लेकिन जितना वे जोड़ते हैं उससे अधिक जटिलता को दूर कर सकते हैं।
user253751

2
@ मिनीबिस, इसलिए अमूर्त को लागू करने के बाद एक परियोजना की जटिलता का कुल योग पहले की तुलना में कम होना चाहिए।
NPSF3000

3
@ NPSF3000: मेरा कहना है कि आपको केवल इसलिए अमूर्तता नहीं बनानी चाहिए। कभी-कभी हार्डकोडिंग डेटा सरल, अधिक समझने योग्य और आसान होता है। अधिक बार नहीं, मैंने देखा है कि गेम सॉफ्टकोडिंग के लिए नीचे जाते हैं , जो मुझे खेदजनक लगता है। यह भी ध्यान रखें कि अमूर्त जोड़ना हमेशा उन्हें हटाने की तुलना में आसान होता है, इसलिए मैं केवल अमूर्तता को जोड़ने की दृढ़ वकालत करता हूं, जब उन्हें उनकी आवश्यकता होती है।
पांडा पाजामा

@PandaPajama कुछ 'सिर्फ इसलिए कि आप कर सकते हैं' एक समस्या पैदा करने की संभावना है, चाहे कुछ भी हो। इसका मतलब यह नहीं है कि कुछ स्वाभाविक रूप से जटिल है, जो मेरी चिंता का विषय था। इसके अलावा, क्या आपको लगता है कि अमूर्त जोड़ना उन्हें हटाने की तुलना में आसान है? मेरे सिर के ऊपर से मैं अन्यथा सोचूंगा - देर से अमूर्त जोड़ने का मतलब महत्वपूर्ण रीफ़ैक्टरिंग हो सकता है, लेकिन मैं तुरंत एक ऐसे मामले के बारे में नहीं सोच सकता जहां एक अनावश्यक अमूर्त निकालना जटिल होगा। एक्सएमएल से हार्डकोडेड स्ट्रिंग्स में बदलना तुच्छ होना चाहिए।
NPSF3000 10

3

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

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

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


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

3

तेजी से बदलाव लाने के लिए, यह टन से बड़े निर्माण पर विकास को गति देता है।

आपको सरल परिवर्तन करने के लिए स्रोत को संपादित करने और संपादित करने के तरीके सीखने के लिए सभी को सिखाने की आवश्यकता नहीं है। वास्तविक कोड से इसे खींचकर, अधिक लोगों को अपने साथ बेवकूफ बनाने का मौका मिलता है, यह पता लगाना आसान है कि आप किन विकल्पों के साथ खेल सकते हैं और आपके खेल के विभिन्न भागों को पूरा करने की पूरी प्रक्रिया में बहुत कम समय लगता है। यहां तक ​​कि प्रश्नोत्तर भी इसमें मदद कर सकता है।


3

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

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


3

मुझे लगता है कि एक महत्वपूर्ण वाक्यांश चिंताओं से अलग है

यदि आपके कोड में कोड के कम जटिल होने से पाठ शामिल नहीं है। कोड लिखने वाले प्रोग्रामर को विशिष्ट पाठ के बारे में सोचने की ज़रूरत नहीं है और कोड पर ध्यान केंद्रित कर सकते हैं।

उसे स्थानीयकरण के बारे में सोचने की जरूरत नहीं है। स्थानीयकरण करने वाले व्यक्ति को कोड के बारे में चिंता करने की आवश्यकता नहीं है।


3

मुझे लगता है कि 'मुरझाए-सफ़ेद' आदमी बनना बहुत आसान है और बाहरी टेक्स्ट रिसोर्स फ़ाइल का उपयोग करने की सलाह देते हैं।

क्यों? क्योंकि यहां एक विकल्प है जो प्रत्येक समाधान की लागत / मुद्दों / लाभों को संतुलित करने के बारे में है।

बाहरी फ़ाइल का उपयोग करते समय ... ठीक है, मुझे लगता है कि अन्य उत्तर लाभ को अच्छी तरह से समझाते हैं। लेकिन लागत के बारे में क्या? आपको एक वैध औपचारिकता को परिभाषित करना है, एक दुभाषिया का निर्माण करना है, एक फ़ाइल प्रारूप पर सहमत होना है, और इससे भी बदतर ... एक और अनुप्रयोग-संपादक का निर्माण करना है-। यदि आप एक बड़ी परियोजना के निर्माण में 50 कोडर टीम के सदस्य हैं, तो यह 0.00% समस्या है। लेकिन अगर तुम अकेले हो: तुम ठहरे हुए हो।

फिर से, मैं एक बाहरी संसाधन के विशाल लचीलेपन लाभों का अनुमान नहीं लगाता: डेटा-संचालित प्रोग्रामिंग मुझे वीडियो-गेम के लिए जाने का रास्ता लगता है। लेकिन लागत को नहीं भूलना चाहिए।

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

(स्थानीयकरण के बारे में टिप्पणी: यह सिर्फ एक हैश टेबल है, इसलिए यह एक स्वतंत्र और आसानी से हल करने योग्य मुद्दा है।)


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

1
सुनिश्चित करें: शायद मैं पर्याप्त स्पष्ट नहीं था, मेरा मतलब था कि यह केवल कुछ पुनरावृत्ति के बाद आप जानते हैं कि आपके संवादों का आकार क्या है (एक सीधी सीधी रेखा से एक जटिल पेड़ या राज्य मशीन तक)। पहले चरणों में कुछ (सबसे आसान) ifs + कुछ हार्ड कोडेड स्ट्रिंग ठीक imho हैं। फिर जब आप स्पष्ट रूप से अपनी जरूरतों को भूल सकते हैं, तो प्रत्येक समाधान की लागत / लाभों का मूल्यांकन करने के बाद, एक विकल्प बनाएं।
GameAlchemist

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

2

मुझे लगता है कि लाइसेंस भी सामग्री को कोड में शामिल नहीं करने का एक कारण हो सकता है।

उदाहरण के लिए,

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