随机但可预测的数字生成器? [C ]

随机但可预测的数字生成器? [C ],第1张

概述好吧,我真的不知道如何搜索我正在寻找的东西. 谷歌提供了大量的结果,但没有一个符合我的标准. 所以我在这里问: 是否有任何已知的代码可以创建一个可预测的,看起来是随机的,并且基于’种子'(在我的情况下是unix时间戳)和指定范围之间的代码? 我希望能够在脚本中为我正在编码的游戏创建天气预报(但我需要可以移植的C代码,我不认为这里有很多人熟悉’PAWN'[又名SMALL]脚本语言? :) ). 天气 好吧,我真的不知道如何搜索我正在寻找的东西.
谷歌提供了大量的结果,但没有一个符合我的标准.

所以我在这里问:
是否有任何已知的代码可以创建一个可预测的,看起来是随机的,并且基于’种子'(在我的情况下是unix时间戳)和指定范围之间的代码?

我希望能够在脚本中为我正在编码的游戏创建天气预报(但我需要可以移植的C代码,我不认为这里有很多人熟悉’PAWN'[又名SMALL]脚本语言? :) ).
天气ID从0到100不等,包括一些弃用的ID(所以我的解决方案是制作一个包含有效天气ID的数组,这样我们就不用担心那些BAD_ID了,不要让功能太复杂).

我可以制作这样的公式,但过去我遇到的问题是天气变化太快(就像每一秒,虽然我在某处遗失了代码:/)而且现在我真的不知道我是怎么做的我要做出这样的公式.

任何建议都非常感谢!

解决方法 看看 random number generator used by VB6的C实现.它非常适合游戏,因为它产生相当可信的随机序列,但使用种子,同一种子总是生成相同的序列.因此,在游戏数据文件中,您可以保存一组种子值,这些种子值将为您提供可以轻松复制的已知(但随机查看)序列.

这是一个返回范围内值的实现:

typedef int Int32;typedef unsigned int UInt32;class CRnd{    private:        static const UInt32 INITIAL_VALUE = 0x50000;        static const UInt32 INCREMENT = 0xC39EC3;        static const UInt32 MulTIPLIER = 0x43FD43FD;    private:        UInt32 m_nRnd;    public:        CRnd () { m_nRnd = INITIAL_VALUE; };        CRnd ( IN UInt32 nSeed ) { m_nRnd = nSeed; };        virtual ~CRnd () {};        Int32 Get ( IN Int32 nFrom,IN Int32 nTo )        {            if ( nTo < nFrom ) // nFrom should be less than nTo            {                Int32 nTmp = nTo;                nTo = nFrom;                nFrom = nTmp;            }            else if ( nTo == nFrom )            {                return ( nTo );            }            m_nRnd = ( m_nRnd * MulTIPLIER + INCREMENT ) & 0xFFFFFF;            float fTmp = (float) m_nRnd / (float) 16777216.0;            return ( (Int32) ( ( fTmp * ( nTo - nFrom + 1 ) ) + nFrom ) );        };        voID SetSeed ( IN UInt32 nSeed ) { m_nRnd = nSeed; };        UInt32 GetSeed () { return ( m_nRnd ); };};
总结

以上是内存溢出为你收集整理的随机但可预测的数字生成器? [C ]全部内容,希望文章能够帮你解决随机但可预测的数字生成器? [C ]所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1214546.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存