如何在Java中构建一个读取xml文件的构造函数?

我正在用Java创建一个小板游戏,我想在XML文件中实现游戏关卡(即每个级别,关卡,关卡的高度和长度,以及每个单元的定义),然后通过询问用户他想要玩的等级来构建棋盘。

我已经在Board类中构建了一个经典的构造函数,没有XML文件和if(因此我在代码中放置了每个级别的描述)。问题是,每次我想添加一个级别,我需要再次编译。

谢谢 !

编辑:这是我当前Board类的代码,带有构造函数:

public class Board {
    private int h;
    private int l;

    private Cell[][] plateau;

    Board(int level) {
        if (level == 1) {
            h=2;
            l=2;
            plateau = new Cell[h + 2][l + 2];
            plateau[0 + 1][0 + 1] = new Cell(true, 1, 1, Couleurs.None, Couleurs.Blue, Couleurs.None, Couleurs.None);
            plateau[1 + 1][0 + 1] = new Cell(true, 2, 1, Couleurs.Red, Couleurs.None, Couleurs.None, Couleurs.None);
            plateau[0 + 1][1 + 1] = new Cell(true, 1, 2, Couleurs.None, Couleurs.Red, Couleurs.None, Couleurs.None);
            plateau[1 + 1][1 + 1] = new Cell(true, 2, 2, Couleurs.Blue, Couleurs.None, Couleurs.None, Couleurs.None);
        }

我构建的XML文件:

<?xml version="1.0" encoding="UTF-8"?><Levels>
    <Level id="1">
    <h>2</h>
    <l>2</l>
        <description>
        plateau[0 + 1][0 + 1] = new Cell(true, 1, 1, Couleurs.None, Couleurs.Blue, Couleurs.None, Couleurs.None);
        plateau[1 + 1][0 + 1] = new Cell(true, 2, 1, Couleurs.Red, Couleurs.None, Couleurs.None, Couleurs.None);
        plateau[0 + 1][1 + 1] = new Cell(true, 1, 2, Couleurs.None, Couleurs.Red, Couleurs.None, Couleurs.None);
        plateau[1 + 1][1 + 1] = new Cell(true, 2, 2, Couleurs.Blue, Couleurs.None, Couleurs.None, Couleurs.None);        
        </description>
    </Level></Levels>

所以我想要的是Board类读取XML文件来构建板。


ibeautiful
浏览 495回答 2
2回答

犯罪嫌疑人X

简短回答:不要尝试解析板构造函数中的XML文件。您似乎已经有了一个有效的构造函数和有效的类来为您设置板。将这些类传递给Board构造函数。让某种工厂为你创建实例。不要将XML解析逻辑与Board游戏逻辑混合在一起。这是两件完全不同的事情。根据单一责任规则,它应该分开。如果操作正确,您应该能够在XML-File或任何其他来源的代码中创建具有ad-hoc配置的电路板。换句话说:对于数据来源的董事会而言,这无关紧要。XML文件看起来应该更像这样:<Levels> &nbsp;&nbsp;&nbsp;&nbsp;<Level&nbsp;id="1"> &nbsp;&nbsp;&nbsp;&nbsp;<h>2</h> &nbsp;&nbsp;&nbsp;&nbsp;<l>2</l> &nbsp;&nbsp;&nbsp;&nbsp;<plateau&nbsp;key="value"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<cells> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<cell&nbsp;row="0"&nbsp;column="0"&nbsp;color="black"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</cell> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<!--&nbsp;...&nbsp;--> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</cells> &nbsp;&nbsp;&nbsp;&nbsp;</plateau>使用XML解析器解析从文件中读取数据。将结果传递给Board构造函数,例如伪代码:List<Level>&nbsp;levels&nbsp;=&nbsp;parseLevels(...);new&nbsp;Board(levels.get(0));'parseLevels()'的实现可能很棘手。我建议您使用JAXB来解析文件并创建数据结构。试试这个教程:https:&nbsp;//www.baeldung.com/jaxb

紫衣仙女

看一下这个页面,看看它是如何在Java中完成的:&nbsp;Java XML Parsers。Java中内置了大约四种不同的解析器(可能在更新的版本中更多)。现在关于构造函数:public&nbsp;Board(String&nbsp;pathToXML)&nbsp;{ &nbsp;&nbsp;&nbsp;//&nbsp;Add&nbsp;code&nbsp;parsing&nbsp;the&nbsp;XML}在调用构造函数之前,可以将参数作为参数发送到main方法。public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;pathToXML&nbsp;=&nbsp;args[0]; &nbsp;&nbsp;&nbsp;&nbsp;Board&nbsp;b&nbsp;=&nbsp;new&nbsp;Board(pathToXML);}请记住,参数从0开始,而不是1。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java