繁体   English   中英

如何保存游戏状态?

[英]How to save a game state?

因此,我目前正在研究一个简单的游戏项目,大多数人都从“突破”开始。 我目标的一部分是尽可能简单地对当前游戏状态进行游戏保存。 例如。

==场景==

然后说我输了比赛,或者因为我累了而想上床睡觉,所以我想将游戏状态重新加载到桨,球和砖头的相同位置。 唯一的问题是我有多种形式,我只想将此特定形式保存为特定状态。

我对如何处理有一个想法(我会找到一种方法来保存桨,球和砖的位置以及确切的时间),只是我对如何执行它一无所知。 我到底如何实现这一壮举?

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

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

除了C#(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);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM