NET अनुप्रयोगों के लिए स्क्रिप्टिंग कार्यक्षमता जोड़ने

वोट
62

मैं एक छोटे से सी # में लिखा खेल है। यह पीछे के अंत के रूप में एक डेटाबेस का उपयोग करता। यह एक है व्यापार कार्ड खेल , और मैं एक स्क्रिप्ट के रूप में ताश के पत्तों की समारोह को लागू करना चाहता था।

क्या मेरा मतलब है कि मैं अनिवार्य रूप से, एक अंतरफलक है ICard, जो एक कार्ड वर्ग औजार ( public class Card056 : ICard) और जो समारोह है कि खेल से कहा जाता है शामिल हैं।

अब, बात पोषणीय / moddable बनाने के लिए, मैं डेटाबेस में स्रोत कोड के रूप में प्रत्येक कार्ड के लिए वर्ग है और अनिवार्य रूप से पहले उपयोग पर यह संकलन करना चाहते हैं। तो जब मैं जोड़ने / एक कार्ड बदलने के लिए, मैं सिर्फ यह डेटाबेस के लिए जोड़ सकते हैं और किसी भी विधानसभा तैनाती की जरूरत के बिना ताज़ा करने के लिए अपने आवेदन बताओ, करेंगे (खासकर जब से हम कार्ड जो विधानसभाओं के सैकड़ों का मतलब प्रति के बारे में 1 विधानसभा में बात कर किया जाएगा) ।

क्या यह संभव है? एक स्रोत फ़ाइल से एक वर्ग रजिस्टर और फिर इसे का दृष्टांत, आदि

ICard Cards[current] = new MyGame.CardLibrary.Card056();
Cards[current].OnEnterPlay(ref currentGameState);

भाषा सी #, लेकिन अतिरिक्त बोनस है, तो यह किसी भी .NET भाषा में स्क्रिप्ट लिखने के लिए संभव है।

02/08/2008 को 00:22
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


9 जवाब

वोट
37

ओलेग Shilo के सी # (कोड परियोजना पर स्क्रिप्ट समाधान ) वास्तव में अपने आवेदन में स्क्रिप्ट क्षमताओं प्रदान करने के लिए एक महान परिचय है।

एक अलग दृष्टिकोण एक भाषा है कि विशेष रूप से इस तरह के रूप स्क्रिप्टिंग के लिए बनाया गया है, विचार करने के लिए किया जाएगा IronRuby , IronPython , या लुआ

IronPython और IronRuby आज दोनों उपलब्ध हैं।

एम्बेड करने के लिए एक गाइड के लिए IronPython पढ़ 10 आसान चरणों में अपने मौजूदा अनुप्रयोग में IronPython स्क्रिप्ट समर्थन एम्बेड करने के लिए कैसे

लुआ आमतौर पर खेलों में इस्तेमाल एक पटकथा भाषा है। वहाँ CodePlex से नेट के लिए एक लुआ संकलक, उपलब्ध है - http://www.codeplex.com/Nua

यही कारण है कि codebase एक महान पढ़ा है अगर आप नेट में एक संकलक निर्माण के बारे में सीखना चाहते हैं।

एक अलग कोण पूरी तरह कोशिश करने के लिए है PowerShell । वहाँ एक आवेदन में PowerShell एम्बेड करने के कई उदाहरण हैं - यहाँ विषय पर एक संपूर्ण परियोजना है: Powershell सुरंग

02/08/2008 को 02:49
का स्रोत उपयोगकर्ता

वोट
7

आपको लगता है कि के लिए IronRuby उपयोग करने में सक्षम हो सकता है।

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

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

02/08/2008 को 05:18
का स्रोत उपयोगकर्ता

वोट
6

आप डीएलआर उपयोग करने के लिए आप कर सकते हैं नहीं करना चाहते हैं बू का उपयोग (जो एक दुभाषिया है) या आप विचार कर सकते हैं CodePlex पर Script.NET (एस #) परियोजना । बू समाधान के साथ आप संकलित स्क्रिप्ट या दुभाषिया का उपयोग कर के बीच चयन कर सकते हैं और एक अच्छा बू पटकथा भाषा बनाता है, एक लचीला वाक्य रचना और इसके मुक्त संकलक वास्तुकला के माध्यम से एक विस्तृत भाषा है। Script.NET भी अच्छा लग रहा है, हालांकि, और आप आसानी से एक ओपन सोर्स प्रोजेक्ट इसकी के रूप में उस भाषा का विस्तार के साथ-साथ हो सकता है और एक बहुत ही दोस्ताना संकलक जेनरेटर (का उपयोग करता Irony.net )।

06/08/2008 को 17:28
का स्रोत उपयोगकर्ता

वोट
5

मैं LuaInterface1.3 + लुआ 5.0 उपयोग कर रहा हूँ एक नेट 1.1 आवेदन के लिए।

बू के साथ मुद्दा यह है कि हर बार जब आप मक्खी पर / संकलन / eval अपने कोड को पार्स, यह बू वर्गों का एक समूह तैयार है ताकि आप मेमोरी लीक मिल जाएगा है।

दूसरे हाथ में लुआ, ऐसा नहीं है, इसलिए यह बहुत बहुत स्थिर है और अद्भुत काम करता है (मैं लुआ को और पीछे की ओर से सी # वस्तुओं पारित कर सकते हैं)।

अब तक मैं अभी तक उत्पादन में है यह नहीं डाल दिया है, लेकिन बहुत आशाजनक लगता है।

मैं LuaInterface + लुआ 5.0 का उपयोग कर उत्पादन में है मेमोरी लीक मुद्दों की क्या ज़रूरत थी , इसलिए मैं लुआ 5.2 इस्तेमाल किया और सी # DllImport साथ में सीधे जुड़े हुए हैं। मेमोरी लीक LuaInterface पुस्तकालय के अंदर थे।

लुआ 5.2: से http://luabinaries.sourceforge.net और http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/lua-5.2_Win32_dll7_lib.zip/download

एक बार मैं ऐसा किया, मेरे सभी मेमोरी लीक जा चुके थे और आवेदन बहुत स्थिर था।

17/07/2012 को 18:08
का स्रोत उपयोगकर्ता

वोट
5

मैं का उपयोग कर सुझाव देंगे LuaInterface के रूप में यह पूरी तरह से लुआ लागू किया गया है, जहां ऐसा लगता है कि नुआ पूरा नहीं हुआ है और संभावना कुछ बहुत ही उपयोगी कार्यक्षमता (coroutines, आदि) को लागू नहीं करता है।

आप बाहर prepacked लुआ मॉड्यूल में से कुछ का उपयोग करना चाहते हैं, तो मैं 1.5.x की लाइनों के रूप में है कि पूरी तरह से प्रबंधित कोड बनाता है और आवश्यक सी एपीआई का खुलासा नहीं कर सकते हैं 2.x श्रृंखला का विरोध करने के साथ कुछ का उपयोग कर सुझाव देना चाहेंगे।

17/09/2008 को 02:41
का स्रोत उपयोगकर्ता

वोट
5

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

02/08/2008 को 07:16
का स्रोत उपयोगकर्ता

वोट
4

मुख्य अनुप्रयोग है कि मेरी विभाजन बेचता है बहुत ग्राहक अनुकूलन प्रदान करने के लिए (जिसका मतलब है कि मैं किसी भी स्रोत पोस्ट नहीं कर सकते) कुछ ऐसा ही। (- वीबी क्योंकि अनुकूलन टीम किसी ASP पृष्ठभूमि से आया है चुना गया था, हालांकि किसी भी .NET भाषा आसानी से समर्थित किया जा सकता है) हम एक सी # अनुप्रयोग है कि गतिशील VB.NET स्क्रिप्ट लोड करता है।

का उपयोग करते हुए नेट के CodeDom हम डेटाबेस से स्क्रिप्ट संकलन वीबी का उपयोग कर, CodeDomProvider, (annoyingly यह नेट से 2 चूक आप 3.5 सुविधाओं का समर्थन करना चाहते हैं तो आप "CompilerVersion" अपने निर्माता के लिए = "v3.5" के साथ एक शब्दकोश में उत्तीर्ण होना )। का प्रयोग करें CodeDomProvider.CompileAssemblyFromSourceयह संकलित करने के लिए विधि (आप केवल स्मृति में संकलित करने के लिए मजबूर करने के लिए यह सेटिंग पारित कर सकते हैं।

यह स्मृति में विधानसभाओं के सैकड़ों में परिणाम होगा, लेकिन आप एक ही विधानसभा में एक साथ सभी गतिशील कक्षाओं 'कोड डाल सकता है, और बहुत पुनः संकलित करें जब कोई बदलाव। यह लाभ है कि आप एक साथ डिस्क पर संकलित करने के लिए एक झंडा जोड़ सकता है PDB , जब आप परीक्षण कर रहे हैं के लिए आप गतिशील कोड के माध्यम से डिबग करने के लिए अनुमति देता है।

10/08/2008 को 16:24
का स्रोत उपयोगकर्ता

वोट
4

हाँ, मैं इस बारे में विचार है, लेकिन मैं जल्द ही पता लगा कि एक और डोमेन-विशिष्ट-भाषा (डीएसएल) बहुत ज्यादा एक सा होगा।

मूलतः, वे संभवतः अप्रत्याशित तरीके से मेरी gamestate के साथ बातचीत करने की जरूरत है। उदाहरण के लिए, एक कार्ड "इस कार्ड खेलने दर्ज करते हैं, अपने सभी मरे minions उड़ान दुश्मनों के खिलाफ +3 का दौरा, जब दुश्मन आशीर्वाद दिया गया है को छोड़कर हासिल" एक नियम हो सकता था। के रूप में व्यापार कार्ड खेल आधारित बारी कर रहे हैं, GameState प्रबंधक घटनाओं OnStageX आग और कार्ड अन्य कार्ड या जो कुछ भी तरह से कार्ड की जरूरत में GameState को संशोधित करने देगा।

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

यही कारण है कि मैं अनिवार्य रूप से सिर्फ ईवेंट को सक्रिय और कार्ड जो कुछ भी तरह से gamestate (कोड पहुँच सुरक्षा की सीमाओं के भीतर) में हेरफेर करने देने के लिए सक्षम होने के लिए एक "वास्तविक" .NET भाषा के साथ रहना चाहता था।

02/08/2008 को 00:49
का स्रोत उपयोगकर्ता

वोट
3

नेट (5.0?) के अगले संस्करण जो प्रत्यक्ष स्क्रिप्ट मूल्यांकन जैसी चीजों को संभव बनाने के "एक सेवा के रूप में संकलक" खोलने के बारे में काफी चर्चा रही है।

27/11/2010 को 03:12
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more