Hozzátéve scripting funkciót .NET alkalmazások

szavazat
62

Van egy kis játék írt C #. Ez használ egy adatbázist, back-end. Ez egy kereskedelmi kártya játék , és azt akartam, hogy végre a funkció a kártyát a forgatókönyvet.

Ez alatt azt értem, hogy én alapvetően van egy felület, ICard, amely a kártya class munkagépek ( public class Card056 : ICard), és amely tartalmazza a funkció, hogy hívják a játékot.

Most, hogy a dolog fenntartható / moddable, azt szeretné, hogy az osztály minden kártyát, mint a forráskód az adatbázisban, és lényegében lefordítani az első használatkor. Tehát mikor kell hozzáadni / megváltoztatni a kártya, én csak hozzá az adatbázishoz, és mondd meg a kérelmet, hogy frissíteni kell, anélkül, bármilyen szerelvény telepítési (különösen azért, mert mi lenne beszélni 1 szerelvény egy kártyát, ami azt jelenti, több száz szerelvények) .

Ez lehetséges? Regisztráció egy osztály egy forrás fájlt, és két példányt is, stb

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

A nyelv a C #, de extra bónusz, ha ez lehetséges, hogy írni a forgatókönyvet bármely .NET nyelven.

A kérdést 02/08/2008 00:22
a forrás felhasználó
Más nyelveken...                            


9 válasz

szavazat
37

Oleg Shilo a C # Script oldatot (The Code Project ) valóban egy nagy bevezetés biztosítása script képességek az alkalmazás.

Egy másik megközelítés az lenne, hogy fontolja meg egy nyelv, amely kifejezetten épített script, például IronRuby , IronPython vagy Lua .

IronPython és IronRuby egyaránt kapható.

Egy útmutató, hogy beágyazó IronPython olvasni Hogyan kell beágyazni IronPython script támogatás a meglévő alkalmazás 10 egyszerű lépésben .

Lua egy programozási nyelv általánosan használt játékokat. Van egy Lua fordítóprogramot .NET-ről CodePlex - http://www.codeplex.com/Nua

Ez kódbázis nagyszerű olvasmány, ha azt szeretné, hogy megtudjuk, az épület egy fordító a .NET.

A másik irányból teljesen, hogy megpróbálja PowerShell . Számos példa beágyazó PowerShell egy alkalmazásba - itt egy alapos projekt a témáról: PowerShell Tunnel

Válaszolt 02/08/2008 02:49
a forrás felhasználó

szavazat
7

Lehet, hogy képes legyen használni IronRuby erre.

Egyébként én azt javasolnám, hogy van egy könyvtár, ahol helyet előre lefordított szerelvények. Akkor lehet hivatkozni a KT az összeszerelés és az osztály, és használja reflexió töltenie a megfelelő szerelvényeket futásidőben.

Ha igazán akarjuk lefordítani futási időben használhatja a CodeDOM, akkor jönne reflexió betölteni a dinamikus egységet. MSDN cikket, amely segíthet .

Válaszolt 02/08/2008 05:18
a forrás felhasználó

szavazat
6

Ha nem kívánja használni a DLR akkor használhatja Boo (amelynek tolmács) , vagy ha lehetne vizsgálni a Script.NET (S #) projekt CodePlex . A Boo megoldás között választhat összeállított script, vagy a tolmács, és Boo tesz egy szép programozási nyelv, egy rugalmas szintaxist és egy bővíthető nyelven keresztül nyitva fordító építészet. Script.NET néz ki túl, mégis, és akkor könnyen terjed ki, hogy a nyelv, valamint a nyílt forráskódú projekt, és használ egy nagyon barátságos Compiler generátor ( Irony.net ).

Válaszolt 06/08/2008 17:28
a forrás felhasználó

szavazat
5

Én a LuaInterface1.3 + Lua 5.0 NET 1.1 alkalmazást.

A probléma az, hogy Boo minden alkalommal, amikor elemezni / compile / eval a kódot a légy, hogy létrehoz egy sor bú osztályok, így kapsz memóriavesztés.

Lua Másrészt, nem tudja megtenni, így ez nagyon nagyon stabil, és működik csodálatos (tudom át objektumokat C # Lua és hátra).

Eddig nem betette PROD még, de úgy tűnik, nagyon ígéretes.

Én is memóriavesztés kérdések PROD segítségével LuaInterface + Lua 5.0 , ezért szoktam Lua 5.2 és közvetlenül kapcsolódik a C # a DllImport. A memóriavesztés bent voltak a LuaInterface könyvtárban.

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

Amint ezt tettem, az én memóriavesztés eltűntek, és az alkalmazás nagyon stabil volt.

Válaszolt 17/07/2012 18:08
a forrás felhasználó

szavazat
5

Azt javasoljuk, hogy használja LuaInterface hiszen maradéktalanul végrehajtotta Lua, ha úgy tűnik, hogy Nua nem teljes, és valószínűleg nem hajt végre néhány nagyon hasznos funkciók (korutinokat, stb.)

Ha szeretné használni néhány külső előrecsomagolt Lua modulok, azt javasoljuk, hogy használja valami mentén a 1.5.x szemben a 2.x sorozat, amely épít teljesen menedzselt kód, és ne tegye ki a szükséges C API-t.

Válaszolt 17/09/2008 02:41
a forrás felhasználó

szavazat
5

Lehet használni bármelyik DLR nyelvek, amelyek a módja annak, hogy valóban könnyen befogadó saját scripting platform. Azonban, ha nem kell használni egy programozási nyelv erre. Lehet használni C #, és fordítsuk le a C # kódot szolgáltatót. Mindaddig, amíg betölti a saját AppDomain, akkor ki- és berakodása, hogy a szíved tartalmát.

Válaszolt 02/08/2008 07:16
a forrás felhasználó

szavazat
4

A fő alkalmazási hogy a szétválás adja csinál valami nagyon hasonló, így az ügyfél hozása (ami azt jelenti, hogy nem küldhet bármilyen forrásból). Van egy C # alkalmazás, amely betölti a dinamikus VB.NET script (bár minden .NET nyelven könnyen lehetett támogatni - VB-t választottuk, mert a testreszabási csapat jött egy ASP háttér).

Használata .NET CodeDom összeállítjuk a szkriptek adatbázis segítségével a VB CodeDomProvider(idegesítően akkor alapértelmezés szerint a .NET 2, ha azt szeretné, hogy támogassák 3.5 funkciókat meg kell felelnie egy szótárt „CompilerVersion” = „v3.5” annak kivitelező ). A következő CodeDomProvider.CompileAssemblyFromSourcemódszer az összeállításhoz (akkor adja át a beállításokat kényszeríteni, hogy összeállítja a memóriában csak.

Ez azt eredményezné, hogy több száz szerelvények a memóriában, de meg tudná tenni a dinamikus osztályok kódját össze egyetlen szerelvény, és fordítsuk újra az egészet, ha bármilyen változást. Ennek az az előnye, hogy felvehet egy zászló összeállításához lemezen egy PDB , ha éppen teszteli, amely lehetővé teszi, hogy debug a dinamikus kódot.

Válaszolt 10/08/2008 16:24
a forrás felhasználó

szavazat
4

Igen, én is gondoltam, de hamar rájött, hogy egy másik domain-specifikus nyelvek (DSL) lenne egy kicsit túl sok.

Lényegében kell lépniük az én játékállapot az esetleg előre nem látható módon. Például egy kártya is van egy szabály „Amikor ez a kártya játékba, minden élőhalott csatlósai szert 3 támadás repülő ellenségek, kivéve, ha az ellenség áldott”. Mivel kereskedelmi kártya játékok körökre, a játékállapot menedzser tüzet OnStageX események és hagyja, hogy a kártyák módosíthat más kártyák, vagy a játékállapot bármilyen módon a kártya igényeinek.

Ha megpróbál létrehozni egy DSL, azt végre kell hajtania egy meglehetősen nagy funkcionalitás, esetleg folyamatosan frissíteni, ami eltolja a karbantartási munkát egy másik részét anélkül, hogy ténylegesen eltávolítja.

Ezért akartam, hogy maradjon egy „igazi” .NET nyelv lényegében képes csak tűz esetén, és hagyja, hogy a kártya manipulálni a játékállapot bármilyen módon (korlátain belül a kód hozzáférést biztonság).

Válaszolt 02/08/2008 00:49
a forrás felhasználó

szavazat
3

A következő változat .NET (5.0?) Volt egy csomó beszélnek megnyitja a „fordítóprogram mint szolgáltatás”, ami a dolgok, mint a közvetlen script értékelés lehetséges.

Válaszolt 27/11/2010 03:12
a forrás felhasználó

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