XML文件中的游戏逻辑

我正在处理游戏对话文件(玩家和不可玩角色之间的对话),其中对话选择及其结果取决于某些条件并导致某些操作。现在,我可以编写一个简单的解析器来处理某种语言来指定前后条件,但我的一个朋友建议使用XML。条件可以存储为对话元素的属性,选择和动作是内在元素。然后我会使用eval函数来解析这些条件和语句(我使用Ruby来制作这个游戏)。为了使这种方法更简单,我可以编写一个简单的GUI来操纵这些文件,而不用担心丑陋的XML。

但是,它使我成为处理XML文件逻辑的奇怪选择。我的理解是,XML文件用于存储和交换数据,我总是看到关于人们如何过度使用XML的各种不适合的事情。我的朋友们通过注意XML是如何用于所有内容的,包括XHTML和this bullet description language(也说明了一些逻辑)。

说实话,使用XML可以为我简化很多事情。编写解析器可能是痛苦和耗时的,我的要求通常很简单。但是真的好还是后来我会后悔这样的选择?

对于对细节感兴趣的人,以下是XML文件中的基本对话交换:

<dialogue id="101" condition="!npc.carsFixed">
  <message>Man,fix my car!</message>
  <choices>
    <choice condition="hero.carFixingSkill > 5" priority="7" id="Sure!">
      <command>hero.carFixingSkills += 1</command>
      <command>npc.carFixed = true</command>
      <command>hero.playSmokeAnimation()</command>
      <command>nextDialogue = 104</command>
    </choice>
    <choice condition="hero.carFixingSkill <= 5" id="I can't...">
      <command>nextDialogue = 105</command>
    </choice>
    <choice id="Fix it yourself">
      <command>npc.likesHero -= 1</command>
    </choice>
  </choices>
</dialogue>

用Ruby编写的相应代码将是:

def dialogue101
  if !npc.carsFixed
    showMessage("Man,fix my car!")
    choices = []
    if hero.carFixingSkill > 5
      choices.push(Choice.new("Sure!",7)) 
    else
      choices.push(Choice.new("I can't"))
    end
    choices.push(Choice.new("Fix it yourself"))
    choices = selectTopPriority(choices) if choices.size > 4
    result = showChoices(choices)
    case result
    when "Sure"
      hero.carFixingSkills += 1
      npc.carFixed = true
      hero.playSmokeAnimation
      dialogue104
    when "I can't"
      dialogue105
    when "Fix it yourself"
      npc.likesHero -= 1
    end
  end
end

像Hero和carFixingSkills这样的东西就是知识点播放器和NPC可以拥有的,这可能会被存储在真正实现中的哈希中。我发现对话文件的方法更加灵活,因为我可以使编辑器轻松编辑对话和条件/动作,并且由于游戏对话树的复杂性质。像Ruby或Lua这样的脚本语言有助于,但它需要复杂的结构来处理这些树的逻辑。

回到原来的问题,XML是工作的正确工具还是我缺少的东西?

除非你的游戏将有不到六个独特的对话框,你应该把这些信息放在某种数据文件中。 XML是格式的强大竞争者。我不会说Ruby,所以在这种情况下可能不起作用,但另一个选择是将对话框定义为直接在Ruby代码中的数据。 (我知道这会在Lua,Python和Javascript中运行得很好…我假定定义嵌套数据结构在Ruby中也很容易。)

我们使用XML文件来定义渤海海盗中的所有静态数据,这是一个很好的方法。使用这样的数据格式,非程序员可以控制数据,并释放程序员处理功能而不是数据输入。将这些数据文件作为文本意味着您可以将它们保留在源代码控制下,以便您可以在何时更改它们。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类
XML入门的常见问题(二)
Java对象的强、软、弱和虚引用
JS解析XML文件和XML字符串详解
java中枚举的详细使用介绍
了解Xml格式
XML入门的常见问题(四)
深入SQLite多线程的使用总结详解
PlayFramework完整实现一个APP(一)
XML和YAML的使用方法
XML轻松学习总节篇