gpt4 book ai didi

java - ASCII 世界地图导入和读取

转载 作者:行者123 更新时间:2023-11-30 08:26:53 25 4
gpt4 key购买 nike

我正在用 Java 制作游戏,我希望玩家能够在具有指定边界的世界中移动。

在网络上搜索定义“世界”的方法后,换句话说,玩家可以移动到哪里,哪里不能移动。

我喜欢 2D ASCII 映射的想法,其中一个字符代表一定数量的像素,例如:

###################
#-----------------#
#-----###---------#
#-----###---------#
#-----------------#
###################

在此示例中,- 字符表示玩家可以进入的 10x10 方 block ,# 字符表示玩家可以进入的 10x10 区域'不要来。

在 Java 中,我导入 world.txt 使用:

void importMap() {
BufferedReader br = new BufferedReader(new FileReader("world.txt"));
String line;
while ((line = br.readLine()) != null) {
for (char ch: line.toCharArray()) {
// Add to array
}
}
br.close();
}

但是,我不知道将这些数据存储在哪里。我正在考虑一个二维数组,我可以简单地在某个 x,y 值处获取字符,如下所示:

world[7][3];
// Should return #

我应该如何存储这个 ASCII 映射?二维数组、二维对象、 HashMap 等?<​​/strong>

最佳答案

二维数组最好,因为它占用的内存最少,而且您将主要进行直接访问。 hashmap 带有空间开销,实际上并没有添加任何有用的东西。正如@assylias 所提到的,抽象类中的数据结构可以形成一个干净的接口(interface)。 @Alexander Tokarev 关于预先不知道数组维度是正确的,但是您可以使用 NIO 来解决这个问题。

char[][] createWorld(String file)
{
try {
List<String> lines = Files.readAllLines(Paths.get(file),
Charset.forName("US-ASCII"));
char[][] world = new char[lines.size()][];
int i = 0;
for(String ln: lines)
world[i++] = ln.toCharArray();
return world;
} catch (IOException ex) {
Logger.getGlobal().log(Level.SEVERE, null, ex);
}
return null;
}

关于java - ASCII 世界地图导入和读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com