【问题标题】:Executing the code stored in string field of XML file执行存储在 XML 文件的字符串字段中的代码
【发布时间】:2016-06-21 11:49:17
【问题描述】:

所以,我正在为自己制作一个小型 C# 库,用于在 cRPG 游戏中使用对话。

这个想法是,Dialogue 对象及其字段(如 DialogueNode 和 DialogueOption 对象)是基于 XML 文件创建的,我的目标是使其尽可能简单。除了库中包含的类型的列表或对象之外,这些字段最多是字符串标识符,需要时通过外部方式获取和解析。

我已经实现了基本的功能 - XML 序列化,通过对话运行并退出它 - 以及基本的、基于控制台的应用程序解释器和一个 WPF 编辑器来创建对话,因为用普通 XML 编写对话并不是最常见的世界上最舒服的事。 (最后两个是为了尽可能独立于库,除了可能实现内部显示/创建的内容)

话虽如此,我遇到了一个问题(实际上是两个,另一个我会在考试后有时间时在不同的问题中讨论)。

在给出了一些我没有经验的“noobish”想法之后,我开始想,我希望将一些基本谓词存储在我的节点或选项中 - 稍后将在游戏中检查它们以确定,是显示节点/选项还是保留它(或者说实话对那些进行干预)。例如 - 如果玩家角色的物品栏中有物品 X,则显示一个选项,或者当玩家具有某个属性的最小值时显示节点。

到目前为止,我的实现想法是这样的:

  1. 在对象中有一个字段 PredicateScript
  2. 有一个 bool 方法,它将由解释器在运行时执行,如下所示:
公共布尔显示谓词(字符串谓词代码) { 布尔结果 = FunctionExecutingCSharpCode(predicateCode); 返回结果; }

我非常简短地阅读了一些关于即时编译的主题,但我不确定它是否正是我想要的 - 我不确定它会如何影响应用程序的性能(无论是解释器还是游戏本身),如果每隔几秒钟重新编译一次......

我没有粘贴任何我正在尝试做的代码,因为我还没有这样做(因为我没有编写代码,我不确定它是否会工作)或者它是库除了我解释的我打算做的事情之外,我认为它不相关的结构。 ^^

谢谢。 ^^

【问题讨论】:

  • This 可能会帮助你
  • 看看Roslyn。话虽如此,我会谨慎走这条路,我会敦促重新评估你的设计。我确信有一种更简单的方法可以实现您想要做的事情。
  • @TheBeardedLlama 我的想法是,对话的设计者将代码的谓词位放入 WPF 的编辑器文本框中,将其包含在某个对象的字段中。任何其他想法,我如何在我的对话中实现这些条件?
  • @Schwalbe 这是一个很好的问题,但是,我并不是要贬低,stackoverflow 是一个问答网站,而不是论坛;您遇到的问题可能是为什么很多游戏在其主引擎中使用像 Lua 这样的脚本引擎,因此它们可以按照您需要的方式运行代码(注意,我不是游戏开发人员,所以这都是道听途说)

标签: c# xml wpf


【解决方案1】:

鉴于标准的 .NET 框架,没有 C#“解释器”之类的东西可以提供执行的代码。您可以尝试动态创建 C# 代码并将其即时编译成内存中的程序集,然后您可以使用 .NET 编译器服务使用它。

这里给出了一个例子:http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime

【讨论】:

  • 罗斯林呢?
  • Roslyn 是一个编译器平台。正如我所说,您可以使用现有的 .NET 框架标准手段来实现相同的目标。然而,两者都与“内部 C# 解释器”不同。
  • 确实如此(“编译器即服务”似乎是最喜欢的术语),您可以利用它进行动态编译,从而呈现解释器的外观
  • 在这种情况下,OP 可能使用了错误的术语,但他表示自己是新手
  • Roslyn 也有一个 REPL,对我来说这似乎是一个解释器......只是说
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多