C# 如何保存游戏状态?
所以我现在正在做一个简单的游戏项目,大多数人都是从“突破”开始的。我的部分目标是以最简单的方式保存当前游戏状态。 例如 ==情景== 然后让我们假设我输掉了比赛,或者我想睡觉,因为我累了,所以我想重新加载游戏状态,回到与划桨、球和砖块相同的位置。唯一的问题是我有多个表单,我只想将这个特定表单保存在它的特定状态 我对如何接近有一个想法(我会找到一种方法来保存桨、球和砖块的位置以及准确的时间),只是我不知道如何执行它。C# 如何保存游戏状态?,c#,C#,所以我现在正在做一个简单的游戏项目,大多数人都是从“突破”开始的。我的部分目标是以最简单的方式保存当前游戏状态。 例如 ==情景== 然后让我们假设我输掉了比赛,或者我想睡觉,因为我累了,所以我想重新加载游戏状态,回到与划桨、球和砖块相同的位置。唯一的问题是我有多个表单,我只想将这个特定表单保存在它的特定状态 我对如何接近有一个想法(我会找到一种方法来保存桨、球和砖块的位置以及准确的时间),只是我不知道如何执行它。 我怎样才能实现这一壮举呢?您只需将其保存在XML文件中,然后在启动时读取XML文
我怎样才能实现这一壮举呢?您只需将其保存在XML文件中,然后在启动时读取XML文件。您只需将其保存在XML文件中,然后在启动时读取XML文件。这可能是一个非常复杂的问题,但在您的情况下,我建议从简单开始,随着游戏变得更加复杂,从简单开始。从本质上讲,概率被称为。或者,将应用程序的内存写入磁盘或数据库,以便以后可以将其读回内存 有很多技术可以实现这一点,例如将对象转换为XML或JSON或其他二进制文件格式。例如,位图文件只是内存中某些图像结构的序列化形式 我真的不知道除了C#(XNA?)之外,你在制作游戏时使用的是什么技术,但本质上你希望使用某种在你的环境中可用的文件系统API,并在那里编写你的序列化对象。根据您的问题,您可能需要重新设计一些游戏来实现这一点。一般来说,最好的做法是用一个“真实来源”来表示你的游戏状态,但即使你不这样做,你仍然可能找到它 下面是我将采取的步骤的大致轮廓 序列化
- 这些简单的对象大多具有所有公共getter/setter属性,而没有任何功能
- 试着只写下你以后重新创建游戏状态所需的最低限度的信息
- 例如,请参见国际象棋如何序列化游戏状态:
- 我可能会在这里使用基于约定的方法
- 例如“Saves\game1.json”是第一个游戏槽的状态李>
- 只要根据存在的文件的正确名称推断已保存的游戏即可
- 考虑使用访问者模式
这可能是一个非常复杂的问题,但在你的情况下,我建议从简单开始,随着游戏变得更加复杂,从简单开始。从本质上讲,概率被称为。或者,将应用程序的内存写入磁盘或数据库,以便以后可以将其读回内存 有很多技术可以实现这一点,例如将对象转换为XML或JSON或其他二进制文件格式。例如,位图文件只是内存中某些图像结构的序列化形式 我真的不知道除了C#(XNA?)之外,你在制作游戏时使用的是什么技术,但本质上你希望使用某种在你的环境中可用的文件系统API,并在那里编写你的序列化对象。根据您的问题,您可能需要重新设计一些游戏来实现这一点。一般来说,最好的做法是用一个“真实来源”来表示你的游戏状态,但即使你不这样做,你仍然可能找到它 下面是我将采取的步骤的大致轮廓 序列化
- 这些简单的对象大多具有所有公共getter/setter属性,而没有任何功能
- 试着只写下你以后重新创建游戏状态所需的最低限度的信息
- 例如,请参见国际象棋如何序列化游戏状态:
- 我可能会在这里使用基于约定的方法
- 例如“Saves\game1.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);