Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何保存游戏状态?_C# - Fatal编程技术网

C# 如何保存游戏状态?

C# 如何保存游戏状态?,c#,C#,所以我现在正在做一个简单的游戏项目,大多数人都是从“突破”开始的。我的部分目标是以最简单的方式保存当前游戏状态。 例如 ==情景== 然后让我们假设我输掉了比赛,或者我想睡觉,因为我累了,所以我想重新加载游戏状态,回到与划桨、球和砖块相同的位置。唯一的问题是我有多个表单,我只想将这个特定表单保存在它的特定状态 我对如何接近有一个想法(我会找到一种方法来保存桨、球和砖块的位置以及准确的时间),只是我不知道如何执行它。 我怎样才能实现这一壮举呢?您只需将其保存在XML文件中,然后在启动时读取XML文

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

==情景==

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

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

您只需将其保存在XML文件中,然后在启动时读取XML文件。

您只需将其保存在XML文件中,然后在启动时读取XML文件。

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

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

我真的不知道除了C#(XNA?)之外,你在制作游戏时使用的是什么技术,但本质上你希望使用某种在你的环境中可用的文件系统API,并在那里编写你的序列化对象。根据您的问题,您可能需要重新设计一些游戏来实现这一点。一般来说,最好的做法是用一个“真实来源”来表示你的游戏状态,但即使你不这样做,你仍然可能找到它

下面是我将采取的步骤的大致轮廓

序列化

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

  • 根据上述惯例寻找游戏扑救
  • 将JSON反序列化回简单的序列化对象
  • 通过查看序列化对象重新创建更复杂的游戏状态。
    • 考虑使用访问者模式
  • 使用新水合的游戏状态恢复游戏
  • [编辑:添加一些额外链接和快速代码示例]

    这是一个非常好的开源json库:


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

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

    我真的不知道除了C#(XNA?)之外,你在制作游戏时使用的是什么技术,但本质上你希望使用某种在你的环境中可用的文件系统API,并在那里编写你的序列化对象。根据您的问题,您可能需要重新设计一些游戏来实现这一点。一般来说,最好的做法是用一个“真实来源”来表示你的游戏状态,但即使你不这样做,你仍然可能找到它

    下面是我将采取的步骤的大致轮廓

    序列化

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

  • 根据上述惯例寻找游戏扑救
  • 将JSON反序列化回简单的序列化对象
  • 通过查看序列化对象重新创建更复杂的游戏状态。
    • 考虑使用访问者模式
  • 使用新水合的游戏状态恢复游戏
  • [编辑:添加一些额外链接和快速代码示例]

    这是一个非常好的开源json库:


    这听起来像是它的归属。我试着使用FileIO,但它并没有像我计划的那样工作。@JasonTowne谢谢,伙计,我不知道stackexchange有一个开发网站thanks@Coolbeans:你应该发布不工作的代码。@AustinSalonen问题是我删除了它,我的一个朋友告诉我它不工作,我接受了他的建议
    // 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);