随机但可预测的数字生成器? [C ]
发布时间:2020-12-16 09:40:29 所属栏目:百科 来源:网络整理
导读:好吧,我真的不知道如何搜索我正在寻找的东西. 谷歌提供了大量的结果,但没有一个符合我的标准. 所以我在这里问: 是否有任何已知的代码可以创建一个可预测的,看起来是随机的,并且基于’种子'(在我的情况下是unix时间戳)和指定范围之间的代码? 我希望能够在脚
好吧,我真的不知道如何搜索我正在寻找的东西.
谷歌提供了大量的结果,但没有一个符合我的标准. 所以我在这里问: 我希望能够在脚本中为我正在编码的游戏创建天气预报(但我需要可以移植的C代码,我不认为这里有很多人熟悉’PAWN'[又名SMALL]脚本语言? :) ). 我可以制作这样的公式,但过去我遇到的问题是天气变化太快(就像每一秒,虽然我在某处遗失了代码:/)而且现在我真的不知道我是怎么做的我要做出这样的公式. 任何建议都非常感谢! 解决方法
看看
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 ); }; }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |