首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >保存/恢复Ruby的随机

保存/恢复Ruby的随机
EN

Stack Overflow用户
提问于 2015-09-07 04:28:13
回答 3查看 244关注 0票数 0

我正在尝试创建一个游戏,我希望在相同的种子条件下始终运行相同的游戏。这意味着,对于两个使用相同种子的球员来说,随机事件--无论他们是什么--都是一样的。但是,考虑到用户保存和加载游戏的能力,Ruby的随机设置会在每次加载保存时重置,如果两名玩家在不同的点保存和加载,则整个原则就无效。

我为此设想的唯一解决方案是,每当加载一个保存文件时,生成与以前相同数量的点,从而使Ruby的随机状态与加载前的状态相同。但是,要做到这一点,我需要扩展它,以便每次生成随机数时更新计数器。

有没有人知道如何做到这一点,或者有一个更好的方法来恢复Ruby的随机状态?

PS:我不能使用一个随机的实例(Random.new)并对其进行马歇尔。我必须使用Ruby的默认值。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-09-07 19:20:43

听起来卸/卸/装可能正是你想要的。Random文档显式声明“可以封送随机对象,允许保存和恢复序列”。

由于不同的基于用户的决策可以引导您通过不同的逻辑路径,从而以完全不同的方式使用随机数序列,您可能仍然会在不同的游戏中遇到同步问题。

票数 1
EN

Stack Overflow用户

发布于 2015-09-07 04:51:56

我建议在用户决定保存(或程序关闭时)时,根据您的喜好将“当前”数据保存到文件中。

这可以使用ruby中的文件类来完成。

这意味着您需要跟踪转弯,并将其与保存数据一起传递。或者,您可以循环遍历文件中的数据,并找出以这种方式发生了多少次转弯。

所以你会有这样的东西:

代码语言:javascript
代码运行次数:0
运行
复制
def loadGame(loadFile)

    loadFile.open
    data = loadFile.read
    # What you do below here depends on how you decide to store the data in saveGame.

end

def saveGame(saveFile)

    saveFile.open
    saveFile.puts data
end

没有真正尝试以上的代码,所以它可能是错误的语法或诸如此类。这主要是我想要理解的概念。

希望这能帮上忙?

票数 0
EN

Stack Overflow用户

发布于 2015-09-07 18:06:45

有许多生成器仅从前一个值计算序列中的每个随机数,所以如果使用其中的一个,您只需要保存最后一个随机数作为游戏状态的一部分。一个例子是一个基本的线性同余发生器,它的形式如下:

代码语言:javascript
代码运行次数:0
运行
复制
z(n+1) = (az(n) + b) mod c

其中abc通常是大(已知)常数,而z(0)是种子。

一个可以说更好的方法是所谓的"多带进位“方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32431102

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档