1

所以我目前正在开发一个简单的游戏项目,大多数人都是从“突破”开始的。我的部分目标是以最简单的方式制作当前游戏状态的游戏存档。例如。

==场景==

然后假设我输掉了比赛,或者我因为累了想上床睡觉,所以我想重新加载游戏状态到我回到桨、球和砖的相同位置的地方。唯一的问题是我有多个表格,我只想将这个特定的表格保存在它的特定状态。

我有一个关于如何接近的想法(我会找到一种方法来保存桨、球和砖块的位置以及确切的时间)只是我不知道我将如何执行它。我究竟如何才能实现这一壮举?

4

2 回答 2

6

这可能是一个非常复杂的问题,但在您的情况下,我建议您从简单开始,随着您的游戏变得更加复杂,从那里开始。本质上,这个问题被称为序列化。或者,将应用程序的内存写入磁盘或数据库,以便以后可以读回内存。

有很多技术可以做到这一点,例如将您的对象转换为 XML 或 JSON 或其他一些二进制文件格式。例如,位图文件只是内存中某些图像结构的序列化形式。

除了 C#(XNA?)之外,我真的不知道您用于制作游戏的技术(XNA?)但本质上您想使用某种在您的环境中可用的文件系统 API 并在那里编写您的序列化对象。根据您的问题,您可能需要重新设计一些游戏以促进这一点。一般来说,最好有一个单一的“真实来源”来表示你的游戏状态,但即使你没有,你仍然可能会弄明白。

所以这里是我将采取的步骤的粗略轮廓......

序列化

  1. 编写一个获取游戏状态并输出更简单、可序列化对象的例程。
    • 这些简单的对象大多具有所有公共 getter/setter 属性,但没有任何功能。
    • 试着只写出稍后重新创建游戏状态所需的最少信息。
    • 例如查看国际象棋如何序列化游戏状态:国际象棋符号
  2. 将这些对象序列化为JSON(因为它简单灵活)
  3. 将该json写入磁盘。
    • 我可能会在这里使用基于约定的方法。
    • 例如“Saves\game1.json”是第一个游戏槽的状态。
    • 只需根据正确名称的文件的存在来推断保存的游戏。

反序列化

  1. 根据上述约定查找游戏存档。
  2. 将 JSON 反序列化回简单的序列化对象。
  3. 通过查看序列化对象重新创建更复杂的游戏状态。
    • 考虑使用访问者模式。
  4. 使用新水合的游戏状态恢复游戏。

[编辑:添加一些额外的链接和快速代码示例]

这是一个相当不错的开源 json 库:http: //json.codeplex.com/

// somehow convert your game state into a serializable object graph
var saveState = gameState.Save();

// use json.net to convert that to a string
string json = JsonConvert.SerializeObject(saveState, Formatting.Indented);

// save that string to the file system using whatever is available to you.
fileSystemService.WriteAllText("Saves\game1.json", json);
于 2012-05-16T19:37:20.220 回答
1

您可以简单地将其保存在 XML 文件中,然后在启动时读取 XML 文件。

于 2012-05-16T19:19:52.260 回答