वैचारिक रूप से, कोई एक खेल के लिए एक नियम / बाधा (ग्राफिक्स / भौतिकी नहीं) इंजन कैसे बनाता है


16

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

पहली नज़र में, यह इफ-स्टेटमेंट्स के भार की तरह लगता है, इस प्रकार एक नियम इंजन को लागू करना जगह में होगा। लेकिन, यह मेरे लिए एक परिमित राज्य मशीन की तरह लग रहा है।

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

जाहिर है, शीर्षक से "गेम इंजन" टकराव का पता लगाने या अन्य भौतिकी / ग्राफिक्स यांत्रिकी का उल्लेख नहीं करता है, लेकिन तर्क यह बताता है कि एक खिलाड़ी ने किन विकल्पों को स्थिति और उसकी वर्तमान स्थिति दी है।


1
क्या यह प्रश्न gamedev के लिए बेहतर अनुकूल है ?
उवे प्लोनस

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

शतरंज और ताश के खेल रोमांच से बहुत अलग हैं ।
डियर हंटर

1
आपका प्रश्न विशेषज्ञ प्रणाली के विकास को भी कवर करता है। जहाँ चयनित प्रश्नों के उत्तर और संभावित निदान सीमित हो जाते हैं। शायद यह है कि कुछ और "इनपुट" खोजने के लिए क्या देखना है?
मार्जन वेनेमा

जवाबों:


7

टिप्पणियों में आपने जो कहा है, उसके आधार पर, यह है कि मैं इसे कैसे संभालूंगा:

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

दो बुनियादी तरीके हैं जिनसे आप शर्तों को लागू कर सकते हैं। पहले गेम के अंदर एक पूर्ण-विकसित स्क्रिप्ट इंजन स्थापित करना है, और फिर स्थिति जैसी दिखती है return player.inventory.contains(GUN)। यह शुरू में स्थापित करने के लिए अधिक जटिल है, लेकिन अधिक उन्नत स्क्रिप्टिंग के लिए अनुमति देता है।

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


1
हम वास्तव में अपने पूरी तरह से गैर-गेम-संबंधित वेब-ऐप में कुछ इस तरह का उपयोग करते हैं। उपयोगकर्ता के पास कई राज्य हैं, और किसी भी संख्या में ईवेंट कोड में निकाल दिए जा सकते हैं, जिनमें से कई उपयोगकर्ताओं को एक राज्य से दूसरे राज्य में स्थानांतरित करने के लिए पूर्व-सेट हैं। मुझे लगता है कि प्रश्न के वर्णित मामलों के लिए, स्थितियों / ट्रिगर को परिभाषित करने के लिए कुछ प्रकार की अल्पविकसित स्क्रिप्टिंग भाषा (या एक पूर्ण पर-जैसे पायथन / लुआ) होने से भी मदद मिलेगी।
कटाना ३१४

मुझे यह तरीका काफी पसंद है। धन्यवाद! आगे इसकी जांच करेंगे। किसी भी मौका आप एक उपयोगी पुस्तकालय जानते हैं?
kaqqao

@veggen: नहीं, क्षमा करें। जावा डेवलपर नहीं।
मेसन व्हीलर

@ मेसनव्हीलर: आप लाजर के बारे में क्या सोचते हैं ?
रॉबर्ट हार्वे

1
चूँकि यह प्रश्न आज लोकप्रिय प्रश्न सूची में आया है, इसलिए मैं रिपोर्ट करूँगा कि मैंने इसे ठीक वैसे ही लागू किया जैसा मैंने कहा था कि मैं पिछली टिप्पणी में हूँ। मैंने एक अच्छा डीएसएल बनाया और एफएसएम लॉजिक को खुद लागू किया क्योंकि यह वास्तव में, वास्तव में सरल है। समाधान से अधिक संतुष्ट नहीं किया जा सकता है। @MasonWheeler एक महान सलाह के लिए फिर से धन्यवाद!
kaqqao

5

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

एक खिलाड़ी ने कौन से विकल्प दिए हैं जो स्थिति और उसकी वर्तमान स्थिति को देखते हैं

Drools, या वास्तव में किसी भी अन्य नियम इंजन के साथ, आप एक पैरामीटर स्थिति को परिभाषित कर सकते हैं जो संभावित कार्यों की सूची को आउटपुट करता है। आप सरल नियमों को सांकेतिक शब्दों में बदलना कर सकते हैं:

  • खिलाड़ी पृष्ठ पर है:

    • विकल्प 1: शीर्षक: "बाएं जाओ", क्रिया: "पेज 45"
    • विकल्प 2: शीर्षक: "सही जाओ", क्रिया: "पेज 56"
    • यदि खिलाड़ी के पास फायरबॉल के कर्मचारी हैं, तो 3 पसंद करें: शीर्षक "लॉन्च फायरबॉल", कार्रवाई: "पेज 32"
    • यदि खिलाड़ी के पास 10 की पसंद का एक धारणा कौशल है 4: शीर्षक "दीवार पर लेखन लेखन", क्रिया: "पृष्ठ 67"

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

Drools के साथ शुरुआत करने में आपकी मदद करने के लिए यहां कुछ रीसर्स दिए गए हैं:


सामान्य तौर पर - अपनी पसंद के किसी भी नियम इंजन में लागू रीए एल्गोरिथ्म को देखें ।
डियर हंटर

हाँ, ड्रोल्स मेरे द्वारा शुरू की गई चीजों में से एक थी। मुझे यह देखने के लिए थोड़ा और जांच करनी होगी कि क्या मैं एक समय में केवल एक पैकेज नियमों का मूल्यांकन कर सकता हूं, क्योंकि यह मेरे मामले में महत्वपूर्ण है। धन्यवाद!
kaqqao

@veggen मदद करने के लिए खुश है!
जलयान

2

राज्य मशीन आपके खेल को मॉडल करने के लिए एक सुरक्षित दृष्टिकोण की तरह लगता है। इंटरैक्टिव फ़िक्शन के लिए बहुत सारे पुस्तकालय हैं:

http://en.wikipedia.org/wiki/Category:Text_adventure_game_engines

विकिपीडिया में उल्लेख नहीं है, सुतली इस समय बहुत लोकप्रिय है।


2

वैचारिक रूप से, आपका खेल सीधा है। Psudeocode में, यह कुछ इस तरह दिखेगा:

while not at end of adventure story
    display text
    get response

अब, सभी पाठों को एक साथ जोड़ना ताकि यह एक क्रिया से दूसरी में बहता है, कठिन हिस्सा है। आप एक रिलेशनल डेटाबेस का उपयोग कर सकते हैं। आप एक पेड़ का उपयोग कर सकते हैं।

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

एक प्रतिक्रिया वर्ग बनाएं जो एक प्रतिक्रिया और एक पाठ वर्ग के लिए एक लिंक रखता है।

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

टिप्पणी का जवाब देने के लिए संपादित:

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

T You stumble on a dead police officer
    A Take the gun
    T You hear footsteps
      A Run away
      A Hide and see who comes
    A Don't touch anything
    T You hear footsteps
      A Run away

हां, पाठ का कुछ दोहराव है, लेकिन श्रृंखला का पालन करके, भविष्य की कार्रवाई अतीत के फैसलों को ध्यान में रख सकती है। यह बहुत बड़ा निर्णय है।


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

@veggen: अद्यतन उत्तर देखें।
गिल्बर्ट ले ब्लैंक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.