【发布时间】:2010-09-30 19:16:42
【问题描述】:
我在project of gamedev 的一个简单的 C++ 文本游戏中迟到了。我研究了这个项目,我想我知道如何做所有事情,但我遇到了一件事情:如何按照建议保存和加载游戏.我不想为我完成这件事,只有你告诉我一个方法。
【问题讨论】:
我在project of gamedev 的一个简单的 C++ 文本游戏中迟到了。我研究了这个项目,我想我知道如何做所有事情,但我遇到了一件事情:如何按照建议保存和加载游戏.我不想为我完成这件事,只有你告诉我一个方法。
【问题讨论】:
嗯,我能想到的最简单的方法是拥有一个代表整个游戏“状态”的结构/类。在保存时,您只需将整个结构从内存写入磁盘。加载则相反。
它在磁盘上的格式完全取决于您,如果您的状态完全由简单的数据类型组成,您可能只想编写一个二进制 blob。或者您可能想要使用更通用的东西,例如将其序列化为 XML,这完全取决于您。
【讨论】:
我只是快速浏览了一下帖子,但这是我的建议:
您的游戏状态可能由几个结构和一些数据数组组成。这些结构将定义玩家(姓名、健康、金钱等)、武器(攻击、机会等)、盔甲等......
首先,您将通过保存玩家的结构来写入玩家的状态。接下来是玩家拥有的武器数量,然后是一系列武器结构,盔甲也是如此......
文件格式为
STRUCT player
INT num_of_weapons
STRUCT weapon
STRUCT weapon
STRUCT weapon
INT num_of_armor
STRUCT armor
STRUCT armor
使用 fstream 可以轻松完成。
【讨论】:
您所描述的过程称为“序列化” - 即获取内存中的对象并将其转换为可以保存到磁盘的某种形式。它可以像原始内存转储一样简单,也可以像 XML 这样复杂。
我建议查看有关此主题的维基百科文章:http://en.wikipedia.org/wiki/Serialization
【讨论】:
我没有阅读您链接到的网站,但您可能想要编写读取/写入基本文本文件的代码以加载/保存您的游戏。
首先,弄清楚如何格式化文本文件。例如,如果我正在编写一个允许玩家保存游戏的 pacman 游戏,那么文本文件可能如下所示:
5
54700
3
我会编写代码来一次读取一行文件:
第 1 行:玩家所在的关卡。
第 2 行:玩家拥有的点数。
第 3 行:玩家拥有的生命数。
在 Google 上搜索 C++ 文件输入/输出以了解如何编写实际代码。
【讨论】:
这完全取决于您的保存文件的复杂程度。如果它只是几个整数,那么简单地编写几个函数可能很容易,这些函数会以指定的顺序将这些值写入文件,然后以与写入它们相同的顺序加载它们。如果它需要更复杂并处理保存多个对象的值而不是序列化是你最好的选择。如果您正在寻找人类可读的保存格式,我建议您使用 XML 序列化,否则您可能需要查找一些非人类可读的格式。
【讨论】: