我正在用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文件来构建板。
2 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
简短回答:不要尝试解析板构造函数中的XML文件。
您似乎已经有了一个有效的构造函数和有效的类来为您设置板。将这些类传递给Board构造函数。让某种工厂为你创建实例。
不要将XML解析逻辑与Board游戏逻辑混合在一起。这是两件完全不同的事情。根据单一责任规则,它应该分开。
如果操作正确,您应该能够在XML-File或任何其他来源的代码中创建具有ad-hoc配置的电路板。换句话说:对于数据来源的董事会而言,这无关紧要。
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
紫衣仙女
TA贡献1839条经验 获得超15个赞
看一下这个页面,看看它是如何在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。
添加回答
举报
0/150
提交
取消