欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

随机数的生成

程序员文章站 2022-05-26 23:36:22
...

随机数的生成

随机数在游戏中应用比较广泛,比如砍怪随机掉血,装备随机掉落,道具的随机生成。如果没有随机事件,怪物将以重复的方式攻击你,装备的掉落知识乏味的重复。

首先看一段伪随机数生成的代码:

#inclde <iostream>
//伪随机数的生成
unsigned int PseUdoRandomNumber(){
    //初始化种子数
    static unsigned int seed=5323;

    seed=(8253729*seed+2396403);

    retrun seed%32768;
}
int main(){
    //打印100个随机数,每行8个
    for(auto count=1;count<=100;count++){
        cout<<PseUdoRandomNumber()<<"\t";
        if (count%8==0){
            cout<<endl;
        }
    }
}

执行结果如下:

随机数的生成

每一个随机数的产生都是相对于上一个数字而随机产生的。且每次运行这段代码,输出的结果都是一样的,相对于完全随机来说,存在很多缺陷。

接下来看一下如何使用C++内置的伪随机数库来创建随机数:

#include <iostream>
#include <cstdlib>
using namespace std;

int main(){
    srand(5323);
    for(int count=1;count<=100;count++){
        cout<<rand()<<"\t";
        //每行打印6个数字
        if(count%6==0){
            cout<<"\n";
        }
    }
    return 0;
}

输出如下所示:

随机数的生成

多次运行这段代码,输出的结果均一样,修改一下,使得每次运行输出的数字不一样,调用系统时间作为随机数的种子。如下:

#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

int main(){
    srand(static_cast<unsigned int>(time(0)));
    for(int count=1;count<=100;count++){
        cout<<rand()<<"\t";

        if (count%5==0){
            cout<<"\n";
        }
    }
    return 0;
}

运行这段代码,每次生成的随机数都是不一样的。接下来生成一些定制化的随机数,要求生成的随机数在一个区间范围之内,比如区间[0,10],代码如下:

实现过程:

int GerRandomBetweenInterval(int min,int max){
    static const double fraction = 1.0 / (RAND_MAX + 1.0);
    return min+static_cast<int>((max-min+1)*(rand()*fraction));
}

主函数中调用:

int main()
{
    for (auto i=1;i<=10;i++)
    {
        cout << GetRandomBetweenInterval(0, 9) << "\t";
        if (i%2==0)
        {
            cout << endl;
        }
    }
    cout << "\n";
    return 0;
}

输出如下所示:

随机数的生成

扫码获取更多文章:

随机数的生成

相关标签: 随机数的生成