c# - 在 C# 中使用和解析文本文件来初始化基于组件的游戏模型

标签 c# .net parsing

我有一个文本文件应该初始化我的对象,这些对象是围绕基于组件的模型构建的,这是我第一次尝试使用数据驱动的方法,我不确定我是否在朝着正确的方向前进.

我目前想到的文件是这样的

EliteGoblin.txt

@Goblin.txt


[general]
hp += 20
strength = 12
description = "A big menacing goblin"
tacticModifier +=  1.3

[skills]
fireball

@ 符号表示此时要解析哪些其他文件 []中的名称对应代码中的组件类 下面是如何配置它们

例如 hp += 20 将从 goblin.txt 中获取的值增加 20 等。

我的问题是我应该如何解析这个文件,是否有某种内置于 C# 中的解析器?

我可以更改文档的格式以匹配已在 .net 中支持的已定义格式吗?

我该如何理解每个值的类型?整数/ float /字符串

这看起来是一个可行的解决方案吗?

提前致谢,Xtapodi。

最佳答案

放下平面文件,拿起 XML。一定要研究 XML 序列化。您可以简单地将 C# 中的所有对象创建为类,将它们序列化为 XML,然后将它们重新加载到您的应用程序中,而不必担心解析平面文件。因为您的对象将充当 XML 的架构,所以您不必担心转换对象和编写庞大的解析例程,.NET 会为您处理。你会省去很多头痛的事。

例如,您可以将您的类重写为如下所示:

public class Monster
{
     public GeneralInfo General {get; set;}
     public SkillsInfo  Skills {get; set;}
}
public class GeneralInfo
{
  public int Hp {get; set;}
  public string Description {get; set;}
  public double TacticModifier {get; set;}
}
public class SkillsInfo
{
  public string[] SkillTypes {get; set;}
}

...您的 XML 将被反序列化为...

<Monster>
   <General>
       <Hp>20</Hp>
       <Description>A big menacing goblin</Description>
       <TacticModifier>1.3</TacticModifier>
   </General>
   <SkillTypes>
        <SkillType>Fireball</SkillType>
        <SkillType>Water</SkillType>
   </SkillTypes>
</Monster>

..我的一些类名、层次结构等可能是错误的,因为我很快就完成了这一点,但您已经了解了序列化如何工作的一般要点。

关于c# - 在 C# 中使用和解析文本文件来初始化基于组件的游戏模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3257596/

相关文章:

用于解析目录和文件名的正则表达式

string - Rebol/RED 解析。将解析后的字符串中的 ASCII 代码保存到变量中?

c# - 如何诊断 UWP 应用崩溃的故障

c# - ReactiveUI 5.0.2 中缺少 ReactiveAsyncCommand

javascript - 从 Xamarin Forms 中的 WebView 获取数据

c# - 使用 Model View Presenter 设计模式 (MVP) 的好处

c# - 如何知道为什么我的 WPF 窗口这么大?

C# VSTO 加载项 - 将纯文本电子邮件转换为 HTML

javascript - OData Uri 批量返回 404,而如果我转到提供的 url,它就可以工作。为什么?

parsing - 如何在编译器中实现前向引用?