पहले अपने मुख्य प्रश्न का संक्षेप में उत्तर देने के लिए, एक प्रक्रियात्मक रूप से उत्पन्न खेल की दुनिया के मुख्य लाभ हैं:
दुनिया विशाल हो सकती है , किसी भी मैन्युअल रूप से डिज़ाइन की गई दुनिया की तुलना में बहुत बड़ी हो सकती है।
प्रत्येक खेल के लिए दुनिया (या कम से कम भागों) को पुन: उत्पन्न किया जा सकता है, संभावित रूप से बढ़ते हुए मूल्य, क्योंकि खिलाड़ी को हमेशा कुछ नया खोजना होगा।
इसके विपरीत, प्रक्रियात्मक पीढ़ी के मुख्य नुकसान यह हैं कि:
इस्तेमाल की जाने वाली पीढ़ी के तरीकों के आधार पर, यह सुनिश्चित करना कठिन हो सकता है कि दुनिया हमेशा खेलने योग्य हो, यानी कि खिलाड़ी आगे बढ़ने के लिए कोई रास्ता नहीं रोक सकता है क्योंकि वे दुनिया की पीढ़ी के साथ बदकिस्मत हैं।
यहां तक कि अगर आप पूरी तरह से अनपेक्षित दुनिया पैदा करने से बच सकते हैं, तो यादृच्छिक दुनिया पीढ़ी एक उच्च चर कठिनाई स्तर का कारण बन सकती है: कभी-कभी, खिलाड़ी को वह सब कुछ मिल सकता है जिसकी उन्हें लेने में आसानी से जरूरत होती है, कभी-कभी वे बिना कुछ उपयोगी पाए लंबे समय तक चल सकते हैं। ।
लंबे समय तक, इस तरह के यादृच्छिक उतार-चढ़ाव औसत से बाहर होते हैं, लेकिन अगर खेल कठिनाई बहुत अधिक सामने से भरी हुई है (उत्तरजीविता के खेल के लिए विशिष्ट), तो एक खराब शुरुआत एक खेल को बर्बाद कर सकती है जबकि बहुत भाग्यशाली शुरुआत सभी चुनौती को लूट सकती है।
पूरी तरह से की गई प्रक्रियात्मक पीढ़ी दुनिया को एकरस और उबाऊ महसूस करवा सकती है: जब आपने एक दर्जन बेतरतीब ढंग से उत्पन्न माज़ों को देखा है, तो वे सभी समान दिखना शुरू कर देते हैं, भले ही वे विवरण में भिन्न हों।
इसके अलावा, अगर खेल की दुनिया प्रत्येक खेल के लिए पूरी तरह से पुनर्जीवित होती है, तो कोई निश्चित स्थान या विशेषताएं नहीं होंगी जो खिलाड़ी पिछले खेलों से पहचान सकता है। इस तरह की पहचान की कमी से खिलाड़ी को भावनात्मक स्तर पर खेल से जुड़ने, या अन्य खिलाड़ियों के साथ अनुभव साझा करने में मुश्किल हो सकती है।
एक बात यह भी है कि आप या तो सूची में गिन सकते हैं: एक ऐसे खेल में जहां दुनिया को प्रत्येक खेल के लिए यादृच्छिक रूप से पुनर्जीवित किया जाता है, "वॉकथ्रू" मार्गदर्शिका जैसी कोई चीज नहीं हो सकती है, क्योंकि हर नाटक का रंग अलग होगा।
(यह विसंगति परीक्षण और डिबगिंग के लिए एक समस्या भी हो सकती है, हालांकि इसे कम से कम आंशिक रूप से RNG बीज को निर्दिष्ट करने की अनुमति देकर बचा जा सकता है, कम से कम डिबग मोड में, और / या "धोखा" कमांड प्रदान करने के लिए जिसका उपयोग किया जा सकता है। तेजी से आगे खेलने के विभिन्न चरणों में।)
हालांकि, यदि आप नुकसान की सूची को देखते हैं, तो आप देखेंगे कि यह ज्यादातर शुद्ध प्रक्रियात्मक पीढ़ी के नुकसान का वर्णन करता है ; उनमें से बहुत से मैन्युअल रूप से और प्रक्रियात्मक रूप से उत्पन्न सामग्री को मिलाकर बचा जा सकता है ।
उदाहरण के लिए, खिलाड़ी हमेशा निश्चित, मैन्युअल रूप से डिज़ाइन किए गए शहर में शुरू कर सकता है, शायद एक व्यापक या कम निश्चित घर क्षेत्र से घिरा हो, लेकिन शहर से दूर स्थानों को यादृच्छिक रूप से उत्पन्न किया जा सकता है ताकि खिलाड़ी का पता लगाने के लिए हमेशा अपरिचित क्षेत्र प्रदान किए जा सकें।
दुनिया में बेतरतीब ढंग से रखे गए (अधिक या कम) अन्य मैन्युअल रूप से डिज़ाइन किए गए शहर या अन्य स्थान भी हो सकते हैं, जैसे कि खिलाड़ी को उन्हें ढूंढना होगा, लेकिन यह पता चलेगा कि उन्हें वहां पहुंचने के बाद क्या उम्मीद करनी चाहिए। इसके विपरीत, पर्वत जैसी प्रमुख विशेषताओं को मैन्युअल रूप से रखा जा सकता है (कम से कम निश्चित स्थान के आसपास के क्षेत्र में), लेकिन उनके इलाके का विवरण यादृच्छिक रूप से किया जा सकता है।
रैंडम प्लेसमेंट के कारण गतिरोध और कठिनाई भिन्नता के कारण, जिसे आपके प्रक्रियात्मक उत्पादन पीढ़ी एल्गोरिदम के शीर्ष पर विभिन्न स्थिरता और संतुलन जांचों को लागू करके संबोधित किया जा सकता है। उदाहरण के लिए, यदि खिलाड़ी को पानी पार करने में सक्षम होने के लिए किसी विशेष आइटम की आवश्यकता होती है, तो आप कुछ कोड को यह सुनिश्चित करने में शामिल कर सकते हैं कि कम से कम एक ऐसी वस्तु रखी जाए ताकि खिलाड़ी बिना पानी पार किए ही उस तक पहुंच सके।
इसी तरह, आप अपने आइटम प्लेसमेंट नियमों को भी मोड़ना चाह सकते हैं ताकि खिलाड़ी के एक्स- लेवल पर पहुंचने से पहले बैलेंस-ब्रेकिंग वेकेशन की कोई भी वैंड न रखी जाए , और शायद यह सुनिश्चित करने के लिए कि कम से कम एक निश्चित स्थान पर रखा जाए जहां खिलाड़ी पहुंच सके। यह मंच पर पहुंचने से पहले जहां वे इसे जीवित रहने के लिए आवश्यकता के लिए जा रहे हैं।
वैसे, प्रक्रियात्मक और मैन्युअल रूप से उत्पन्न सामग्री जाल को अधिक या कम मूल रूप से बनाने का एक सामान्य तरीका है प्रक्रियात्मक विश्व जनरेटर (शायद उपयुक्त रूप से ट्वीक्ड, जैसे कि एक गांव या एक पर्वत शिखर जहां आप चाहते हैं, का उपयोग करके मैन्युअल पीढ़ी की प्रक्रिया शुरू करना। ) आपके द्वारा डिज़ाइन किए जा रहे क्षेत्र को इनिशियलाइज़ करने के लिए, और फिर अपने इच्छित विवरणों को जोड़ने और समायोजित करने के लिए इसे मैन्युअल रूप से ट्वीक करना। (यह केवल मैनुअल परिवर्तन और उपयोग किए गए जनरेटर बीज और मापदंडों को बचाकर, बहुत कॉम्पैक्ट स्तर के भंडारण की अनुमति दे सकता है।)
मैनुअल और प्रक्रियात्मक सामग्री को संयोजित करने के अन्य तरीकों में आपके मैन्युअल रूप से डिज़ाइन किए गए स्तरों में रिक्त स्थानों को छोड़ना, यादृच्छिक सामग्री द्वारा भरा जाना शामिल है (उदाहरण के लिए एक महल डन्गेन्स में बेतरतीब ढंग से उत्पन्न भूलभुलैया को शामिल कर सकता है, केवल रूपरेखा और निकास के साथ तय किया गया है), या मैनुअल डिजाइन स्तर के कुछ हिस्सों (जैसे कि एक शहर में घरों का स्थान) की केवल विस्तृत रूपरेखा को निर्दिष्ट कर सकता है और विवरण (जैसे प्रत्येक घर की सटीक उपस्थिति) को यादृच्छिक रूप से उठाया जा सकता है।
वास्तव में, यहां तक कि कई गेम जो पूरी तरह से गेम की दुनिया में हैं , वे अपने स्तर के डिजाइन प्रक्रिया के हिस्से के रूप में प्रक्रियात्मक पीढ़ी के कुछ रूप का उपयोग करते हैं , क्योंकि दुनिया की पीढ़ी के कुछ पहलू हैं (जैसे प्राकृतिक दिखने वाले इलाके का निर्माण करना, या एक जंगल में व्यक्तिगत पेड़ों को रखना) जो हाथ से करना मुश्किल और / या थकाऊ है, लेकिन स्वचालित रूप से आसान है।
इसके विपरीत, अधिकांश प्रक्रियात्मक विश्व जनरेटर दुनिया को बनाने के लिए कम से कम कुछ मैन्युअल रूप से डिज़ाइन की गई वस्तुओं और तत्वों का उपयोग करेंगे । नेस्टेड रैंडम / मैनुअल जेनरेशन के कई स्तर भी आसानी से हो सकते हैं: उदाहरण के लिए, एक प्रक्रियात्मक रूप से उत्पन्न दुनिया में मैन्युअल रूप से तैयार की गई पत्तियों के साथ प्रक्रियात्मक रूप से उत्पन्न पेड़ों के साथ प्रक्रियात्मक रूप से उत्पन्न जंगल से घिरे मैन्युअल रूप से उत्पन्न शहर शामिल हो सकते हैं।
यह भी ध्यान दें कि प्रक्रियात्मक सामग्री पीढ़ी एक निश्चित दुनिया के साथ असंगत नहीं है: आप बस एक निश्चित आरएनजी बीज चुन सकते हैं और इसका उपयोग अपनी दुनिया को उत्पन्न करने के लिए कर सकते हैं। यह उपयोगी हो सकता है यदि आप खिलाड़ियों के लिए एक विशाल दुनिया का पता लगाना चाहते हैं, लेकिन इसे हर खेल और प्रत्येक खिलाड़ी के लिए समान रखना चाहते हैं।
ध्यान दें, यदि आप ऐसा करते हैं (या संभवत: यदि आप नहीं भी करते हैं), तो आपको वास्तव में कई आरएनजी उदाहरणों का उपयोग करके, एक पदानुक्रमित फैशन में काम करने के लिए अपने विश्व जनरेटर को डिज़ाइन करना चाहिए, जैसे कि समग्र मानचित्र जनरेटर एक एकल आरएनजी उदाहरण रखेगा यह सबग्रेशन उत्पन्न करने के लिए उपयोग करेगा, प्रत्येक सबग्रेशन को एक अलग बीज मान प्रदान करता है जो कि क्षेत्र जनरेटर तब एक अलग RNG उदाहरण को बीजने के लिए उपयोग करेगा जो इस क्षेत्र को उत्पन्न करने के लिए उपयोग करेगा, और इसी तरह। यह "तितली प्रभाव" से बचने के लिए है, जहां नक्शे के सबसे नन्हे हिस्से का सबसे नन्हा विस्तार भी RNG को सिंक से बाहर फेंक सकता है और दुनिया की हर चीज को पूरी तरह से अलग कर सकता है।
तितली के प्रभाव से बचने के लिए एक और महत्वपूर्ण तरीका, खासकर यदि आप दुनिया को "मक्खी पर" पैदा कर रहे हैं, जैसा कि खिलाड़ी इसकी पड़ताल करता है, तो सामान्य RNG से पूरी तरह से बचना है (केवल उन प्रक्रियाओं को छोड़कर जो खिलाड़ी के दृष्टिकोण से "तुरंत" होती हैं, जैसे कि उत्पन्न करना) एक नया स्तर जब खिलाड़ी इसमें प्रवेश करता है) और इसके बजाय यादृच्छिक संख्या पीढ़ी विधियों का उपयोग करता है जो किसी भी आंतरिक स्थिति को संग्रहीत नहीं करते हैं। उदाहरण के लिए, जब खिलाड़ी को एक सबग्रेशन के लिए बीज चुनना होता है, तो समग्र विश्व जनरेटर, सबग्रियन (और उसके स्वयं के समग्र बीज) के निर्देशांक ले सकता है और उन्हें सबग्रियन बीज उत्पन्न करने के लिए एक हैश फ़ंक्शन में फ़ीड कर सकता है । इस तरह, प्रत्येक क्षेत्र हमेशा वही दिखाई देगा, भले ही खिलाड़ी जिस क्रम में उनके साथ प्रवेश करता है।
Ps। उस सभी विषयांतर के बाद, मुझे प्रक्रियात्मक पीढ़ी के लिए उपयोग किए जाने वाले वास्तविक कोड के बारे में अपने अंतिम प्रश्न को संक्षेप में बताएं। काश, मुझे नहीं लगता कि यह आपके द्वारा प्रदान किए गए बहुत अधिक विवरण के बिना किसी भी सार्थक अर्थ में वास्तव में जवाबदेह है , क्योंकि प्रक्रियात्मक विश्व पीढ़ी के रूप में शाब्दिक रूप से कई अलग-अलग तरीके हैं जैसे कि उनका उपयोग करने वाले खेल हैं।
उदाहरण के लिए, सभी प्रक्रियात्मक रूप से उत्पन्न अन्वेषण खेलों के महान ग्रैंड-डैडी संभवतः दुष्ट हैं , जिनके स्तर की पीढ़ी के एल्गोरिथ्म में केवल एक बड़े आयताकार स्तर के भीतर आयताकार कमरों का एक गुच्छा रखने और उन कमरों को मार्ग से जोड़ने (और एक सीढ़ी लगाने) शामिल हैं। उनमें से एक में अगले स्तर)। नेटहॉक से लेकर डियाब्लो श्रृंखला तक, इसके विविध उत्तराधिकारियों ने कई तरीकों से इस प्रणाली पर विस्तार से प्रकाश डाला है, लेकिन अधिकांश ने अलग-अलग स्तरों के मूल विचार को बरकरार रखा है, जिसमें ग्रिड मानचित्र पर कम से कम कमरे, काल कोठरी और mazes शामिल हैं।
इसके विपरीत, खुले आउटडोर सेटिंग्स की विशेषता वाले खेलों के लिए, आप संभवतः किसी प्रकार के भग्न भू-भाग पीढ़ी एल्गोरिदम के साथ शुरू करना चाहते हैं और उसके शीर्ष पर अन्य सुविधाओं (नदियों, जंगलों, कस्बों आदि) का निर्माण करेंगे। या आप कुछ ऐसा कर सकते हैं जैसे Minecraft क्या करता है, और एक यादृच्छिक 3 डी प्रक्रियात्मक बनावट उत्पन्न करता है जो यह निर्धारित करता है कि आपके परिदृश्य के कौन से हिस्से क्रमशः जमीन और हवा हैं (स्केल्ड और बायस्ड हैं ताकि निचले ब्लॉक जमीन होने की अधिक संभावना हो), और फिर पानी की तरह ओवरले सुविधाएँ , मिट्टी / चट्टान, वनस्पति, आदि इसके ऊपर।
बेशक, उपरोक्त में से कोई भी लागू नहीं होता है यदि आप कहते हैं, तो अंतरिक्ष अन्वेषण का एक खेल लिखना , जिस स्थिति में आपको बस कुछ घनत्व फ़ंक्शन के अनुसार यादृच्छिक रूप से रखे गए स्टार सिस्टम का एक गुच्छा उत्पन्न करना होगा, और फिर एक यादृच्छिक उत्पन्न करना होगा। उनमें से प्रत्येक में सितारों और ग्रहों का सेट। या हो सकता है कि आप एक गैर-यूक्लिडियन परिदृश्य का पता लगाने के लिए खिलाड़ियों को सेट कर रहे हों , जिस स्थिति में आप चुनौतियों का एक पूरी तरह से अलग सेट का सामना कर रहे होंगे (जैसे कि इस तथ्य के साथ कि किसी दिए गए त्रिज्या के भीतर मात्रा बहुपद के बजाय तेजी से बढ़ती है, जिससे यह बनता है वास्तव में स्मृति में एक बड़ा नक्शा रखना मुश्किल है)।