制作动态序列

时间:2012-02-21 12:33:21

标签: java xml dynamic sequence

嘿伙计们试图编写一组逻辑时遇到问题。我想制作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更改为它需要的任何内容。

2 个答案:

答案 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">
...