如何为基于java文本的游戏创建基于序列号的保存系统?

时间:2016-04-20 01:05:52

标签: java

所以,让我们说我想保存以下统计数据,作为一个例子。

情报,

inventory,(整个对象实例,在其中找到的字符串,什么不是)

金。

我的想法是简单地使用种子方法,比如在我的世界中,你知道吗?

当前游戏的状态=(当您按下保存并退出按钮时生成的随机8个字母代码。)

要加载游戏,只需输入代码即可。 (或者也许是一种在应用程序关闭后保留种子的方法?也许可以编写应用程序来创建一个带有txt文件中的代码的文件夹,然后从那里取出种子?

很抱歉,如果我的问题令人困惑,而且我没有输入任何代码,因为我找不到符合我在这里寻找的任何内容Q_Q

再次感谢!

2 个答案:

答案 0 :(得分:2)

如果你想使用字符串......这取决于你需要保存多少数据。

对于初学者来说,一个随机的字符串不会起作用(我的意思是......可能有一些真正的(比如,真正的)复杂的数学......?)。只是让所有不同的角色代表某些价值并从那里开始工作,这样会更容易。

首先,您需要确定存储游戏当前状态所需的位数。这包括诸如玩家所在的当前房间/等级/页面,玩家有多少健康/金钱/等等等。

接下来,您需要选择可以使用的字符。为了简化生活,你需要2 ^ N个不同的字符(用二进制排列)。十六进制非常适合这种情况(0-9,A-F),因为每个字符可以用来表示4位数据(参见:数字的十六进制和二进制表示)。

使用十六进制,你可以在8个字符的字符串中包含多达32位的数据 - 如果这对你的游戏来说足够了,那么你可以使用简单的十六进制字符串轻松处理保存。

例如;让我们说你正在说,其中一本游戏书,并希望存储0-200的页码,0-10的健康,0-1000的金牌。这意味着,页码为2个字符,健康为1个字符,金钱为3个字符。例如,在第16页,有3个生命值和854个钱,这将转换为;

page: 16, health: 3, money: 623 => 10 - 3 - 26F = 10326F

相反,28A2F0会转化为;

28A2F0 = 28 - A - 2F0 = level: 40, Health: 10, money: 752

当然,玩家也可以很容易地看到它是如何工作的,所以你可能还想用一个简单的算法来混淆数据(即混淆字符的顺序,改为使用16个随机字符代替常规十六进制等)。

答案 1 :(得分:1)

在这种游戏中实现保存/加载功能的最简单方法是创建一个文本文件并将要保存的内容写入其中。

文本文件的第一行是你的金币,第二行是你的智力等。程序将逐行遍历每一行,直到找到读取“inventory:”的行。之后的每一行都是库存中的一个项目。

基本上,第一行始终是黄金,第二行始终是HP,第三行是第三行,直到文件末尾为库存中的商品。

我的世界使用种子加载世界的方式比这更复杂,并且不能用于实际的保存/加载。