मैं अपने गेम में एक प्रोग्रामिंग सिस्टम कैसे लागू कर सकता हूं जो कोड में सुलभ, शक्तिशाली और तेज दोनों है?


15

मैं वर्तमान में एक अंतरिक्ष-आधारित सैंडबॉक्स गेम पर काम कर रहा हूं जो आपके सिस्टम को कस्टम प्रोग्राम करने की क्षमता को बहुत अधिक बढ़ाएगा। मैं इसे इस तरह से लागू करना चाहता हूं जैसे दोनों हैं

  1. सुलभ,
  2. शक्तिशाली (नंगे न्यूनतम ट्यूरिंग-पूर्णता होगी)
  3. कोड में तेजी से।

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


अगर किसी को वास्तव में आप एक उदाहरण दे सकते हैं तो मुझे आश्चर्य होगा। क्योंकि मुझे वास्तव में लगता है कि इसके लिए कुछ व्यापक शोध की आवश्यकता है (जैसे कि मनुष्य कैसे तर्क लागू करते हैं और क्या नहीं, मनोवैज्ञानिक कारक जो कुछ भी और इन सभी मानव केंद्रित सामान हैं)
सिदार

2
किसी ने स्क्रैच का उल्लेख नहीं किया?
रसेल

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

यह ध्यान देने योग्य है कि ट्यूरिंग-पूर्णता को कॉनवे के जीवन के खेल , माइनक्राफ्ट और अन्य ऐसी प्रणालियों द्वारा प्राप्त किया जा सकता है जिन्हें प्रोग्रामिंग के लिए डिज़ाइन नहीं किया गया है।
विल

जवाबों:


10

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

एक प्रणाली के लिए अनुमति देना जो शुरुआती को नेत्रहीन कार्यक्रम करने की अनुमति देता है, शायद लेगो माइंडस्टॉर्म प्रोग्रामिंग उपकरणों के समान है :

यहाँ छवि विवरण दर्ज करें

जहां ड्रैग / ड्रॉप कंपोनेंट हैं। घटकों में इनपुट और आउटपुट होते हैं। घटक सरल चीजें जैसे AND, या ORद्वार, या आसपास के दुश्मनों के लिए एक परीक्षण की तरह अधिक जटिल हो सकते हैं।

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

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

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

सौभाग्य! यह एक मजेदार परियोजना की तरह लगता है।


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

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

1
यह संभावना नहीं है कि आप उस सटीक कारण के लिए स्क्रिप्ट-> दृश्य को लागू करना चाहते हैं। दृश्य के साथ छड़ी-> स्क्रिप्ट।
MichaelHouse

मैक्रो ब्लॉक (ब्लॉक जो इनपुट / आउटपुट प्रदान करते हैं और अंदर ब्लॉक को हटाने की क्षमता रखते हैं) का उपयोग पदानुक्रम, एनकैप्सुलेशन और जटिल कार्यक्रमों के निर्माण को कम करने के लिए पुन: उपयोग करने के लिए किया जा सकता है। बस यह सुनिश्चित करें कि आप मैक्रोज़ को मैक्रोज़ के अंदर नहीं रख सकते हैं या आप ऐसे मामलों का पता लगा सकते हैं ... मुझे कम से कम एक प्रोगम पता है जो इस तरह के अनैतिक लूप का पता लगाने में विफल रहता है।
13

5

आप Google के ब्लॉक पर एक नज़र रखना चाह सकते हैं , वे दृश्य तत्वों को पहचानने योग्य प्रोग्रामिंग शब्दों के साथ जोड़ते हैं, जबकि पहुंच का काफी सभ्य स्तर बनाए रखते हैं।

यहाँ छवि विवरण दर्ज करें

आप प्रेरणा के लिए भूलभुलैया डेमो पर एक नज़र डाल सकते हैं , मेरे कई गैर-प्रोग्रामर मित्र इसका उपयोग करने वाले पहेलियों के माध्यम से अधिकतर प्राप्त करने में सक्षम थे, प्रभाव में कम से कम आपके कुछ मानदंडों को पूरा करते हुए।


अभिगम्यता के दृष्टिकोण से दिलचस्प भाषा, हालांकि इसमें प्रोग्रामिंग बहुत धीमी है (मैंने अभी-अभी कोशिश की है ...
पाशा

@PashaS वास्तव में, मुझे लगता है कि आपको उस मूल्य का हिस्सा है जिसे आपको कोशिश करने और दोनों दुनिया के सर्वश्रेष्ठ प्राप्त करने के लिए भुगतान करना होगा।
क्वेटज़ालकोट

4

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

Stencyl ब्लॉक कोडिंग का एक और उदाहरण है जो आप जो चाहते हैं उससे अधिक समान है। इस तरह के ब्लॉक के साथ कोडिंग लेगो एनएक्सटी द्वारा उपयोग किए जाने वाले विज़ुअल प्रोग्रामिंग इंटरफेस की तुलना में बहुत अधिक कुशल और कम समय लेने वाली है। Stencyl उपयोगकर्ताओं को या तो Actionscript या ब्लॉकों में कोड करने की अनुमति देता है।

मैं चित्रों की कमी के लिए माफी चाहता हूं, मेरे पास अभी तक छवियों को पोस्ट करने के लिए पर्याप्त प्रतिष्ठा नहीं है।


2

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

BPEL जैसी भाषा प्रोग्रामिंग, रूटिंग और कनेक्टिंग सिस्टम की तरह महसूस नहीं होगी। तो आपके पास एक गन सिस्टम से जुड़ा टारगेट सिस्टम हो सकता है, जिसके बीच में कुछ लॉजिक हो।


+1: जब मैं खुद BPEL की वकालत नहीं करूंगा, तो इसका तरीका वही है जो मैंने प्रदान किया है। अत्यधिक नियमित भाषा जो पाठ या नेत्रहीन दोनों का प्रतिनिधित्व करने के लिए आसान है और जो अधिक "सामान्य" प्रोग्रामिंग प्रतिमानों की तुलना में इवेंट रूटिंग / प्रतिक्रिया पर अधिक ध्यान केंद्रित करती है।
शॉन मिडिलडाइच

1

इस दृष्टिकोण पर विचार करें:

  1. सुनिश्चित करें, सरल नियम-आधारित यांत्रिकी में आपकी स्क्रिप्ट तर्क स्पष्ट है। उदाहरण के लिए, आपके पास "ट्रिगर" है जो "शर्तों" से जुड़े गेमप्ले के दौरान होता है जिसे पूर्ण होना चाहिए और फिर "क्रियाएँ" निष्पादित की जाती हैं (बेशर्मी से Starcraft 2 संपादक से चोरी)।
  2. फिर एक यूआई प्रदान करें जहां आप कुछ पूर्वनिर्धारित क्रियाओं / शर्तों / ट्रिगर को ड्रैग कर सकते हैं और इसलिए 90% उपयोग मामलों का निर्माण करते हैं जो लोग आमतौर पर करना चाहते हैं।
  3. अब Lua, Python या C # जैसे कुछ शक्तिशाली और लोकप्रिय स्क्रिप्टिंग इंजन को एकीकृत करें
  4. अंत में इन अधिनियमों / शर्तों / दर्ज़नों के दर्जनों को उस भाषा में स्वयं लिखें। सुनिश्चित करें कि अनुकूलित करने वाला उपयोगकर्ता कॉपी और पेस्ट कर सकता है, इन और नए कार्यों को आसानी से अपने ड्रैग'एनलड्रॉप संपादक के भीतर संपादित और एकीकृत कर सकता है।
  5. आप शायद अपने ट्रिगर्स, शर्तों और क्रियाओं को परिमार्जित करने में सक्षम होना चाहते हैं और इसलिए आपको इन तीनों की तुलना में अधिक आदिम जोड़े की जरूरत है, जैसे "गेमऑब्जेक्ट", "पोजिशन", "नंबर" या "स्ट्रिंग"। यूआई में, आपको इन मापदंडों को निर्दिष्ट करने के लिए कुछ संवादों की आवश्यकता होगी, लेकिन यह अभी भी बहुत कम काम है अगर आपको यूआई संचालन के माध्यम से पूरी स्क्रिप्ट बनाने में सक्षम होना चाहिए।

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

कुछ उदाहरणों को स्पष्ट करने के लिए कि मेरा क्या मतलब है:

  • ट्रिगर हो सकता है: "गेम फ्रेमवर्क इनिशियलाइज़्ड", "गेम लोडेड", "यूनिट बनाया", "यूनिट नष्ट", "प्लेयर डैमेज" और इसी तरह। ट्रिगर में आमतौर पर कुछ पैरामीटर होते हैं (जैसे यूनिट बनाया गया GameObject जो बनाया गया है)
  • शर्तें सभी मानक बूलियन और बुनियादी अंकगणितीय स्थितियां हैं (और / या / नहीं / बराबर / अधिक ...) इसके अलावा कुछ विशिष्ट परिस्थितियां जो आप अपने खेल में पाते हैं जैसे "यूनिट पूर्ण स्वास्थ्य पर है" या "कम से कम दो खिलाड़ी जुड़े हुए हैं"। शर्तों में आमतौर पर पैरामीटर होता है जिसे उपयोगकर्ता को (यूआई का उपयोग करके) भरने की आवश्यकता होती है
  • क्रियाएँ ऐसी स्क्रिप्ट हैं जो कुछ सरल पैरामीटर भी ले सकती हैं। जैसे "पैन द कैमरा टू एक्सएक्सएक्स", "किल यूनिट वाई", "गेम ओवर", "एक्सिक्यूट ट्रिगर" और "कॉल एक्शन एक्स, वाई, जेड ... एक सीक्वेंस में"

ध्यान दें कि प्रोग्रामिंग कंप्यूटर में गेम के लिए है, प्लगइन्स के लिए नहीं। वैसे भी धन्यवाद।
दिमित्रीये98

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

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