随机数的生成
程序员文章站
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;
}
输出如下所示:
扫码获取更多文章:
上一篇: .net core 分布式配置中心