2008-12-16 12 views
21

मैं गेम संवाद फाइलों (प्लेयर और गैर-बजाने योग्य पात्रों के बीच बातचीत) से निपट रहा हूं जहां संवाद विकल्प और उनका परिणाम कुछ शर्तों पर निर्भर करता है और परिणामस्वरूप कुछ क्रियाएं होती हैं। अब, मैं पूर्व और बाद की स्थितियों को निर्दिष्ट करने के लिए किसी प्रकार की भाषा को संभालने के लिए एक सरल पार्सर लिख सकता हूं, लेकिन मेरा एक दोस्त एक्सएमएल का उपयोग करने का सुझाव देता है। एक संवाद तत्व के गुणों के रूप में स्थितियों को संग्रहीत किया जा सकता है और विकल्प और क्रियाएं आंतरिक तत्व हैं। मैं फिर इन शर्तों और बयानों को पार्स करने के लिए एक 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 फ़ाइल में नज़र आ सकते हैं पसंद हैरो और कारफिक्सिंग स्किल्स ज्ञान के टुकड़े खिलाड़ी हैं और एनपीसी हो सकते हैं, जो संभवतः वास्तविक कार्यान्वयन में हैश में संग्रहीत किया जाएगा। मुझे संवाद फ़ाइल दृष्टिकोण अधिक लचीला लगता है क्योंकि मैं संवाद और शर्तों/कार्यों को आसानी से संपादित करने के लिए एक संपादक बना सकता हूं, और गेम वार्तालाप पेड़ों की जटिल प्रकृति के कारण। रूबी या लुआ जैसी एक पटकथा भाषा मदद करता है, लेकिन इस तरह के पेड़ों के तर्क को संभालने के लिए जटिल संरचनाओं की आवश्यकता होगी।

मूल प्रश्न पर वापस एक्सएमएल नौकरी के लिए सही उपकरण है या क्या मुझे कुछ याद आ रही है?

उत्तर

8

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

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

+0

स्रोत नियंत्रण के बारे में अच्छा बिंदु, मैंने इसके बारे में सोचा नहीं है। –

1

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

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

+0

मैं इस परियोजना में आरईएक्सएमएल का उपयोग करता हूं, यह मेरी आवश्यकताओं के लिए पर्याप्त है। libxml (http://libxml.rubyforge.org/) एक अधिक कुशल विकल्प है जिसे मैं विचार कर सकता हूं। –

1

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

जब तक आप अपने एक्सएमएल फाइल अच्छी तरह से आयोजित (कागज पर फ़्लोचार्ट में मदद मिलेगी) आप कोई समस्या आने पर नहीं करना चाहिए, और यहां तक ​​कि यह :) पार्स करने

1

करने के दर्द के माध्यम से जाने के लिए अपने आप को धन्यवाद हो सकता है रखने के प्रेरणा प्राप्त करें, या यहां तक ​​कि गोद लेने के लिए, एआईएमएल और बडीस्क्रिप्ट पर एक नज़र डालें।एआईएमएल चैटबॉट्स के लिए एक्सएमएल है, बडीस्क्रिप्ट एक और संस्करण है - अब माइक्रोसॉफ्ट के स्वामित्व में है।

निम्नलिखित http://www.alicebot.org/aiml.html

<category> 
<pattern>WHAT ARE YOU</pattern> 
<template> 
    <think><set name="topic">Me</set></think> 
    I am the latest result in artificial intelligence, 
    which can reproduce the capabilities of the human brain 
    with greater speed and accuracy. 
</template> 

से AIML का एक नमूना है कि आप अपने खेल में AIML प्रौद्योगिकी (जो मुझे लगता है कि नि: शुल्क है) एकीकृत करने के लिए थे, तो है, अपने एनपीसी की है कि अपने खिलाड़ियों ऐ होता बात कर सकता था क्या यह दिलचस्प नहीं होगा?

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

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

+0

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

5

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

मैं पूरी तरह से एक डीएसएल, वाईएएमएल मानचित्र से परेशान नहीं होगा।

+1

मैंने वाईएएमएल का उपयोग किया है, और मैं पठनीयता के बारे में आपसे सहमत हूं। मैं पहले से ही अन्य डेटा फ़ाइलों के लिए एक्सएमएल का उपयोग करता हूं और मैं xml संवाद को पढ़ने और संपादित करने के लिए एक सरल संवाद संपादक बनाने की योजना बना रहा हूं, इसलिए मुझे नहीं लगता कि यह एक समस्या होगी। –

संबंधित मुद्दे