मैं गेम संवाद फाइलों (प्लेयर और गैर-बजाने योग्य पात्रों के बीच बातचीत) से निपट रहा हूं जहां संवाद विकल्प और उनका परिणाम कुछ शर्तों पर निर्भर करता है और परिणामस्वरूप कुछ क्रियाएं होती हैं। अब, मैं पूर्व और बाद की स्थितियों को निर्दिष्ट करने के लिए किसी प्रकार की भाषा को संभालने के लिए एक सरल पार्सर लिख सकता हूं, लेकिन मेरा एक दोस्त एक्सएमएल का उपयोग करने का सुझाव देता है। एक संवाद तत्व के गुणों के रूप में स्थितियों को संग्रहीत किया जा सकता है और विकल्प और क्रियाएं आंतरिक तत्व हैं। मैं फिर इन शर्तों और बयानों को पार्स करने के लिए एक eval फ़ंक्शन का उपयोग करूंगा (मैं इस गेम को बनाने के लिए रूबी का उपयोग कर रहा हूं)। इस तरह के दृष्टिकोण को सरल बनाने के लिए, मैं बदसूरत एक्सएमएल के बारे में चिंता किए बिना इन फ़ाइलों को कुशल बनाने के लिए एक साधारण जीयूआई लिख सकता हूं।खेल एक्सएमएल फाइलों में तर्क
लेकिन यह मुझे एक्सएमएल फाइलों में तर्क को संभालने के लिए एक अजीब विकल्प के रूप में हमला करता है। मेरी समझ यह है कि एक्सएमएल फाइलें स्टोरेज और डेटा के आदान-प्रदान के लिए हैं, और मैं हमेशा इस बारे में रेंट पढ़ता हूं कि लोग किस तरह के लिए डिज़ाइन नहीं किए गए सभी प्रकार के लिए एक्सएमएल का उपयोग करते हैं। मेरे मित्र यह बताते हुए जवाब देते हैं कि एक्सएमटीएम और this bullet description language (जो कुछ तर्क दिखाता है) सहित सब कुछ के लिए XML का उपयोग कैसे किया जाता है।
ईमानदार होने के लिए, एक्सएमएल का उपयोग करके मेरे लिए बहुत सी चीजों को सरल बना दिया जाएगा। एक पार्सर लिखना दर्दनाक और समय लेने वाला हो सकता है, और मेरी आवश्यकताओं आमतौर पर सरल होती है। लेकिन क्या यह वाकई ठीक है या क्या मुझे बाद में इस तरह का विकल्प पछतावा होगा?
<dialogue id="101" condition="!npc.carsFixed">
<message>Man, fix my car!</message>
<choices>
<choice condition="hero.carFixingSkill > 5" priority="7" id="Sure!">
<command>hero.carFixingSkills += 1</command>
<command>npc.carFixed = true</command>
<command>hero.playSmokeAnimation()</command>
<command>nextDialogue = 104</command>
</choice>
<choice condition="hero.carFixingSkill <= 5" id="I can't...">
<command>nextDialogue = 105</command>
</choice>
<choice id="Fix it yourself">
<command>npc.likesHero -= 1</command>
</choice>
</choices>
</dialogue>
इसी कोड यदि रूबी में लिखा होगा::
def dialogue101
if !npc.carsFixed
showMessage("Man, fix my car!")
choices = []
if hero.carFixingSkill > 5
choices.push(Choice.new("Sure!", 7))
else
choices.push(Choice.new("I can't"))
end
choices.push(Choice.new("Fix it yourself"))
choices = selectTopPriority(choices) if choices.size > 4
result = showChoices(choices)
case result
when "Sure"
hero.carFixingSkills += 1
npc.carFixed = true
hero.playSmokeAnimation
dialogue104
when "I can't"
dialogue105
when "Fix it yourself"
npc.likesHero -= 1
end
end
end
सामग्री की तरह
विवरण में रुचि रखने वाले लोगों के लिए, यहाँ क्या एक बुनियादी बातचीत विनिमय एक XML फ़ाइल में नज़र आ सकते हैं पसंद हैरो और कारफिक्सिंग स्किल्स ज्ञान के टुकड़े खिलाड़ी हैं और एनपीसी हो सकते हैं, जो संभवतः वास्तविक कार्यान्वयन में हैश में संग्रहीत किया जाएगा। मुझे संवाद फ़ाइल दृष्टिकोण अधिक लचीला लगता है क्योंकि मैं संवाद और शर्तों/कार्यों को आसानी से संपादित करने के लिए एक संपादक बना सकता हूं, और गेम वार्तालाप पेड़ों की जटिल प्रकृति के कारण। रूबी या लुआ जैसी एक पटकथा भाषा मदद करता है, लेकिन इस तरह के पेड़ों के तर्क को संभालने के लिए जटिल संरचनाओं की आवश्यकता होगी।
मूल प्रश्न पर वापस एक्सएमएल नौकरी के लिए सही उपकरण है या क्या मुझे कुछ याद आ रही है?
स्रोत नियंत्रण के बारे में अच्छा बिंदु, मैंने इसके बारे में सोचा नहीं है। –