Я работаю с командой над движком RPG в C # и XNA. Мы планируем ориентироваться на Windows и Windows Phone 7, но сталкиваемся с проблемами взаимодействия с ИИ и управления действиями игроков во время кат-сцен. В большинстве случаев все извлекается с использованием шаблона проектирования MVC, но абстрагирование всей логики и перемещения в контроллер может вызвать проблемы в будущем. Поэтому идея состоит в том, чтобы иметь интерфейс (IScriptEngine), который принимает IScriptObject и соответствующим образом обновляет данные в модели карты.
Я думал о том, чтобы поместить сценарии в синтаксис XML-типа:
<Script Name="MoveNPC_1">
<Action Command="MoveToTile" Target="NPC_1" Value="10,2"/>
</Script>
И пусть IScriptEngine проанализирует его соответственно. Я очень сомневаюсь, что синтаксический анализ гигантского оператора switch был бы хорошей идеей, но это то, с чем я работал.
switch(Action.Command)
{
case "MoveToTile":
{
doMovement(Action.Value, Action.Target);
break;
}
}
Даже мой опыт программирования в средней школе говорит мне, что это плохая идея, но я не могу придумать другого пути.
Edit:
Я хотел бы как-то встроить все это в файл карты. В XML-файле карты у нас есть области, обозначенные несколькими тегами. Затем будет раздел, в котором указано, где находится NPC на карте, и какие ресурсы и сценарии он будет использовать. Затем будет раздел, где будут определены все битвы (опять же, определение ресурсов, а что нет), а затем, возможно, раздел, где будут определены эти сценарии. Я просто хотел бы иметь возможность компилировать C # на лету с использованием WP7. Если бы я мог получить поддержку с обеих сторон, это не было бы проблемой. Интересно, будет ли какая-либо библиотека Mono, которая могла бы быть перенесена на WP7, которая бы разделяла функциональность CodeDom и всех классов Compiler?