Я работаю с командой на RPG-движке в C# и XNA. Мы планируем ориентироваться на Windows и Windows Phone 7, но сталкиваемся с проблемами взаимодействия с AI и контролируем действия игроков во время роликов. В основном, все извлекается с использованием шаблона проектирования MVC, но абстрагирование всей логики и перемещение в контроллер может привести к проблемам. Поэтому идея состоит в том, чтобы иметь интерфейс (IScriptEngine), который принимает объект IScriptObject и соответственно обновляет данные в модели карты. Я думал о вводе сценариев в XML виде синтаксиса:Реализация простого языка Scripting Language на основе XML для игры XNA
<Script Name="MoveNPC_1">
<Action Command="MoveToTile" Target="NPC_1" Value="10,2"/>
</Script>
И имею IScriptEngine разобрать его соответствующим образом. Я очень сомневаюсь, что синтаксический анализ в заявлении о гигантском коммутаторе будет хорошей идеей, но с этим я работаю.
switch(Action.Command)
{
case "MoveToTile":
{
doMovement(Action.Value, Action.Target);
break;
}
}
Даже моя средняя школа опыт программирования говорит мне, что это плохая идея, но я не могу думать о какой-либо другой способ вокруг него.
Редактировать: Я хотел бы как-то вставить это все в файл карты. В XML-файле карты у нас есть области, для которых есть несколько тегов. Тогда будет раздел, обозначающий, где находится NPC на карте, и какие ресурсы и сценарии он будет использовать. Затем будет раздел, в котором будут определены все битвы (опять же, определение ресурсов, а что нет), а затем, возможно, раздел, где эти скрипты будут определены. Я просто хочу, чтобы был способ скомпилировать C# на лету, используя WP7. Если бы я мог получить поддержку с обеих сторон, это не было бы проблемой. Интересно, будет ли какая-либо библиотека Mono, которую можно портировать в WP7, которая будет делиться функциональностью CodeDom и всех классов компилятора?
Я полностью согласен. Самая большая проблема, которую я могу увидеть, - это отсутствие Reflection.Emit на WP7. Есть ли способ сделать LUA в .Net без Reflection.Emit или Native Interop? –
Ну, есть LuaCE (хотя он не управляется). http://github.com/ynezz/luace/downloads – ctacke