Java - 如何读取自定义地图格式

Posted

技术标签:

【中文标题】Java - 如何读取自定义地图格式【英文标题】:Java - How to read a custom map format 【发布时间】:2015-07-28 07:07:04 【问题描述】:

我正在尝试为我自己的小型 2D RPG 创建自定义地图格式,所以我的问题是如何正确灵活地管理阅读和创建自定义地图格式。首先,我正在用 Java 编写代码。这个想法是有一个名为“TileMap”的类。此类定义了一个二维整数数组,其中存储了我的所有实体(我正在使用实体系统来实现我的游戏)。我还想在实际读取过程发生之前保存和解析一些关于地图大小的信息。地图文件应如下所示:

#This is a test map
width=4
height=3
layercount=1
tilesize=32
[1;0;0;0]
[23;1;0;0]
[5;0;1;0]

其中 layercount 是 z 维度提供的层数。并且tilesize是每个tile的大小,以像素为单位。实体在括号之间定义。模式是:[entity_id;x_pos;y_pos;z_pos]。我已经编写了代码来解析这样的文件,但它不是很灵活,因为您只需在方括号前放一个小空格,地图就无法加载。我只需要一些有用的技巧就可以灵活地做到这一点。谁能帮帮我?

【问题讨论】:

使用一些现有的编码方案可能更容易,例如JSON。它看起来像这样:width:4,height:3,...,tiles:[[1,0,0,0],[23,1,0,0],[5,0,1,0]]. 【参考方案1】:

我认为可能有 3 种不同的方法来解决这个问题: 首先,您可以将 Map 与 Maps 一起使用:Map<Serializable,Map<String,Object>> 其中 Serializable 是您的 entity_id,而地图是您需要的属性,例如 ("width",4), ("height",3):

public static final String WIDTH = "WIDTH";
public static final String HEIGHT = "HEIGHT";

...

Map<String,Object> mapProperties = new HashMap<String,Object>();
mapProperties.put(WIDTH, 4);
mapProperties.put(HEIGHT, 3);

....

Map<Serializable,Map<String,Object>> map = new  HashMap<Serializable,Map<String,Object>>();
map.put(myEntity.getId(), mapProperties);

第二种方式可能是这样的:http://java.dzone.com/articles/hashmap-%E2%80%93-single-key-and 第三种方式可能是这样的:Java Tuple Without Creating Multiple Type Parameters

【讨论】:

以上是关于Java - 如何读取自定义地图格式的主要内容,如果未能解决你的问题,请参考以下文章

如何读取多种格式的自定义属性值?

React中没有自定义库的Google地图:无法读取属性setState of null

如何从 csv 文件中以自定义格式读取时间?

pyecharts自定义地图

java读取自定义配置文件并引用

我应该如何使用 Java 保存自定义游戏文件?