随机数的生成

随机数的生成

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

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

#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;
}

输出如下所示:

码码小虫

扫码获取更多文章:

码码小虫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值