保存,加载和重播游戏。 C ++

时间:2013-04-22 21:23:53

标签: c++ visual-studio-2010

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

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

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

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

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

感谢

2 个答案:

答案 0 :(得分: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&具体)。

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

答案 1 :(得分:0)

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

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

你的问题非常广泛,所以我的答案也必须非常宽泛。实际上,您需要研究解决方案并实施它。