我有一堂课,我在其中存储游戏世界的地形。游戏世界由立方体组成,每个立方体都有一个地形。信息存储为相当大的整数3D数组。
我现在遇到的问题是我的“地图”太大而无法存储在一个类(或枚举)中。由于我对类和枚举类一无所知,所以我不知道该怎么办。
我应该用它制作tekst文件并读出来吗?如果是这样,我该怎么做?
一个不同的解决方案是将地图拆分成几个类或枚举,然后在运行时再次将它们合并,但是我也不知道该怎么做,这似乎是一个非常糟糕的解决方案。
编辑:这是世界地图的一部分:
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 2 2 0 0 0 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 2 2 0 0 0 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 2 2 2 2 1 1 1 1 1 1 1
0 0 0 0 1 0 0 0 0 2 2 2 2 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 1 1 1
0 0 0 0 0 0 0 1 0 1 0 0 1 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0
0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 1 0 1 1 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1 1 1 0 0
0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
其中有40个区块(还有38个区块),每个区块都以某个z坐标表示世界。我在arrayformat中也有这个。
如果您可以提供一些(样本)代码来从文件中读取代码,那就太好了。
最佳答案
最好将其放入资源中。只需在课程旁边创建一个文本文件(例如,名为map.txt
),然后以与问题中所用格式相同的格式放置世界地图,然后使用以下代码加载即可:
public int[][][] loadMap() {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(getClass()
.getResourceAsStream("map.txt"), StandardCharsets.ISO_8859_1))) {
List<int[][]> result = new ArrayList<>();
List<int[]> cur = new ArrayList<>();
String line;
while((line = reader.readLine()) != null) {
line = line.trim();
if(line.isEmpty() && !cur.isEmpty()) {
result.add(cur.toArray(new int[0][]));
cur.clear();
} else {
String[] cells = line.split("\\s+");
int[] row = new int[cells.length];
for(int i=0; i<cells.length; i++) row[i] = Integer.parseInt(cells[i]);
cur.add(row);
}
}
if(!cur.isEmpty())
result.add(cur.toArray(new int[0][]));
return result.toArray(new int[0][][]);
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
关于java - 构造函数超过65535字节限制,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36294220/