我正在用Java创建一个小型棋盘游戏,我想在XML文件中实现游戏关卡(即,每个关卡,关卡ID,棋盘的高度和长度以及每个单元的定义) ,然后通过询问用户他想要玩的级别来构建棋盘。
我已经在Board类中构建了一个经典的构造函数,没有XML文件和if(因此,我将每个级别的描述都放在了代码中)。问题是每次我想添加一个关卡时,都需要重新编译。
谢谢!
答案 0 :(得分:1)
看看此页面,看看它是如何用Java完成的: Java XML Parsers。 Java内置了大约四个不同的解析器(在新版本中可能更多)。
现在关于构造函数:
public Board(String pathToXML) {
// Add code parsing the XML
}
在调用构造函数之前,可以将参数作为参数发送给main方法。
public static void main(String[] args) {
String pathToXML = args[0];
Board b = new Board(pathToXML);
}
请记住,参数从0开始,而不是1。
答案 1 :(得分:1)
简短的回答:不要尝试在您的电路板构造函数中解析XML文件。
您似乎已经有了一个正常的构造函数和有效的类来为您设置板。将这些类传递给Board构造函数。让某种工厂为您创建实例。
请勿将XML解析逻辑与棋盘游戏逻辑混在一起。那是两个完全不同的事情。根据单一职责规则,应将其分开存放。
正确完成后,您应该能够从XML文件或任何其他来源创建具有临时配置的代码板。换句话说:数据来自哪个板块都没有关系。
XML文件应如下所示:
<Levels>
<Level id="1">
<h>2</h>
<l>2</l>
<plateau key="value">
<cells>
<cell row="0" column="0" color="black">
</cell>
<!-- ... -->
</cells>
</plateau>
使用XML解析器解析从文件中读取的数据。 将结果传递给Board构造函数,例如伪代码:
List<Level> levels = parseLevels(...);
new Board(levels.get(0));
“ parseLevels()”的实现可能很棘手。我建议您使用JAXB来解析文件并创建数据结构。 试试这个教程: https://www.baeldung.com/jaxb