所以,我自己就是一个小型C#库,用于在cRPG游戏中使用对话。
这个想法是,Dialogue对象及其字段(如DialogueNode和DialogueOption对象)是基于XML文件创建的,我的目标是尽可能简单。除了库中包含的列表或类型对象之外的字段,最好是字符串标识符,在需要时通过外部方式获取和解析。
我已经实现了基本的功能 - XML序列化,通过对话运行并退出它 - 以及基本的,基于控制台的应用程序解释器和WPF编辑器来创建对话,因为用纯XML编写对话框不是世界上最舒适的东西。 (最后两个意味着尽可能独立于图书馆,除了可以实现显示/创建内部的内容)
所有这一切,我都遇到了一个问题(实际上是两个问题,另一个我在考试后的时间内会用不同的问题报道)。
给了我一些没有经验的“noobish'我想,我想要在我的节点或选项中存储一些基本谓词 - 稍后会在游戏中检查它们以确定是否显示节点/选项或离开它是(或任何干涉诚实的人)。例如 - 如果玩家角色在其库存中有项目X,则显示一个选项,或者当玩家具有某个属性的特定最小值时显示该节点。
我的实施理念是这样的:
public bool DisplayPredicate(string predicateCode) { bool result = FunctionExecutingCSharpCode(predicateCode); return result; }
我已经阅读了一些关于动态编译的主题非常简洁,但我不确定它是否正是我想要的 - 我不确定它会如何影响应用程序的性能(解释器或游戏本身),如果它会每隔几秒重新编译一次......
我没有粘贴我尝试做的任何代码,因为要么我还没有这样做(因为我没有写代码我就是这样不确定它会起作用)或者它的图书馆结构除了我解释的目的之外,我认为它不具有相关性。 ^^
感谢。 ^^
答案 0 :(得分:0)
鉴于标准的.NET框架,没有C#"解释器"您可以提供执行的代码。您可以尝试动态创建C#代码,并将其编译成内存中的程序集,然后您可以使用.NET编译器服务。
这里有一个例子:http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime。