0

基本上,作为一个团队的一员,我不得不为我的大学课程创建一个类似吃豆人的游戏,只是僵尸而不是幽灵。到目前为止,我们已经构建了所有游戏,并且它似乎运行得非常好。我们当前的问题是我们必须保存游戏(使用用户名和分数),将游戏加载到曾经保存的位置,使用正确的用户名和分数,最后能够提供重播选项,用户可以查看他们之前所做的所有动作(以及僵尸所做的动作)。僵尸将始终做出与用户相同的动作,因为它们旨在追逐用户。

我的问题是执行保存、加载和重新加载选项的最佳方法是什么?我们不能使用向量、堆栈或队列。我们只能真正使用字符串、数组和其他基本变量。
我们正在考虑通过将所有内容添加到字符串的末尾然后从字符串中弹出最后一个值来进行重新加载。然后我们可以将每一个延迟一秒,用户将能够看到他/她的动作。

至于保存我们不确定,还有孔(0 符号)和药丸(* 符号)要考虑在内。所以需要保存角色、僵尸、药丸和洞的位置。角色可以从任何随机位置开始,几乎所有其他内容都放在后面。

我们进行加载的方式将取决于您建议我们进行保存的方式。

有人对我们应该如何保存、加载和重播有任何建议吗?

谢谢

4

2 回答 2

1

我能想到的最简单的方法是保存用户输入。

这样,您可以通过将输入发送到游戏引擎来轻松地重玩游戏(这可能需要根据游戏引擎的设计进行大量重组)。为了加速加载,您还可以在保存时保存游戏状态(通过序列化)。

这就是想法,怎么做……你需要一个不断扩展的数组来记录用户输入,所以让我们使用一个链表。

struct Node {
    T data;
    Node* next_node;
};
//Google for the rest of the code, it is a reeeaaallly
//    basic/fundamental data structure.

数据将是用户输入和它们发生的时间。要保存数据,您只需遍历链表并将其附加到 std::ostream& (通用,具体为 std::ofstream& )。

您可以在用户输入之前或之后添加一些其他有用的信息(例如游戏状态和高分)(甚至在另一个文件中,这对于高分确实有意义)。

于 2013-04-23T01:22:55.497 回答
0

您需要阅读一些序列化。我在这里写了一些文章,但这对你们来说太过分了:http ://www.randygaul.net/2013/01/05/c-reflection-part-5-automated-serialization/

您可以使用一些非常简单的序列化将每个僵尸的动作写到一个文件中。然后,当您想要重新加载此信息时,您将反序列化文件中的信息。每个动作都可能以某种形式的链接列表存储,因此您必须想出一种在反序列化时重新创建此类列表的方法。

你的问题很广泛,所以我的回答也必须很广泛。真的由你来研究解决方案并实施它。

于 2013-04-23T00:32:44.287 回答