खेल कहानी घटना प्रोग्रामिंग


28

मैंने c / c ++ और DirectX में एक गेम इंजन विकसित किया है।

मेरे पास नक्शे, एनिमेटेड खिलाड़ी / एनपीसी स्प्राइट्स के लिए एक टाइल इंजन है, जो कि एनपीसी, मेनू और स्तर पर बात कर रहा है लेकिन कोई खेल नहीं है, यह सिर्फ खाली लगता है।

मैंने चारों ओर देखा है और buzzword उत्तर सुनते रहें लेकिन मैं जानना चाहता हूं कि अपने खेल में कहानी को कैसे लागू किया जाए।

कुछ लोगों ने कहा है कि एक सेव फाइल है जो खेल में उपलब्ध हर संभव कार्रवाई / स्थिति को नियंत्रित करने वाले झंडे रखती है, लेकिन यह अजीब लगता है।

यह थोड़ा महत्वाकांक्षी है लेकिन मैं पुराने पोकेमॉन / फाइनल फैंटेसी गेम्स की तरह एक खेल प्राप्त करना चाहता हूं।

क्या कोई जानता है कि ये खेल कैसे काम करते हैं या सिद्धांत का उपयोग किया जाता है?

मैं थोड़ी देर के लिए देख रहा हूं और वास्तव में किसी भी इनपुट लोगों की सराहना करेगा।

जवाबों:


19

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

उदाहरण के लिए, यदि हम पोकेमॉन गेम की पूरी निगरानी करते हैं, तो जिम बैज एफएसए की मुख्य शाखा बन जाते हैं। आप राज्य में शुरू करते हैं, जहां आपके पास कोई बैज नहीं है और जैसा कि आप जिम के नेताओं को हराते हैं, जो आप राज्यों के माध्यम से चलते हैं, राज्य 1, राज्य 2 तक, आदि। वर्तमान स्थिति को अपडेट करने के लिए अपने खेल संस्थाओं को प्राप्त करने के लिए, आपको केवल प्राप्त करने की आवश्यकता है उन्हें वर्तमान स्थिति को देखने के लिए। उदाहरण के लिए, 3 जी जिम के बाहर एक एनपीसी यह जांच करेगा कि आप किस राज्य में हैं, देखें कि आप 3 बैज के अनुरूप हैं या नहीं, और उसी के अनुसार प्रतिक्रिया दें (शायद "अच्छी तरह से किया गया!")।

आपको दुनिया की हर चीज को स्टोर करने की जरूरत नहीं है; बस कहानी की स्थिति। संस्थाएं खुद जानती हैं कि वर्तमान स्थिति के आधार पर कैसे प्रतिक्रिया करनी है।


दिलचस्प दृष्टिकोण और मुझे यह पसंद है कि इसे आज़माना होगा लेकिन आप कहानी की प्रगति पर निर्भर नहीं होने वाले साइड क्वाइन्स को कैसे ट्रैक करेंगे?

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

यह एफएसए आप के बारे में बात करते हैं, मैं इस बारे में एक स्पष्टीकरण कहां मिलेगा, अधिमानतः सरलीकृत और अन्य सिद्धांतों के बिना intertwined।
स्कीथ

आप सभी जगह राज्य मशीनों के बारे में जान सकते हैं, लेकिन 99.9% उस समय जो खेल के बारे में बात नहीं करेंगे। अभिकलन पर एक परिचयात्मक पुस्तक आपको उनके बारे में सिखाएगी लेकिन आपको वास्तव में इतना विस्तार की आवश्यकता नहीं है। आपको बस कुछ घटनाओं के होने पर राज्यों में होने और उनके बीच बढ़ने की अवधारणा को समझने की आवश्यकता है। @ pwny की प्रतिक्रिया वास्तव में एक ही बात को एक अलग तरीके से कह रही है। एफएसए के बारे में पढ़ना राज्य मशीनों की अवधारणाओं को सीखने का एक शानदार तरीका होगा। राज्य मशीनों के लिए एक परिचय के लिए बस Google!
जोसेफ मैन्सफील्ड

7

आप अपने खेल में संभव राज्यों के एक सेट का उपयोग कर सकते हैं। आपका एनपीसी और आपकी दुनिया उन राज्यों से अवगत होगी और तदनुसार प्रतिक्रिया / प्रदर्शन करेगी। आप ट्रिगर के एक सेट को भी परिभाषित करना चाह सकते हैं जो कुछ कार्यों / घटनाओं द्वारा सक्रिय हो जाएगा।

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

अपने खेल के लिए उन दो सरल परिवर्धन के साथ, आप इसे बहुत अधिक "जीवित" बना सकते हैं।

सुनिश्चित करें कि आप अपनी दुनिया, पात्रों और कथानक के लिए एक समृद्ध पृष्ठभूमि भी बनाते हैं और सुनिश्चित करें कि खेल उस पृष्ठभूमि के अनुरूप है। पहले अपनी कहानी की योजना बनाएं।

Gamedev भी आजमाएँ


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

जरूरी नहीं है, 5 स्वतंत्र सुपर प्रयोज्य राज्यों की कल्पना करें। आपको 5 बूलियन के लिए 32 संभावित शाखाएं मिलती हैं। मुझे लगता है कि यह उचित है। इसके अलावा, ट्रिगर सिस्टम का उपयोग बहुत सारे पेशेवर खेलों में किया जाता है, खासकर क्योंकि आप तब ट्रिगर की श्रृंखला का उपयोग करके स्क्रिप्ट व्यवहार कर सकते हैं।
pwny

2

जैसा कि sftrabbit का उल्लेख किया गया है, यह एक राज्य मशीन के लिए एक आदर्श अनुप्रयोग है।

अनिवार्य रूप से, आपके पास एक प्रकार की वृक्ष संरचना है। प्रत्येक पत्ती / नोड में वर्तमान स्थिति और अगले राज्य की प्रगति के नियमों के बारे में जानकारी होती है। प्रत्येक नोड में कई निकास हो सकते हैं, यह इस बात पर निर्भर करता है कि आपको अपने प्लॉट / प्ले फ्लो के लिए कितनी जटिल आवश्यकता है।

इस के लिए एक अच्छा, बहुत ही ढीला एनालॉग एक अपनी खुद की साहसिक चुनें बुक । प्रत्येक पृष्ठ में कहानी का हिस्सा वर्णन करने वाले कुछ पाठ होते हैं, और निर्णय जो खिलाड़ी कर सकते हैं। प्रत्येक निर्णय दूसरे पृष्ठ पर जाता है। कुछ पृष्ठ पहले से देखे गए पृष्ठों आदि से लिंक हो सकते हैं।

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

तो, आपके राज्यों को एक वर्ग या संरचना के रूप में लागू किया जा सकता है, जिनमें से प्रत्येक के लिए गुण हैं:

एसेट सूची - पृष्ठभूमि ग्राफिक्स और कुछ और जो आपको कमरे / राज्य / स्तर को प्रदर्शित करने की आवश्यकता है, की ओर संकेत करता है।

प्रवेश की शर्तें - उपलब्धियां जो पहले से ही एक स्तर में प्रवेश करने के लिए पहुंच गई हैं

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

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

आपकी प्रारंभ स्क्रीन, स्क्रीन पर मृत्यु / खेल, आदि सभी सिस्टम के भीतर हो सकते हैं, जिस तरह से आप मेनू स्क्रीन के बीच नेविगेट कर सकते हैं। वास्तव में, यदि आपके पास ऐसा कोई मेनू सिस्टम है, तो आप इसके लिए इसका उपयोग कर सकते हैं। एक मेनू नेविगेट करने के लिए ऊपर / नीचे तीर और "दर्ज करें" के बजाय, आप गेम प्ले क्षेत्र के भीतर विशिष्ट घटनाओं की तलाश करेंगे, जैसे कि टेलीपोर्ट पैड पर कदम रखना, स्क्रीन के दाईं ओर चलना, आदि।

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

उम्मीद है की यह मदद करेगा।


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

@ हाँ, यह एक उचित दृष्टिकोण की तरह लगता है।
डीप

0

मैं इस गेम इंजन का उपयोग करता था जिसे VERGE कहा जाता है । उस के साथ चारों ओर खेलें और देखें कि यह घटनाओं को कैसे संभालती है, मुझे यह बहुत पसंद है। यह खुला स्रोत भी है, इसलिए आप देख सकते हैं कि वे इसे कैसे लागू करते हैं, यहां । यहाँ एक संक्षिप्त विवरण है।

प्रत्येक नक्शे में कई तरह की परतें होती हैं। चित्रमय परतें, जिनमें से कई हो सकती हैं। बाधा परत। और फिर ज़ोन की परत है। ज़ोन परत यहाँ क्या महत्वपूर्ण है। *

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

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

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

* इसमें एंटिटी लेयर भी है। इकाइयाँ मोबाइल आसन्न सक्रिय क्षेत्र की तरह कार्य करती हैं।


ऐसा लगता है जैसे सिस्टम गेम का उपयोग आरपीजी गेम मेकर श्रृंखला में किया जाता है। लेकिन क्या होगा अगर उस टाइल में आपके द्वारा बताई गई कहानी के आधार पर 5 अलग-अलग घटनाएं हैं?
स्कीथ

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

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