如何将XML用于RPG Stat / Leveling系统

时间:2017-06-27 15:56:11

标签: c# xml monogame

我正在研究开发一款主要用于开发体验的RPG引擎,而不是真正针对任何商业用途。然而,当涉及到存储Class base stats时,我已经碰到了一点墙。我在Game Maker工作了很多年,所以我的经验更适合那个。我目前正在使用Monogame在C#中工作,并围绕着它。

我相信存储我需要的信息的好方法需要外部文件,从我读过的内容。我习惯于调用和使用GM的INI文件,但是没有那么多能够绕过XML。我有一个我希望实现的设置的公共pastebin,如果这样的设置是可行的,或者我试图以某种可怕的方式做这件事,我很好奇你的家伙。

我正在设计的XML文档(完全通过理论)的结构如下:

<?xml version="1.0" encoding="utf-8" ?>
<BaseClass>
  <Class Class="Barbarian">
    <Level Level="1">
      <baseAtk>1</baseAtk>
      <baseFort>2</baseFort>
      <baseRef>0</baseRef>
      <baseWill>0</baseWill>
      <classSkillCt>2</classSkillCt>
      <classSkill0>ID_CS_BARB_FASTMOVE</classSkill0>
      <classSkill1>ID_CS_BARB_RAGE</classSkill1>
    </Level>
    <Level Level="2">
      <baseAtk>2</baseAtk>
      <baseFort>3</baseFort>
      <baseRef>0</baseRef>
      <baseWill>0</baseWill>
      <classSkillCt>2</classSkillCt>
      <classSkill0>ID_CS_BARB_UNCDODGE</classSkill0>
      <classSkill1>ID_CS_BARB_RAGEPWR1</classSkill1>
    </Level>
    <Level Level="3">
      <baseAtk>3</baseAtk>
      <baseFort>3</baseFort>
      <baseRef>1</baseRef>
      <baseWill>1</baseWill>
      <classSkillCt>1</classSkillCt>
      <classSkill0>ID_CS_BARB_TRAPSENSE1</classSkill0>
    </Level>
    <Level Level="4">
      <baseAtk>4</baseAtk>
      <baseFort>4</baseFort>
      <baseRef>1</baseRef>
      <baseWill>1</baseWill>
      <classSkillCt>1</classSkillCt>
      <classSkill0>ID_CS_BARB_RAGEPWR2</classSkill0>
    </Level>
    <Level Level="5">
      <baseAtk>5</baseAtk>
      <baseFort>4</baseFort>
      <baseRef>1</baseRef>
      <baseWill>1</baseWill>
      <classSkillCt>1</classSkillCt>
      <classSkill0>ID_CS_BARB_IMPUNCDODGE</classSkill0>
    </Level>
  </Class>
  <Class Class="Bard">
    <Level Level="1">
      <baseAtk>2</baseAtk>
      <baseFort>1</baseFort>
      <baseRef>3</baseRef>
      <baseWill>3</baseWill>
      <spellDay0>4</spellDay0>
      <spellDay1>1</spellDay1>
      <spellDay2>0</spellDay2>
      <spellDay3>0</spellDay3>
      <spellDay4>0</spellDay4>
      <spellDay5>0</spellDay5>
      <spellDay6>0</spellDay6>
      <spellDay7>0</spellDay7>
      <spellDay8>0</spellDay8>
      <spellDay9>0</spellDay9>
      <spellKnw0>6</spellKnw0>
      <spellKnw1>4</spellKnw1>
      <spellKnw2>0</spellKnw2>
      <spellKnw3>0</spellKnw3>
      <spellKnw4>0</spellKnw4>
      <spellKnw5>0</spellKnw5>
      <spellKnw6>0</spellKnw6>
      <spellKnw7>0</spellKnw7>
      <spellKnw8>0</spellKnw8>
      <spellKnw9>0</spellKnw9>
      <classSkillCt>6</classSkillCt>
      <classSkill0>ID_CL_SKILL_BRD_BRDKNOWLEDGE</classSkill0>
      <classSkill1>ID_CL_SKILL_BRD_BRDPERFORM</classSkill1>
      <classSkill2>ID_CL_SKILL_BRD_COUNTERSONG</classSkill2>
      <classSkill3>ID_CL_SKILL_BRD_DISTRACTION</classSkill3>
      <classSkill4>ID_CL_SKILL_BRD_FASCINATE</classSkill4>
      <classSkill5>ID_CL_SKILL_BRD_INSPCOURAGE1</classSkill5>
    </Level>
  </Class>
</BaseClass>

如果这不是XML文档的工作原理,请告诉我,所以我不会把这个狗搞砸了!我不是在寻找任何人为我编写代码,只是为了获得有关实现我正在寻找的最佳方法的公开建议。我希望能够以某种方式获得我要求的任何级别的任何级别的基本统计数据。因此,如果我要求(野蛮人,2)或那种性质的东西,我会获得2级野蛮人的信息:)

我试图在线跟踪一些教程,但还没有找到一个真正解释了以有意义的方式利用任何外部文件的最佳方法的教程。如果有人就这类信息提供了材料,请告诉我们!

1 个答案:

答案 0 :(得分:0)

你的XML很好,但也许BaseClass元素应该是复数,并且应该同意它只是Class的内容元素(“Classes”)。

例如,为了提取2级野蛮人的基本攻击加值,您将使用“./BaseClass/Class[@Class='Barbarian']/Level[@Level='2”形式的XPath表达式] / baseAtk”。或者,您可以使用LINQ。