2012-06-23 47 views
0

我正在尝试为我的游戏中的地图创建一个简单的类。地图是由“砖”结构组成的2维向量。我试图找出在行中输入/输出这些瓷砖的最佳方法。输入和输出带维数的多维向量

例如,我曾经使用基于.txt的加载格式。 .txt文件如下所示:

1 0 2 0 0 0 2 4 5 6 3 
2 4 5 0 0 0 2 0 0 3 4 
0 3 5 2 5 3 0 5 5 3 4 
0 2 0 5 0 6 0 5 7 8 4 

然后,我会逐行查找每个图块的ID整数。 1代表草,0代表水,等等。当解析器到达一行的末尾时,它会跳到下一行的整数。

现在我试图通过fwrite和fread使用二进制文件和结构来代替整数。我会如何去做这件事?我所见过的所有方法都是如何将二进制文件中的结构数组存储起来,而不是如何存储多维结构数组。有任何想法吗?

编辑:是的,我可以将二维矢量存储在文件中,但这不会让我做无缝地图加载,我需要。我有大的地图文件,所以一次加载100k瓦片会占用CPU。

+0

'fread'和'fwrite'不是C++。使用'fstream'。 – Dani

+0

@Dani - 不完全正确。 C标准包含在C++标准中,所以在技术上'fread()'和'fwrite()'是C++。不过,我当然同意你的看法,基于流的I/O被认为是更好的风格。 –

+1

@MichaelJ:这是废话。 C++标准*有时包括* C标准的特定版本*中的部分*。 'fread','fwrite',可能它们在那些部分,可能它们不是,但是纯粹的废话来陈述C标准包含在C++标准中。另外,内存泄露和UB是C++标准的一部分,但没有人会考虑推荐它们。 – Puppy

回答

0

如果你希望你的地图是人类可读的,你需要编写一个解析器。然而,如果你不在乎,你应该做一些完全不同的事情:使用序列化,例如,从Boost

对于你的情况,对于游戏来说很常见的第三种替代方法是将地图存储为图像文件。然后,您可以使用您最喜欢的图像处理程序编辑地图,并且可以通过程序轻松解释。 许多库可以为你读取图像数据(并以二维数组的形式呈现给你),并且在游戏中你可能已经有了类似的东西。