C ++ |生成10-20之间的伪数

时间:2010-12-10 20:48:50

标签: c++ random

我正在制作一个基于文本的C ++ RPG,我正试图弄清楚如何计算敌人击中你的伤害量。我的想法是这样的。

伤害完成= randomIntBetween10and20 * enemyLevel

通过这种方式,它并不总是每次都达到设定的数量,并且允许致命一击(例如,如果命中率高于15,我会把它归类为致命一击)

我是C ++的新手,所以我不确定如何做到这一点,我们将非常感谢任何帮助。

9 个答案:

答案 0 :(得分:26)

你应该从标题中省略“真实”这个词,因为你可能不是这个意思。您可能只需要一个伪随机数字。使用个人计算机几乎不可能实现真正的随机性。以下代码段将为您提供10..19(含)范围内的伪随机数:

#include<cstdlib>
#include<ctime>

// ...
srand(time(0));
int r = rand() % (20 - 10) + 10;

如果您想在范围中包含20,那么这是11个数字的范围:

int r = rand() % (21 - 10) + 10

答案 1 :(得分:6)

一个很好的选择是std::random,它是C ++内置的随机数生成器。

如果您还没有C ++ 11支持,请使用boost::random。新std::random基于boost::random,因此基本相同。该文档有几个示例,包括Generating integers in a range

提供的选项之一是Mersenne Twister(mt19937),它是一个很好的通用伪随机数生成器。

与大多数其他建议一样,这是伪随机的。要获得真正的随机性更难 - 但你不需要RPG,对吧? (对于加密强的随机数,请考虑OpenSSL或在Windows上CryptoAPI。)

答案 2 :(得分:4)

stdlib随机数生成器是一个可以开始的好地方:

#include <stdlib.h>
#include <time.h>

srand(time(NULL)); // initialize the RNG
int poll = rand() % 20; // random number between 0 and 19 inclusive

最终,您将要开始使用更随机的RNG。 游戏编码完成有一个相当不错的开始。

答案 3 :(得分:2)

正如其他人所说,也许rand()对你来说真的足够了。 重要的是用于初始化伪随机数生成器的种子(对srand()的调用是种子)

但要注意,True Chaos并不意味着您有完全相同的机会生成任何可能的随机输出。

十年前,我玩过随机声音。 我需要几个混乱的来源。

我只是告诉你那些我保留并发现有用的东西。当然因为他们需要种子,所以他们是伪乱。

1 /对于-1和1之间的混沌浮点数:计算函数f(x)= cos(exp(x))。 exp()增长得如此之快,以至于经过很少的迭代后,cos()的结果就是混乱。

2 /贝克变换:0到1之间的混沌数:取一个数,乘以2,再次,当它高于1时,减去一些东西,使其回到0和1之间。更多准确的解释The Baker Transform

但我认为rand()和srand()会让你满意。

对于适用于10-20的范围,当然可以通过乘法和偏移来拉伸/缩放混沌范围(0; 1)或(-1; 1),以便输出符合您的需要。 ; - )

答案 4 :(得分:2)

使用模数(%)的方法不是一个好选择,因为分布是关闭的。这样更好:

double GetRandom(double Min, double Max)
{
    return ((double(rand()) / double(RAND_MAX)) * (Max - Min)) + Min;    
}

您需要包含algorithm并使用srand播种生成器。

当然,它只是伪随机的。您将无法获得真正随机的结果,尤其是使用rand

答案 5 :(得分:1)

使用srand()初始化随机数生成器:

sand(time(NULL));

http://www.cplusplus.com/reference/clibrary/cstdlib/srand/

然后使用rand()函数生成一系列随机数。

http://www.cplusplus.com/reference/clibrary/cstdlib/rand/

答案 6 :(得分:1)

“生成”真正随机数的唯一方法是通过与一些随机的环境因素的相互作用。本网站提供的服务可以帮助您:http://www.random.org/

答案 7 :(得分:0)

此链接必须帮助您在C ++中生成限制内的随机数 http://www.codeguru.com/forum/showthread.php?t=378879

答案 8 :(得分:0)

看看这个,它可能会有所帮助:

// random numbers generation in C++ using builtin functions
#include <iostream>

using namespace std;

#include <iomanip>

using std::setw;

#include <cstdlib>   // contains function prototype for rand

int main()
{
// loop 20 times
for ( int counter = 1; counter <= 20; counter++ ) {

    // pick random number from 1 to 6 and output it
    cout << setw( 10 ) << ( 1 + rand() % 6 );

    // if counter divisible by 5, begin new line of output
    if ( counter % 5 == 0 )
        cout << endl;

}

return 0;  // indicates successful termination

} // end main