मैं एक बिंदु और क्लिक शैली साहसिक खेल के लिए एक कमांड सिस्टम कैसे लागू कर सकता हूं?


11

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

एक बंदर द्वीप या पागल हवेली शैली इंटरफ़ेस, क्रिया के एक पैलेट, और दृश्य में और सूची में वस्तुओं के साथ मान लें। इन पर क्लिक करते हुए, आप निष्पादित करने के लिए एक वाक्य बनाते हैं।

उदाहरण के लिए, आप look at"पेड़ को देखो" या एक सेब पर क्लिक करने के लिए एक पेड़ पर क्लिक कर सकते हैं give, और फिर "लड़की को सेब दें" पाने के लिए एक लड़की पर क्लिक करें ।

एक वाक्य के तीन संभावित रूप हैं:

  • verb, उदाहरण के लिए "सहेजें"
  • verb noun, उदाहरण के लिए "सेब उठाओ", "ऑक्टोपस को देखो"
  • verb noun noun, उदाहरण के लिए "खरगोश कुत्ते को अचार दें", "अचार के जार के साथ क्रॉबर का उपयोग करें"

विभिन्न स्थितियों में, मैं चाहता हूं कि कार्रवाई को विभिन्न वस्तुओं द्वारा परिभाषित किया जाए।

उदाहरण के लिए, giveक्रिया के लिए, एक डिफ़ॉल्ट कार्रवाई परिभाषित हो सकती है जो चरित्र को कुछ ऐसा कहती है जैसे "मैं उस पर लटकना पसंद करूंगा", या पागल कुत्ता एक ऐसी कार्रवाई को परिभाषित कर सकता है जहां वह कुछ भी खाती है जो आप उसे देने का प्रयास करते हैं। ।

यदि इंटरफ़ेस Maniac Mansion की तरह काम करने के लिए है, तो आप वाक्य का निर्माण करते हैं, और फिर इसे निष्पादित करने के लिए कहते हैं (Maniac Mansion में, या तो वाक्य पर क्लिक करके, या आपके द्वारा क्लिक की गई अंतिम चीज़ पर फिर से क्लिक करके)।

यदि यह मंकी आइलैंड की तरह काम करता है, तो सजा पूरी होते ही क्रियान्वित हो जाती है, जो क्रियाओं के लिए एक समस्या बन जाती है जैसे useकभी-कभी एक संज्ञा, और अन्य दो बार ले सकते हैं।

तो आप ऐसी प्रणाली को कैसे लागू करेंगे जो इसे संभालती है?


1
क्रिया के तीन प्रकार प्रतीत होते हैं, एक प्रकार शून्य संज्ञा के लिए, दूसरा दो के लिए, आदि। वे वस्तु के समान वर्ग नहीं हैं। आप "अचार के साथ ऑक्टोपस को नहीं देख सकते हैं" इसलिए lookएक एकल संज्ञा क्रिया है, आदि
tenpn

जवाबों:


10

यदि आप चयन क्रम को उलटते हैं तो आपको इसका उपयोग करना आसान हो सकता है। तो उपयोगकर्ता एक संज्ञा पर क्लिक करता है और फिर खेल क्रियाओं के सेट को प्रदर्शित करता है जो उस संज्ञा पर किया जा सकता है। यदि क्रिया के लिए एक ऑब्जेक्ट की आवश्यकता होती है (यानी "___ को दें", तो गेम उपयोगकर्ता को कार्रवाई करने से पहले ऑब्जेक्ट का चयन करने की प्रतीक्षा करता है।

कुछ इस तरह:

  1. उपयोगकर्ता एक चीज़बर्गर पर क्लिक करता है।
  2. गेम एक मेनू दिखाता है: "उठाओ, खाओ, देखो, ___ को दो"।
  3. उपयोगकर्ता "___ को दे" का चयन करता है।
  4. गेम कहता है "किसको दें?" और किसी अन्य संज्ञा (या रद्द करें बटन) पर क्लिक करने के लिए उपयोगकर्ता की प्रतीक्षा करता है।
  5. उपयोगकर्ता एक बंदर क्लिक करता है।
  6. खेल बंदर को चीज़बर्गर देता है।

कार्यान्वयन-वार, खेल में प्रत्येक वस्तु के लिए डेटा होना आवश्यक है:

  1. क्रियाओं का कौन सा सेट आप इसे लागू कर सकते हैं।
  2. क्रियाओं के लिए यह अनुमति देता है कि एक वस्तु लें, जो वस्तुओं के सेट को लागू किया जा सकता है।
  3. प्रत्येक क्रिया या क्रिया-ऑब्जेक्ट जोड़ी के लिए, उपयोगकर्ता जब ऐसा करता है तो प्रदर्शन करने का व्यवहार।

चूंकि व्याकरण वास्तव में घोंसला या कुछ भी नहीं है, इसलिए आपको दुभाषिया पैटर्न के रूप में कुछ जटिल की आवश्यकता नहीं होनी चाहिए।


+1, चीज़ों के मॉडलिंग पक्ष और चीज़ों के इंटरफ़ेस पक्ष पर दोनों। हां, ज्यादातर मैं सहमत हूं क्योंकि मैं इसे कैसे करूंगा , लेकिन मुझे यह जवाब पसंद है।
drhayes

अगर हम सहमत हैं, तो स्पष्ट रूप से हम दोनों को सही होना चाहिए। ;)
उदार

इसलिए, प्रभावी रूप से, आपको लगता है कि प्रदर्शन करने का व्यवहार हमेशा पहली संज्ञा द्वारा परिभाषित किया जाना चाहिए?
स्पूनमाइजर

1
हां, मुझे लगता है कि कई संज्ञाएं व्यवहार साझा करेंगी (ताकि "पिक अप" अलग-अलग वस्तुओं को लेने के लिए समान कोड का उपयोग करें), लेकिन यह क्रियाओं के सेट को निर्धारित करने के लिए संज्ञा तक होना समझ में आता है जिसे लागू किया जा सकता है यह करने के लिए। यह देखते हुए कि संज्ञा का सेट बहुत बड़ा है (खेल में हर चीज़) और क्रियाओं का सेट छोटा है (शायद कुछ मुट्ठी भर ऑपरेशन), मुझे लगता है कि यह उपयोगकर्ता के लिए पहली बार संज्ञा चुनने के लिए समझ में आता है क्योंकि इससे संयोजन अधिक नीचे गिर जाते हैं। जल्दी से। और, व्यावहारिक रूप से, यह उपयोगकर्ता को बातचीत शुरू करने के लिए किसी चीज़ पर क्लिक करने देता है , और कुछ शब्द नहीं।
उदार

यह एक तरह से पूर्ण गला घोंटकर किया।
जरी कोमप्पा

2

मैं सरलीकृत समाधान प्रस्तुत करता हूं। इसे निश्चित रूप से बढ़ाया जा सकता है।

मुझे लगता है कि सरल सूची (क्रिया, ऑब्जेक्ट 1, ऑब्जेक्ट 2) इसे हल करेगी:

  • यदि खिलाड़ी ऑब्जेक्ट (क्रिया) "उपयोग" और क्लिक की गई वस्तु "गुब्बारा" पर क्लिक करता है और खिलाड़ी ऑब्जेक्ट "पंप" पर क्लिक करता है और वहां ट्रिपल ("उपयोग", "बैलोन", "पंप") मौजूद है, तो आप "पंप के साथ बैलोन" का उपयोग करते हैं
  • कभी-कभी object2 "उपयोग हीलियम" (उपयोग, हीलियम, NULL) की तरह NULL होगा
  • खिलाड़ी को पहले ऑब्जेक्ट क्रिया पर क्लिक करने की आवश्यकता होती है
  • अगर खिलाड़ी किसी ऐसी चीज पर क्लिक करता है जो किसी चीज से मेल नहीं खाती है तो कहती है "मैं ऐसा नहीं कर सकती, यह बकवास है"
  • बेशक आप हर क्लिक के बाद जाँच करें कि क्या अनुक्रम सही है।

चूक को कैसे संभालें:

  • यदि पहली क्लिक क्रिया वस्तु पर नहीं है, तो संभावित डिफ़ॉल्ट कार्रवाई के लिए खोज करें।
  • चूक को संग्रहीत करने का एक तरीका चौगुना (क्रिया, ऑब्जेक्ट 1, ऑब्जेक्ट 2, इस-डिफ़ॉल्ट) बनाना होगा
  • उन्हें स्टोर करने का अन्य तरीका डिफ़ॉल्ट ट्रिपल्स की सूची बनाना होगा
  • ...

कुछ उदाहरण:

  • (उपयोग, बैलोन, पंप)
  • (दे, जॉन, आलू)
  • (चल, पिरान्हा, नल)
  • (उपयोग, बैलोन-इन-इन्वेंट्री, पंप)
  • (ओपन, डोर-टू-रूफ, NULL), डिफ़ॉल्ट .... डिफ़ॉल्ट कार्रवाई का उदाहरण

इसे बढ़ाया जा सकता है:

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

1

यहां दो समस्याएं हैं: खिलाड़ी के इनपुट को एक सिंटैक्स ट्री में व्याख्या करना, फिर उस पेड़ को एक्सटेक्ट करना।

पहले चरण के लिए, मैं प्रत्येक क्रिया बटन को कुछ क्रिया इंटरफ़ेस से प्राप्त एक ठोस क्रिया उदाहरण बनाऊंगा। उस उदाहरण को सत्यापन के लिए आगे संज्ञा या क्रिया पारित किया जाएगा। यदि मान्य है, तो यह संज्ञा को उसके आंतरिक सिंटैक्स ट्री से जोड़ देगा, अन्यथा यह एक उचित त्रुटि के साथ अस्वीकार कर देगा।

प्रत्येक बटन प्रेस के बाद, आप क्रिया पेड़ से पूछ सकते हैं कि क्या वह आगे बढ़ने के लिए (बंदर द्वीप-शैली इनपुट के लिए) वैध स्थिति में है।

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

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

की जाँच करें दुभाषिया पार्स मंच पर अधिक जानकारी के लिए पैटर्न।


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