我创建了非二叉树以便在其中加载xml数据并稍后用于对话系统。我想实现像fallout中的对话系统,其中每个答案可以包含4个不同的节点和另一个答案。我用句子
创建了xml<Dialogue>
<Node>Hello,what do you want?</Node>
<Leaf>Nothing</Leaf>
<Leaf>Really?</Leaf>
<Branch>
<Node>Really?</Node>
<Leaf>Yes></Leaf>
<Branch>
<Node>No</Node>
<Leaf>Why not?</Leaf>
</Branch>
</Branch>
</Dialogue>
这里c ++中树中的节点表示为父叶子是子叶子,第一个分支节点下面是上层节点的子节点。我发现很难用这种结构在树中加载xml数据所以你有更好结构的想法吗? ?
答案 0 :(得分:0)
使用您当前的XML结构,您会发现实现它很棘手,我建议一个选项..
<Dialogue>
<Node id="root">
<Prompt>Hello,what do you want?</Prompt>
<Response>
<match>Nothing</match>
<Branch node_id="nothing"/>
</Response>
: <!-- more Response nodes -->
</Node>
<Node id="nothing">
<Prompt>Really?</Prompt>
<Response>
<match>Yes</match>
<Branch node_id="nothing.yes"/>
</Response>
<Response>
<match>Actually...</match>
<Branch node_id="nothing.actually"/>
</Response>
</Node>
<Node id="nothing.yes">
<Prompt>Why not?</Prompt>
: <!-- Response Nodes -->
</Node>
<Node id="nothing.actually">
<Prompt>Okay, what then?</Prompt>
: <!-- Response Nodes -->
</Node>
</Dialogue>
实际上,对于这种类型的数据,您需要一个地图来存储每个“节点”,其中节点是一个带有一组响应的提示(地图的关键是节点的ID - 您必须保证是唯一的。根据哪个响应匹配,然后你可以在地图中找到节点并将控制权交给那个等等。可能比树更容易处理?还可以让你重新使用状态。 ..注意:上面的XML真的很冗长,你可以用属性修剪它,我的目的只是简单地理解...
可以考虑我猜...