0

我有兴趣创建游戏程序等,这些程序可以在玩游戏时学习并保存信息以供进一步使用。例如井字游戏,其中程序保存它赢或输的每个游戏,并创建某种树来存储游戏信息并在程序退出时将其保存在文件中。我遇到的问题是如何有效地将树保存在文件中。有什么建议么?然后提前。

(我正在用 C++ 编程)

4

4 回答 4

2

您正在寻找的也称为序列化。StackOverflow 上有很多关于 C++ 中序列化树的文章。我建议您将JSONYAML视为可能的格式。两者都有多个 C++ 库。

于 2013-08-13T15:46:57.627 回答
2

一种选择是使用Boost Property Tree,它可以帮助您将树结构加载和存储到 xml 文件中(并且还支持其他几种格式)。这个库有很好的文档,你可以直接在网站上找到很多例子

于 2013-08-13T15:43:56.837 回答
1

我想我会先尝试 nogard 的答案(我赞成他的)。但是,如果您发现您没有从运行时支持(即内存中的树)中获得太多价值,并且它实际上仅用作序列化/反序列化机制,我建议您尝试pugixml。它是一个非常完整、非常高效且易于集成的 xml 库。

此外,为了帮助内存部分,我在简单地用 STL 容器组合树方面取得了很好的成功(它比看起来更简单)。我发现不同的树可能有不同的要求(即指向父级的指针,没有指向父级的指针等)。如果树有大量节点,每个节点的这些指针可以加起来。而且,如果你对它们没有用处,考虑到你遍历你的树的方式,那么它只是浪费。

于 2013-08-13T15:50:55.800 回答
1

如果您的树是 stl 容器,例如地图,那么您可以为每个元素创建一个函子,将其数据序列化为字符串,或直接到文件,然后遍历树 - 使用像for_each这样的算法将调用函子为你。

这很简单。重新创建树是从文件中读取元素,将它们转换回对象并将它们添加到新的树结构中。您需要保留树的键,而不仅仅是值。

于 2013-08-13T16:00:34.543 回答