এনটিটি অ্যাপ্লিকেশন থেকে স্ক্রিপ্টিং কার্যকারিতা যোগ করা

আমি একটি সামান্য খেলা C# লিখিত আছে। এটি ব্যাক-এন্ড হিসাবে ডাটাবেস ব্যবহার করে এটা একটি ট্রেডিং কার্ড গেম , এবং আমি একটি স্ক্রিপ্ট হিসাবে কার্ডগুলির কার্য সম্পাদন করতে চেয়েছিলাম।

আমি কি বলতে চাচ্ছি আমি মূলত একটি ইন্টারফেস, <�কোড> ICard , যা একটি কার্ড শ্রেণী প্রয়োগ করে ( পাবলিক ক্লাস কার্ড056: ICard ) এবং এতে রয়েছে ফাংশন যা খেলা দ্বারা বলা হয়।

এখন, জিনিসটি রক্ষণাবেক্ষণ / মোডডেবেল করতে, আমি প্রতিটি কার্ডের ডাটাবেসে সোর্স কোড হিসাবে শ্রেণীবদ্ধ করতে চাই এবং প্রাথমিকভাবে এটি প্রথম ব্যবহারের উপর কম্পাইল করতে পারি। সুতরাং যখন আমি একটি কার্ড যোগ / পরিবর্তন করতে চাই, তখন আমি এটি ডাটাবেসের মধ্যে যুক্ত করব এবং রিফ্রেশ করার জন্য আমার আবেদনটি বলব, যে কোনও সমাবেশ স্থাপনের দরকার নেই (বিশেষ করে যেহেতু আমরা কার্ডের 1 টি সমাবেশের কথা বলছি যা শত শত অ্যাসেম্বলিগুলির মানে) ।

এটা কি সম্ভব? একটি সোর্স ফাইল থেকে একটি ক্লাস নিবন্ধন এবং তারপর এটি তাত্পর্যপূর্ণ, ইত্যাদি।

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

কোনও .নেট ভাষাতে স্ক্রিপ্টটি লিখতে যদি সম্ভব হয় তবে ভাষাটি সি # তবে অতিরিক্ত বোনাস।

0
যোগ সম্পাদিত
মতামত: 1
@এমটিটিটমো না, কিছু বাকি নেই, এটি আসলেই প্রথম পর্যায়ে ছিল এবং মূলত আমি উপরে বর্ণিত মত কাজ করছিলাম। আজকাল, আমি C# সংকলন করার জন্য Roslyn দেখবো: blogs.msdn.com/b/csharpfaq/archive/2011/10/19/… - বিকল্পভাবে, জিন্ট ব্যবহার করে জাভাস - jint.codeplex.com
যোগ লেখক Michael Stum, উৎস
যে মজার, আমি এবং একটি বন্ধু C# একটি ট্রেডিং কার্ড গেম লেখার চিন্তা ছিল ফিরে যখন একটি, আপনি এখনও এই জন্য উত্স আছে অনুমান না? আপনি এই কিভাবে যোগাযোগ ছিল উপর আগ্রহী
যোগ লেখক mattytommo, উৎস
আঃ ধন্যবাদ, কিন্তু আমি ট্রেডিং কার্ড গেমটি এবং আপনার ব্যবহৃত কাঠামোটি স্ক্রিপ্টিং ইঞ্জিনের বিরোধিতা করার জন্য আরও বেশি খুঁজছেন। যাই হোক ধন্যবাদ :)
যোগ লেখক mattytommo, উৎস

9 উত্তর

হ্যাঁ, আমি এই বিষয়ে চিন্তা করেছি, কিন্তু শীঘ্রই আমি বুঝতে পেরেছি যে অন্য ডোমেন-নির্দিষ্ট-ভাষা (ডিএসএল) একটি বিট খুব বেশি হবে

মূলত, তাদের সম্ভাব্য অনির্দেশ্য উপায়ে আমার gamestate সঙ্গে যোগাযোগ করতে হবে। উদাহরণস্বরূপ, একটি কার্ডের একটি নিয়ম হতে পারে "যখন এই কার্ডগুলি খেলার মধ্যে প্রবেশ করে, আপনার সমস্ত undines minions + উড়ন্ত শত্রুদের বিরুদ্ধে 3 আক্রমণ লাভ করে, যখন শত্রু আশীর্বাদ ছাড়াই"। ট্রেডিং কার্ড গেম টার্ন ভিত্তিক হিসাবে, GameState ম্যানেজার OnStageX ইভেন্ট গুলি হবে এবং কার্ডগুলি প্রয়োজন যাই হোক না কেন কার্ড অন্যান্য কার্ড বা GameState পরিবর্তন করা যাক।

যদি আমি একটি ডিএসএল তৈরি করতে চেষ্টা করি, তবে আমি একটি বড় বড় বৈশিষ্ট্য সেটটি বাস্তবায়ন করতে পারি এবং সম্ভবত এটি ক্রমাগত আপডেট করতে পারি, যা প্রকৃতপক্ষে এটি অপসারণ না করে অন্য অংশে রক্ষণাবেক্ষণের কাজটি বদলাচ্ছে।

এজন্যই আমি "রিয়েল" নেট নেটওয়ার্কে থাকতে চেয়েছিলাম যা মূলত ইভেন্টটিকে আগুনে দমন করতে সক্ষম হতো এবং কোডটি যেকোনো উপায়ে (কোড অ্যাক্সেস সিকিউরিটি সীমাবদ্ধতার মধ্যে) হস্তগত করতে পারে।

0
যোগ
(এটি ফ্ল্যাগ করার প্রয়োজন নেই; এই একটি মন্তব্য / উত্তর আপডেট হওয়া উচিত, কিন্তু গ্র্যান্ডফিল্ড আগে যারা অপশন থেকে ছিল)
যোগ লেখক Will, উৎস

Oleg Shilo's C# Script solution (at The Code Project) really is a great introduction to providing script abilities in your application.

স্ক্রিপ্টিংয়ের জন্য বিশেষভাবে নির্মিত একটি ভাষা বিবেচনা করা একটি ভিন্ন পদ্ধতি, যেমন IronRuby , < a href = "http://en.wikipedia.org/wiki/IronPython" rel = "noreferrer"> IronPython , বা লুয়া

IronPython এবং IronRuby উভয় আজই উপলব্ধ।

IronPython এম্বেড করার জন্য একটি নির্দেশিকা পড়ুন 10 টি সহজ পদক্ষেপে আপনার বিদ্যমান অ্যাপে IronPython স্ক্রিপ্ট সমর্থন কীভাবে এম্বেড করবেন

Lua is a scripting language commonly used in games. There is a Lua compiler for .NET, available from CodePlex -- http://www.codeplex.com/Nua

যদি আপনি একটি কম্পাইলার NET তৈরির বিষয়ে জানতে চান তবে কোডব্যাজটি একটি দুর্দান্ত পঠন।

A different angle altogether is to try PowerShell. There are numerous examples of embedding PowerShell into an application -- here's a thorough project on the topic: Powershell Tunnel

0
যোগ
উপায় দ্বারা, আমি গৃহীত উত্তর হিসাবে এই নির্বাচিত করেছি কারণ আমি পাইথন এবং IronPython এ loo চেয়েছিলেন তাই, তাই IronPython পদ্ধতি আমার জন্য ভাল কাজ করে।
যোগ লেখক Michael Stum, উৎস
LuaInterface একটি lua দোভাষী যা চমত্কার হিসাবে ভাল কাজ করে।
যোগ লেখক RCIX, উৎস
আমি 09 নভেম্বর একটি ওয়ার্কফ্লো সিস্টেমের মধ্যে সি # স্ক্রিপ্ট বাস্তবায়িত। এটি আমাদের জন্য সত্যিই ভাল সঞ্চালিত হয়েছে।
যোগ লেখক David Robbins, উৎস

আপনি যে জন্য IronRuby ব্যবহার করতে সক্ষম হতে পারে।

অন্যথায় আমি চাই আপনি একটি ডিরেক্টরি আছে যেখানে আপনি precompiled সমাহারগুলি স্থাপন। তারপর আপনি ডিবি মধ্যে সমাবেশ এবং বর্গ একটি রেফারেন্স থাকতে পারে, এবং রানটাইম সময়ে সঠিক সমাহার লোড প্রতিফলন ব্যবহার।

আপনি যদি সত্যিই চালানোর সময় কম্পাইল করতে চান তবে আপনি কোডডোম ব্যবহার করতে পারেন, তারপর আপনি গতিশীল সমাবেশ লোড করার জন্য প্রতিচ্ছবি ব্যবহার করতে পারেন। সহায়তা করতে পারে এমন MSDN নিবন্ধ

0
যোগ

মূল বিভাজন যা আমার বিভাগটি বিক্রি করে ক্লায়েন্ট কাস্টমাইজেশন প্রদানের অনুরূপ কিছু করে (যার মানে হল যে আমি কোন উৎস পোস্ট করতে পারি না)। আমরা একটি C# অ্যাপ্লিকেশন আছে যা ডায়নামিক VB.NET স্ক্রিপ্ট লোড করে (যদিও কোনও। NET ভাষা সহজেই সমর্থিত হতে পারে - VB নির্বাচিত হয়েছে কারণ কাস্টমাইজেশন টিম একটি ASP ব্যাকগ্রাউন্ড থেকে এসেছে)।

.NET এর কোডডম ব্যবহার করে আমরা VB CodeDomProvider ব্যবহার করে ডাটাবেস থেকে স্ক্রিপ্টগুলি কম্পাইল করি (annoyingly এটি .net 2 এর ডিফল্ট, যদি আপনি 3.5 টি বৈশিষ্ট্যাবলী সমর্থন করতে চান তবে আপনাকে "কম্পাইলার" সহ একটি অভিধান পাস করতে হবে = "v3.5" এর কনস্ট্রাকটর)। এটি সংকলন করার জন্য CodeDomProvider.CompileAssemblyFromSource পদ্ধতিটি ব্যবহার করুন (আপনি কেবল মেমরি কম্পাইল করার জন্য এটি জোর করে সেটিংস পাস করতে পারেন।

এই মেমরি শত শত সমাবেশগুলি ফলাফল হবে, কিন্তু আপনি একটি একক সমাবেশে সব গতিশীল ক্লাস 'কোড একসাথে রাখা, এবং কোন পরিবর্তন যখন পুরো অনেক recompile পারে। এটির সুবিধা রয়েছে যে আপনি যখন একটি ডিস্কের সাথে কম্পাইল করতে পারেন তখন আপনি PDB এর জন্য একটি পতাকা যুক্ত করতে পারেন। 'ডায়নামিক কোডের মাধ্যমে আপনি ডিবাব করতে পারবেন।

0
যোগ

NET এর পরবর্তী সংস্করণ (5.0?) "একটি পরিষেবা হিসাবে কম্পাইলার" খোলা সম্পর্কে অনেক আলোচনা আছে যা সরাসরি স্ক্রিপ্ট মূল্যায়ন মত জিনিস করতে হবে সম্ভব।

0
যোগ
হ্যাঁ। যদিও Roslyn দিগন্তে এখনও আছে, Mono.CSharp (NuGet- এ উপলব্ধ) সমস্ত একই কার্যকারিতা প্যাকগুলি।
যোগ লেখক Eric Falsken, উৎস
প্রাসঙ্গিক আপডেটগুলি রাখা একটি আপডেট যোগ করা:। NET কম্পাইলার প্ল্যাটফর্ম ("Roslyn") উপলব্ধ। তাই এটি অন্য একটি অন্যদের জন্য একটি কার্যকর বিকল্প উল্লিখিত। github.com/dotnet/roslyn
যোগ লেখক Riv, উৎস
আমি এই Roslyn বোঝা বিশ্বাস করি? en.wikipedia.org/wiki/Microsoft_Roslyn
যোগ লেখক Stephen Kennedy, উৎস
0
যোগ

আপনি DLR ভাষার কোনও ভাষা ব্যবহার করতে পারেন, যা সত্যিই আপনার নিজের স্ক্রিপ্টিং প্ল্যাটফর্ম হোস্ট করার একটি উপায় প্রদান করে। যাইহোক, আপনাকে এই জন্য একটি স্ক্রিপ্টিং ভাষা ব্যবহার করতে হবে না। আপনি C# ব্যবহার করে C# কোড প্রদানকারী এর সাথে কম্পাইল করতে পারেন। যতক্ষণ পর্যন্ত আপনি এটি নিজের অ্যাপডোমনে লোড করেন, ততক্ষণ আপনি এটি আপনার হৃদয়ের বিষয়বস্তুতে লোড ও আনলোড করতে পারেন।

0
যোগ

আমি LuaInterface ব্যবহার করে বলতে চাই যে এটি সম্পূর্ণভাবে Lua প্রয়োগ করেছে যেখানে এটি প্রদর্শিত হয়েছে যে নুয়া সম্পূর্ণ এবং সম্ভাব্য নয় কিছু খুব দরকারী কার্যকারিতা (coroutines, ইত্যাদি) বাস্তবায়ন করে না

যদি আপনি বাইরের কিছু prepacked Lua মডিউল ব্যবহার করতে চান তবে আমি 1.5x লাইনের মত কিছু ব্যবহার করে বলতে চাই যে সম্পূর্ণরূপে পরিচালিত কোড তৈরি করে এবং প্রয়োজনীয় সি API কে প্রকাশ করতে পারে না।

0
যোগ

I'm using LuaInterface1.3 + Lua 5.0 for a NET 1.1 application.

বোরোর সাথে ইস্যুটি হল যে প্রত্যেক সময় আপনি আপনার কোডটি উচ্চারণ / সংকলন করে / উত্তোলন করে আপনার কোডটি বিলোপ করে, এটি একটি বুও ক্লাস তৈরি করে যাতে আপনি মেমরির লিক পাবেন।

অন্যদিকে Lua, এটা না, তাই এটি খুব স্থিতিশীল এবং চমৎকার কাজ করে (আমি Cua থেকে বস্তু পাস করতে পারেন Lua এবং পিছন পিছনে)।

এখনো পর্যন্ত আমি এটিকে PROD- এ এখনো রাখিনি, কিন্তু খুব আশাবাদী মনে হচ্ছে।

I did have memory leaks issues in PROD using LuaInterface + Lua 5.0, therefore I used Lua 5.2 and linked directly into C# with DllImport. The memory leaks were inside the LuaInterface library.

Lua 5.2: from http://luabinaries.sourceforge.net and http://sourceforge.net/projects/luabinaries/files/5.2/Windows%20Libraries/Dynamic/lua-5.2_Win32_dll7_lib.zip/download

একবার আমি এটা করেছিলাম, আমার সব মেমরির লিক চলে গেছে এবং অ্যাপ্লিকেশন খুব স্থিতিশীল ছিল।

0
যোগ