为XNA游戏实现简单的基于XML的脚本语言

Pat*_*win 1 windows xna parsing scripting-language windows-phone-7

我正在与C#和XNA的RPG引擎团队合作.我们计划针对Windows和Windows Phone 7进行定位,但遇到人工智能交互问题并在过场动画期间控制玩家行为.在大多数情况下,使用MVC设计模式提取所有内容,但将所有逻辑和移动抽象到控制器中可能会导致问题.因此,我们的想法是拥有一个接口(IScriptEngine),它接受一个I​​ScriptObject并相应地更新地图模型中的数据.我在考虑将脚本放在XML语法中:

<Script Name="MoveNPC_1"> 
    <Action Command="MoveToTile" Target="NPC_1" Value="10,2"/> 
</Script> 
Run Code Online (Sandbox Code Playgroud)

并让IScriptEngine相应地解析它.我非常怀疑在一个巨大的switch语句中解析会是一个好主意,但这是我一直在使用的.

switch(Action.Command)
{
    case "MoveToTile":
      { 
         doMovement(Action.Value, Action.Target); 
         break;
      }
}
Run Code Online (Sandbox Code Playgroud)

即使我的高中编程经验告诉我这是一个坏主意,但我想不出任何其他方式.

编辑:我想以某种方式将这一切嵌入到地图文件中.在地图XML文件中,我们指定了包含多个标记的区域.然后会有一个部分,指定NPC在地图上的位置,以及它将使用哪些资源和脚本.然后会有一个部分,其中将定义所有战斗(再次,定义资源和不是什么),然后可能是一个部分,其中将定义这些脚本.我只是希望有一种方法可以使用WP7动态编译C#.如果我能得到双方的支持,这不会是一个问题.我想知道是否会有任何可以移植到WP7的Mono库来共享CodeDom和所有Compiler类的功能?

And*_*ell 6

XML脚本!?喘气!现在是"可能导致问题的原因"!

为什么不使用C#?我听说它非常棒.我已经就此事发表了意见.

你需要问自己:你的脚本真的需要数据驱动吗?有没有理由不能用C#表示数据?

他们真的需要在运行时解释吗?因为,如果他们真的这样做,可以用C#完成.

是我对 gamedev.stackexchange.com上几乎完全相同的问题的另一个答案.我甚至在那里举了一个可能实现的例子.

如果你想要执行多于一帧执行的操作(基本上是协同例程),例如:"走到这里,谈话,等待,走过那里",你也可以在C#中实现这一点yeild.


编辑:如果你想混合你的XML级别和C#脚本,这是我的意思的一个例子:

<Level>
    <Door position="4,4" name="spookyDoor" />
    <Region position="4,2" name="spookyOpener" />
</Level>
Run Code Online (Sandbox Code Playgroud)

在C#中:

public void LevelStart()
{
    this.Regions["spookyOpener"].OnPlayerEnter += () =>
    {
        (this.Items["spookyDoor"] as Door).Open();
    };
}
Run Code Online (Sandbox Code Playgroud)