Создание динамической последовательности - PullRequest
1 голос
/ 21 февраля 2012

Эй, ребята, у меня возникла проблема при попытке запрограммировать набор логики.Я хочу сделать проблему 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 ]

2 голосов
/ 21 февраля 2012

Я не совсем уверен по вашему вопросу, есть ли у вас проблемы с XML или представлением Java.Я предполагаю последнее.

Представление последовательных последовательностей игры в игре, такой как Го, может быть сделано с использованием n-арного дерева.Каждый узел в дереве представляет движение, а все возможные ответы на это - его дочерние элементы.Это будет соответствовать вашему XML-представлению.

Вот две ссылки, которые описывают, как реализовать n-арные деревья (взяты из этого вопроса SO: k-арные деревья в 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 создадут дерево, которое имеет ту же структуру, что и ваш документ.

0 голосов
/ 21 февраля 2012

Похоже, вы хотели бы сохранить дерево возможных шагов и ответов?

Я бы создал класс Step с 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">
...
...