от
У меня есть небольшая игра, написанная на C#. Он использует базу данных в качестве бэк-конец. Это коллекционная карточная игра, и я хотел реализовать функцию карты в качестве сценария. Я к тому, что я, по сути, иметь интерфейс,
ICard
, что класс карты реализует (
public class Card056: ICard
) и которая содержит функцию, которая вызывается в игре. Теперь, чтобы сделать вещи ремонтопригодны/изменяемой, я хотел бы иметь класс для каждой карты, так как исходный код в базе данных и по существу скомпилировать его при первом использовании. Поэтому, когда мне нужно добавить/изменить карту, я просто добавьте его в базу и скажи мое приложение для обновления, без необходимости развертывания сборки (тем более, что мы будем говорить о 1 ассамблея на карту, которая означает сотни сборок). Это возможно? Зарегистрировать класс из исходного файла, а затем создать его экземпляр и т. д.
ICard Cards[current] = new MyGame.CardLibrary.Card056();
Cards[current].OnEnterPlay(ref currentGameState);
Язык C#, но дополнительный бонус, если это возможно, чтобы написать сценарий в любом .Чистый язык.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

10 Ответы

0 голосов
от
У меня есть небольшая игра, написанная на C#. Он использует базу данных в качестве бэк-конец. Это коллекционная карточная игра, и я хотел реализовать функцию карты в качестве сценария. Я к тому, что я, по сути, иметь интерфейс,
ICard
, что класс карты реализует (
public class Card056: ICard
) и которая содержит функцию, которая вызывается в игре. Теперь, чтобы сделать вещи ремонтопригодны/изменяемой, я хотел бы иметь класс для каждой карты, так как исходный код в базе данных и по существу скомпилировать его при первом использовании. Поэтому, когда мне нужно добавить/изменить карту, я просто добавьте его в базу и скажи мое приложение для обновления, без необходимости развертывания сборки (тем более, что мы будем говорить о 1 ассамблея на карту, которая означает сотни сборок). Это возможно? Зарегистрировать класс из исходного файла, а затем создать его экземпляр и т. д.
ICard Cards[current] = new MyGame.CardLibrary.Card056();
Cards[current].OnEnterPlay(ref currentGameState);
Язык C#, но дополнительный бонус, если это возможно, чтобы написать сценарий в любом .Чистый язык.
0 голосов
от
Решение с сценарий Олег Шайло# (проект Кодекса) действительно является прекрасным введением в предоставлении способности скрипта в приложении. Другой подход к рассмотрению языка, который специально построен для сценариев, таких как IronRuby, установить IronPython, или Lua. IronPython и IronRuby доступны сегодня. Руководство для встраивания установить IronPython читать Как врезать установить IronPython поддержка скриптов в ваши существующие приложения в 10 простых шагов. Lua-это скриптовый язык часто используется в играх. Есть компилятор для Lua .Чистый, доступный из CodePlex -- http://www.codeplex.com/Nua Что codebase-это отличное чтение, Если вы хотите узнать больше о построении компилятора .Чистая. Совершенно другой стороны, чтобы попробовать в PowerShell. Существует множество примеров внедрения PowerShell в приложение ... здесь подробный проект на тему: Тоннель В PowerShell
0 голосов
от
Вы могли бы использовать IronRuby для этого. В противном случае я предлагаю вам каталог, в котором вы размещаете скомпилированных сборок. Тогда вы могли бы иметь ссылку в БД на сборку и класс, и использовать отражение, чтобы загрузить соответствующие сборки во время выполнения. Если вы действительно хотите, чтобы компиляции во время выполнения, вы могли бы использовать модель codedom, то вы могли бы использовать отражение, чтобы загрузить динамическую сборку. Майкрософт документацию, которая может помочь.
0 голосов
от
Если вы не хотите использовать ЭБР можно использовать Бу (есть переводчик) или вы могли бы рассмотреть Script.NET (с#) проекта на CodePlex. С решением Бу вы можете выбрать между скомпилированных скриптов или с помощью переводчика, и Бух делает хороший скриптовый язык, имеет гибкую и синтаксиса расширяемого языка через его открытую архитектуру компилятора. Script.NET хотя тоже выглядит красиво, и вы можете легко расширить этот язык, как его проект с открытым исходным кодом и использует очень дружелюбный генератора компилятора (Irony.net).
0 голосов
от
Вы можете использовать любой из ЭБР языки, которые обеспечивают возможность очень легко разместить свой собственный платформенность. Однако, вы не должны использовать язык сценариев для этого. Вы могли бы использовать C# и скомпилировать его с поставщику код#. Как долго, как вы загрузите его в своем собственном домене приложения, вы можете загрузить и выгрузить его к содержанию вашего сердца.
0 голосов
от
Я хотел бы предложить, используя LuaInterface как он полностью реализован на языке Lua, где выясняется, что Нуа-это не полная и скорее всего не реализует некоторые очень полезные функции (сопрограмм и т. д.). Если вы хотите использовать некоторые из внешних расфасованной модули Lua, я хотел бы предложить, используя что-то вдоль линий 1.5.х в отличие от 2.серии X, которая строит полностью управляемый код и не могу выставить нужное с API.
0 голосов
от
Я использую LuaInterface1.3 на Lua 5.0 для чистой и 1.1 приложение. Проблема с Бу заключается в том, что каждый раз, когда вы разбора/компиляции/анализ кода на лету, оно создает набор классов, БУ, так что вы получите утечки памяти. Lua В С другой стороны, не делать этого, так что это очень стабильная и работает очень хорошо (я могу передавать объекты из C# в LUA и обратно). До сих пор я не поставил его в прод, но представляется весьма перспективным. У меня были проблемы утечек памяти в прод используя LuaInterface Луа 5.0, поэтому я использовал Луа 5.2 и связан напрямую в C# с помощью атрибута DllImport. Утечки памяти были в библиотеке LuaInterface. Луа 5.2: от http://luabinaries.sourceforge.net и http://sourceforge.net/projects/luabinaries/files/5.2/Windows Libraries/Dynamic/lua-5.2_Win32_dll7_lib.zip/download Как только я это сделал, все мои утечек памяти не было и приложение было очень стабильный.
0 голосов
от
Основное применение, что мой отдел продает делает что-то очень похожее для предоставления клиентских настройках (что означает, что я не могу размещать какие-либо источника). У нас есть приложение C#, который загружает динамические скрипты VB.NET (хотя любой .Net-язык может быть легко поддерживается - VB был выбран потому, что команда настройки пришли от АСП фоне). Используя .Codedom в сети мы компилируем скрипты из базы данных, с помощью VB
CodeDomProvider
(досадно, он по умолчанию .Объем 2, Если вы хотите поддержать 3.5 функции нужно передать словарь "CompilerVersion" = "В3.5" в своем конструкторе). Используйте метод
CodeDomProvider.CompileAssemblyFromSource
скомпилировать его (вы можете передать параметры, чтобы заставить его компилировать только в памяти. В результате этого сотни сборок в памяти, но вы можете поместить весь код динамический классов объединены в единую сборку, и перекомпилировать всю партию при любом изменении. Это имеет то преимущество, что вы могли бы добавить флаг компиляции на диске с pdb для При тестировании, что позволяет отлаживать через динамический код.
0 голосов
от
Да, я думал об этом, но вскоре я понял, что другой домен-специфичных языках (DSL) или будет многовато. По сути, они должны взаимодействовать с моим состояние игры в возможно непредсказуемым образом. Например, карта может иметь правило "когда карты выходят играть, все Вашего нежити миньонов усиление атаки 3 против летающих врагов, за исключением, когда враг благословил". В качестве карточной игры пошаговая, диспетчер состояние игры будет генерировать события OnStageX и пусть карты изменять другие карты или состояние игры в карты должен. Если я пытаюсь создать DSL, мне надо выполнить достаточно большой набор функций и, возможно, постоянно обновлять его, который смещает ремонтные работы в другую часть, не удаляя ее. Вот почему я хотел остаться с "Реалом" .Net-язык, по сути, сможет только огонь событие и пусть карта манипулировать состояние игры любым способом (в рамках безопасности доступа к коду).
0 голосов
от
Следующей версии .Чистый (5.0?) было много разговоров об открытии "компилятор как сервис", которая позволит сделать такие вещи, как прямые оценки сценариев возможных.
...