嘿伙计们试图编写一组逻辑时遇到问题。我想制作Go(棋盘游戏)问题。我希望我的程序要做的是读取一个xml文件,该文件代表一个人可以完成拼图或甚至死胡同的一系列步骤。所以在xml中它看起来像
<Step x="4" y="5">
<Response x="4" y="6" />
<Step x="3" y="6" victory="true">
</Step>
</Step>
<!-- This is a dead end -->
<Step x="4" y="4">
<Response x="4" y="5" />
<Step x="5" y="5" defeat="true"></Step>
<Step x="6" y="4" defeat="true"></Step>
</Step>
我的想法是制作一个链接列表,其中我的xml处理程序(我使用SAX)使用步骤类在步骤中存储步骤,但我无法概念化我将如何在列表中运行。有没有人有干净的方式做这样的事情? *注意我需要逐步运行每一步,如果步骤不存在,请将它们调用错误并再次尝试,但我愿意将我的xml更改为它需要的任何内容。
答案 0 :(得分:2)
我不完全确定您是否遇到XML或Java表示问题。我假设后者。
可以使用n-ary树在诸如Go之类的游戏中表示连续的游戏序列。树中的每个节点代表移动,对移动的所有可能响应都是其子节点。这将匹配您的XML表示。
以下是描述如何实现n-ary树的两个链接(取自此SO问题:k-ary Trees in Java)
在您的评论后编辑,这里大致是我将如何解析文档以创建一个树(您还必须创建自己的Tree类,我在这里假设基本树方法)。
class MyDocumentHandler {
// The tree we are building
private Tree tree;
// The current element we are parsing
private TreeNode current;
public void startDocument() {
// At the beginning of the document, create a new empty tree
tree = new Tree();
// The current node is the root
current = tree;
}
public void startElement(String uri, String localName, String qName, Attributes attributes) {
// Process the new element, read its attributes etc. to create the new TreeNode
TreeNode child = new TreeNode();
// Add the newly created node to the current element
current.addChild(child);
// The current element is now the child
current = child;
}
public void endElement(String uri, String localName, String qName) {
// When the current element ends, then return to its parent
current = current.getParent();
}
}
您可以看到对beginElement和endElement的连续调用将如何创建一个与文档具有相同结构的树。
答案 1 :(得分:0)
您希望存储可能的步骤和响应树吗?
我会用player = player1(或player2)创建一个Step。
<Step player="p1" x="4" y="5">
<Step player="p2" x="4" y="6">
<Step player="p1" x="3" y="6" victory="true" />
</Step>
<Step player="p2" x="4" y="3">
<Step player="p1" x="3" y="6">
//some more steps
</Step>
</Step>
</Step>
或只是步骤列表
<Step player="p1" x="4" y="5">
<Step player="p2" x="4" y="4">
...