gpt4 book ai didi

xml - XML 文件中的游戏逻辑

转载 作者:数据小太阳 更新时间:2023-10-29 01:38:47 26 4
gpt4 key购买 nike

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

但我觉得在 XML 文件中处理逻辑是一个奇怪的选择。我的理解是 XML 文件用于数据的存储和交换,而且我总是读到关于人们如何过度使用 XML 的各种非设计目的的咆哮。我的 friend 们的回应是注意到 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

likesHero 和 carFixingSkills 之类的东西是玩家和 NPC 可以拥有的知识片段,在实际实现中可能会存储在哈希中。我发现对话文件方法更灵活,因为我可以让编辑器轻松编辑对话和条件/ Action ,并且因为游戏对话树的复杂性。像 Ruby 或 Lua 这样的脚本语言会有所帮助,但它需要复杂的结构来处理此类树的逻辑。

回到最初的问题,XML 是完成这项工作的正确工具还是我遗漏了什么?

最佳答案

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

我们使用 XML 文件来定义 Pirates of the Burning Sea 中的所有静态数据,这是一个很好的方法。拥有这样的数据格式可以让非程序员控制数据,并让程序员腾出时间来处理功能而不是数据输入。将这些数据文件设为文本意味着您可以将它们置于源代码控制之下,这样您就可以知道它们何时发生变化。

关于xml - XML 文件中的游戏逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/372915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com