एक साहसिक खेल में असंभव राज्यों से बचना


15

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

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

घटनाओं और वस्तुओं को बहुत सावधानी से दस्तावेज करने के अलावा एक प्रक्रिया है, एक तकनीक जो मैं स्प्रेडशीट या सॉफ्टवेयर के एक टुकड़े में उपयोग कर सकता हूं जो मेरी मदद कर सकता है?

जवाबों:


11

एक निर्देशित ग्राफ समस्या की तरह लगता है।

शुरुआत में शुरू करें, कहानी में प्रत्येक शाखा के लिए आपके पास वर्तमान में मौजूद वस्तुओं को रिकॉर्ड करें और फिर ग्राफ को शाखा दें। वहाँ से प्रत्येक शाखा का अनुसरण करें और ऐसा ही करें, एक बार जब आप दूसरी शाखा में पहुँचें तो अपने वर्तमान आइटम रिकॉर्ड करें और ग्राफ को शाखा दें। यह बहुत अधिक डुप्लिकेट नोड्स के साथ एक बहुत घने ग्राफ के साथ समाप्त होगा (लेकिन प्रत्येक नोड एक अलग ग्राफ अनुक्रम से वहां मिला) लेकिन आपको कोई लूप नहीं मिलना चाहिए।

अंत में आपके पास उन सभी वस्तुओं का एक ग्राफ होना चाहिए जो आप अपनी कहानी में किसी भी बिंदु पर और वहां पहुंचने के सभी संभावित तरीकों से ले सकते हैं।

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

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

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


इसका मतलब है कि एक उपकरण विकसित करना। मैं एक अंतिम उपाय करता हूं।
अली

6
उपकरण या तो आपका दिमाग होगा, रिकॉर्ड रखने और मेमोरी क्षमता या यह कुछ स्वचालित होगा जो थक नहीं जाएगा और एक गड़बड़ याद आती है =) मुझे लगता है कि यह निर्भर करता है कि आपका गेम कितना बड़ा होने जा रहा है और क्या आप कभी भी एक ही इंजन से दूसरा निर्माण करें, यह तय करने के लिए कि क्या खर्च किया गया समय इसके लायक है या नहीं।
पैट्रिक ह्यूजेस

ऐसा करने का सबसे अच्छा तरीका ऊपर से नीचे (पीछे की तरफ जाना) पर निर्भरता का पेड़ हो सकता है, और अगर पेड़ में दो आइटम एक ही निर्भरता को साझा करते हैं (और निर्भरता को उनके बीच एक विकल्प की आवश्यकता होती है), तो आपके पास उल्लंघन है।
डिकैलेरेटेडकवि

0

यह एक अजीब जवाब लग सकता है लेकिन आप आसानी से संकलक (उदाहरण के लिए c ++) का उपयोग करके असंभव घटनाओं की जांच कर सकते हैं! मुझे कैसे समझाएं: आपके पास हर चरण के लिए एक ही हेडर फ़ाइल है। और खेल main.cppफ़ाइल में समाप्त होता है । जब भी आप से जा सकते हैं stage aकरने के लिए stage b, तो आप सिर्फ फ़ाइल को शामिल करने के लिए संबंधित stage aमें stage b। जब भी आपको एक मंच में एक नया आइटम मिलता है तो आप उस आइटम के लिए एक मूल्य निर्धारित करते हैं। जब भी आप हारे या किसी वस्तु का उपयोग करते हैं तो आपको बस इसे हटाना नहीं होता है। प्रत्येक चरण में अंत में आपको बस उस चरण में आवश्यक वस्तुओं के लिए सभी निर्धारित मूल्यों का उपयोग करना होगा। यहाँ एक नमूना है कि इसे कोड में कैसे उपयोग किया जाए:

आह

#define itemA

bh

#include <a.h>
#undef itemA
#define itemB

ch

#include <a.h>

itemA;

#include <b.h>

itemB;

main.cpp

#include <c.h>
int main()
{
}

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


2
यह संकलक का वास्तविक दुरुपयोग है!
अली

3
यह दिलचस्प है, लेकिन यह काफी भंगुर होगा और केवल तभी काम करेगा जब मेरी कहानी में प्रति ऑब्जेक्ट / ईवेंट / अनुभाग होगा। मैं एक डेटा संचालित दृष्टिकोण, xml या कुछ और से पढ़ने के लिए जा रहा था। यद्यपि आपके सुझाव के लिए धन्यवाद।
डैनडान जूल

3
हर बार एक खोज में परिवर्तन करने के लिए एक recompile को मजबूर करने के लिए ऐसा अच्छा विचार नहीं है, साथ ही यह अंत उपयोगकर्ताओं (उदाहरण के लिए DLC) के लिए डेटा अपडेट की अनुमति नहीं देगा, या यदि सर्वर से चलाया जाता है और डाउनलोड को मजबूर किए बिना फिक्स लागू करता है।
पैट्रिक ह्यूजेस

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

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