2012-02-21 7 views
1

ちょっとした男がロジックのセットをプログラムしようとすると問題が発生しました。私はGo(ボードゲーム)の問題を作りたいです。私のプログラムがしたいことは、人がパズルを完成させるために行うことができる一連のステップを表すxmlファイル、または行き止まりの終わりまで読み込まれます。だから、XMLではそれが私の考えは(SAXを使用してIM)私の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を変更しても構いません。

答えて

2

私はあなたがXMLやJava表現に問題を抱えているかどうか、あなたの質問から完全にはよく分かりません。私は後者を仮定しています。

Goのようなゲームで連続したプレイシーケンスを表すことは、n個のツリーを使用して行うことができます。ツリー内の各ノードは移動を表し、移動に対するすべての応答はその子である。これはあなたのXML表現と一致します。

はここ(このSO質問から撮影:k-ary Trees in Java)のn進木を実装する方法について説明二つのリンクです

EDITあなたのコメントの後に、ここでは大まかですどのように私はツリーを作成するために文書を解析するだろう(あなたはまだ独自のツリークラスを作成する必要があります、私は基本的なツリーメソッドをここに仮定している)。

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を連続して呼び出すと、ドキュメントと同じ構造を持つツリーがどのように作成されるかを確認できます。

+0

それは私が探しているものとほとんど同じですが、私の闘いは、実際にそれをどのようにしてツリーに読み込むことができるかです。例えばsaxparserが最初のステップを叩いてそれをツリーに入れ、次に2番目のステップをヒットすると、それを古いツリーの中に入れる方法は何ですか?私は私が取るステップを数え始めることができたと思うが、そのステップカウントを2回目にするとどうなるだろう?どのように私はそれを最初の木か2番目か3番目の木に入れることを知っていますか? –

+0

@Ukemi>私はスナップを加えて、それを行う方法の基礎を教えてくれました。あなたはそれを並べ替えることができることを願っています。 – ARRG

+0

ありがとう、それは私のためにかなりのソートされたもの –

0

可能な手順と回答のツリーを保存したいのですか?

私はplayer = player1(またはplayer2)でクラスステップを作成します。

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