.NET uygulamaları için komut dosyası işlevselliği ekleme

oy
62

Ben C # ile yazılmış küçük bir oyun var. Bu arka uç olarak bir veritabanı kullanır. Bu bir var ticaret kart oyunu ve bir komut dosyası olarak kartların işlevi uygulamak istedi.

Demek istediğim aslında bir arabirim, olması ICard, bir kart sınıfının uyguladığı ( public class Card056 : ICardoyun tarafından denir işlevini içeren) ve.

Şimdi, bir şey / sürdürülebilir moddable sağlamayı, ben veritabanında kaynak kodu olarak her kart için sınıf var ve esasen ilk kullanımda derlemek istiyoruz. Eklemem / bir kart değiştirmek zorunda zaman, ben sadece veritabanına ekleriz ve herhangi montaj dağıtım ihtiyaç duymadan, yenilemek için başvurumu anlatmak (özellikle biz meclisleri yüzlerce demektir kart başına yaklaşık 1 takımını konuşuyor olurdu beri) .

Mümkün mü? örnekleriz sonra kaynak dosyadan bir sınıf Kayıt ve vb

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

herhangi .NET dilinde senaryo yazmaya mümkünse dili C # ama ekstra bonus.

Oluştur 02/08/2008 saat 00:22
kaynak kullanıcı
Diğer dillerde...                            


9 cevaplar

oy
37

Oleg Shilo'nun C # (Kod Projesi'nde Senaryo çözümü ) gerçekten uygulamanızda komut yeteneklerini sağlayan harika bir giriştir.

Farklı bir yaklaşım özellikle gibi, komut dosyası için inşa edilen bir dil düşünün olacaktır IronRuby , IronPython veya Lua .

IronPython ve IronRuby hem bugün mevcuttur.

Gömme bir kılavuz için IronPython okunan 10 kolay adımda mevcut uygulamasında IronPython komut desteği nasıl gömülür? .

Lua yaygın oyunlarda kullanılan bir kodlama dilidir. CodePlex kullanılabilir .NET için Lua derleyici vardır - http://www.codeplex.com/Nua

NET'te bir derleyici bina öğrenmek istiyorsanız bu kod temeli büyük bir okuma.

Farklı bir açı tamamen denemektir PowerShell . Bir uygulamaya PowerShell gömme sayısız örnekler vardır - burada konu hakkında ayrıntılı bir proje: Powershell Tünel

Cevap 02/08/2008 saat 02:49
kaynak kullanıcı

oy
7

Bunun için IronRuby kullanmak mümkün olabilir.

Aksi takdirde size önceden derlenmiş meclisleri yerleştirmek bir dizin var öneririm. Sonra montaj ve sınıfa DB başvuru olması ve zamanında uygun meclisleri yüklemek için yansıma kullanabilirsiniz.

Gerçekten CodeDOM kullanabilirsiniz çalışma zamanında derlemek istiyorsanız, o zaman dinamik derleme yükleme yansıması kullanabilirsiniz. Yardımcı olabilecek MSDN makale .

Cevap 02/08/2008 saat 05:18
kaynak kullanıcı

oy
6

Eğer yapabilirsiniz DLR kullanmak istemiyorsanız Boo kullanmak (bir tercüman olan) veya size düşünebiliriz Codeplex üzerinde Script.NET (S #) projesi . Boo çözümü ile derlenmiş komut dosyaları veya tercüman kullanma arasında seçim yapabilir ve Boo, güzel betik dili yapan esnek bir sözdizimi ve açık derleyici mimarisi yoluyla genişletilebilir dili vardır. Script.NET olsa da güzel görünüyor ve kolayca onun yanı sıra bir açık kaynak projesi o dili uzayabilir ve çok samimi bir Derleyici Generator (kullanmaktadır Irony.net ).

Cevap 06/08/2008 saat 17:28
kaynak kullanıcı

oy
5

Ben bir NET 1.1 uygulaması için LuaInterface1.3 + Lua 5.0 kullanıyorum.

Boo ile sorun, bellek sızıntılarını alacak böylece anında / derleme / eval kodunuzu ayrıştırmak her zaman, boo sınıfları kümesi oluşturur olmasıdır.

Lua diğer elinde, çok çok stabil ve harika çalışıyor bu yüzden (ben Lua ve geriye C # nesneleri geçebilir), bunu yapmaz.

Şimdiye kadar henüz PROD koydum, ama çok umut verici görünüyor değil.

Ben LuaInterface + Lua 5.0 kullanarak PROD bellek sızıntıları sorunları var mı nedenle ben Lua 5.2 kullanılmış ve Dllımport ile C # doğrudan bağlantılıdır. Bellek sızıntıları LuaInterface kütüphane içinde idi.

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

Bunu yapan sonra, tüm hafızam sızıntıları gitmişti ve uygulama çok stabil oldu.

Cevap 17/07/2012 saat 18:08
kaynak kullanıcı

oy
5

Ben kullanarak öneririm LuaInterface tamamen bazı çok yararlı işlevler (coroutines, vs) uygulamıyor olasılıkla Nua tam olmadığını göründüğü yerde Lua uygulanmış ve olduğu gibi.

Dışarıda prepacked Lua modüllerin bazı kullanmak istiyorsanız, ben tamamen yönetilen kod oluşturur ve gerekli C API maruz olamaz 2.x serisi aksine 1.5.x çizgisinde bir şey kullanmanızı öneririz.

Cevap 17/09/2008 saat 02:41
kaynak kullanıcı

oy
5

Gerçekten kolayca kendi komut dosyası platformunu barındırmak için bir yol sağlar DLR dillerin herhangi kullanabilirsiniz. Ancak, bunun için bir kodlama dili kullanmak zorunda değilsiniz. Sen C # kullanmak ve C # kodu sağlayıcısı ile derlemek olabilir. Sürece kendi AppDomain yükleyecek şekilde, yüklemek ve kalp içeriğiyle bunu boşaltın.

Cevap 02/08/2008 saat 07:16
kaynak kullanıcı

oy
4

benim bölümün satan ana uygulama (herhangi bir kaynak gönderemezsiniz anlamına gelir) istemci özelleştirmeler sağlamak çok benzer bir şey yapar. (- özelleştirme ekibi bir ASP altyapısından geldiklerinden VB seçildi herhangi NET dili kolayca desteklenen olabilir) Dinamik VB.NET komut dosyalarını yükleyen bir C # uygulaması var.

Kullanılması NET'in CodeDom biz VB kullanarak, veritabanından komut derlemek CodeDomProviderEğer 3.5 özellikleri desteklemek istiyorsanız onun kurucusuna "CompilerVersion" = "v3.5" bir sözlük geçmesi gerekiyor, (NET 2'ye rahatsız edici o varsayılan ). Kullan CodeDomProvider.CompileAssemblyFromSourceonu derlemeye yöntemi (yalnızca bellekte derlemek için zorlamak için ayarları geçebilir.

Bu bellekte meclislerinin yüzlerce neden olacaktır, ancak tek bir montaj içine hep birlikte dinamik sınıfların kodu koymak ve ne zaman herhangi bir değişiklik sürü yeniden derlemek olabilir. Bu, bir ile diskte derlemek için bir bayrak ekleyebilirsiniz avantaja sahiptir PDB dinamik kodu ile ayıklamak için izin, test ettiğiniz zaman için.

Cevap 10/08/2008 saat 16:24
kaynak kullanıcı

oy
4

Evet, bunu düşündüm, ama yakında başka Alana Özel-Dil (DSL) biraz fazla olacağını anladım.

Esasen, muhtemelen tahmin edilemeyecek bir şekilde benim gamestate ile etkileşim gerekir. Örneğin, bir kart "Bu kartlar oyun girdiğinizde, tüm ölümsüz kölelerinin düşman kutsanmış dışında uçan düşmanlara karşı 3 saldırısını kazanmak" bir kural olabilir. ticaret kart oyunları turn tabanlı olduğundan, GameState Yöneticisi olayları OnStageX yangın ve kartlar diğer kartları veya ne şekilde olursa olsun kart ihtiyaçlarını GameState değişiklik yapmalarına izin verilir.

Bir DSL oluşturmaya çalışırsanız, oldukça büyük bir özellik seti uygulamak zorunda ve muhtemelen sürekli aslında kaldırmadan başka bir bölümüne bakım çalışması değiştirdiği, güncellemek.

Ben aslında sadece olayı ve kart (kod erişim güvenliğinin sınırları içinde) her ne şekilde gamestate manipüle izin edebilmek için "gerçek" bir .NET dili ile kalmak istedim bu yüzden.

Cevap 02/08/2008 saat 00:49
kaynak kullanıcı

oy
3

.NET (5.0?) Bir sonraki sürümü doğrudan komut değerlendirilmesi gibi şeyler mümkün kılacak "bir hizmet olarak derleyici" açma konusunda konuşmak çok şey olmuştur.

Cevap 27/11/2010 saat 03:12
kaynak kullanıcı

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