c++自制小游戏(2nd)rand与srand

来源:互联网 发布:网络杀毒软件有哪些 编辑:程序博客网 时间:2024/06/03 16:33

如果你看了上章的数字炸弹的话,你会觉得炸弹数的设置特别……怎么说呢?不好用。也就是说,我们应该让软件来选择炸弹数才公平。于是,我为大家介绍……
函数rand,函数原型int rand(void),用途:生成一个0~RANDMAX之间的假随机整数
你也许会问,RANDMAX是什么。RANDMAX是一个宏定义常量。根据系统以及编译器、开发软件的不同,一般为32767和2147483647。
你也许还会问,假随机是什么意思?呃……你可以理解为是让软件/电脑来选择这个数,并不是绝对的随机
于是嘛……改一改

#include<iostream>using namespace std;int main( ){    int x=rand( ),maxn=100,minn=1,a;    while(1){        cout<<minn<<'~'<<maxn<<endl;        cin>>a;         if(a>=minn && a<=maxn){            if(a>x)                maxn=a;            else if(a<x)                minn=a;            else{                cout<<"Boom!";                return 0;            }               }    }}

好吧,问题又出来了。rand的范围是0~RANDMAX,但我们只需要1~100。想想办法?
其实只要用%就可以轻松实现。1~100是100个数,我们就用rand( )%100,范围是0~99。还差一点,于是我们再加1得:rand( )%100+1来表示1~100。
哈哈,聪明吧!(当然这方法也不是我发明的)类似的,如果我们要使范围为a~b。其中是(b-a+1)个数,用rand( )%(b-a+1),范围为0~b-a。再加a得:rand( )%(b-a+1)+a来表示a~b
就当这是个公式背下来吧
a~b之间的伪随机数:rand( )%(b-a+1)+a
再改

#include<iostream>#include<cstdlib>using namespace std;int main( ){    int x=rand( )%100+1,maxn=100,minn=1,a;    while(1){        cout<<minn<<'~'<<maxn<<endl;        cin>>a;         if(a>=minn && a<=maxn){            if(a>x)                maxn=a;            else if(a<x)                minn=a;            else{                cout<<"Boom!";                return 0;            }               }    }}

你把这个编译运行一下,会发现每次的炸弹都是一样的。怎么办怎么办……
于是我要请出另一位嘉宾:
函数srand,原型void srand(unsigned int),用途:为rand提供种子
这是什么意思呢?其实你不用管那么多。如果你实在要知道的话,告诉你:电脑选择(伪)随机数的指标是当时的time。所以如果不加这个的话,失去了指标,就只能以某一段物理内存(一般是4B)里的数返回(而且永远只会是这4B里的数)
(一般)使用方法:srand(time(0))
最后再贴一次代码:

#include<iostream>#include<cstdlib>#include<ctime>using namespace std;int main( ){    srand(time(0));    int x=rand( )%100+1,maxn=100,minn=1,a;    while(1){        cout<<minn<<'~'<<maxn<<endl;        cin>>a;         if(a>=minn && a<=maxn){            if(a>x)                maxn=a;            else if(a<x)                minn=a;            else{                cout<<"Boom!";                return 0;            }               }    }}

最后补一句,rand和srand在stdlib.h里有定义,time在time.h里定义
第三期见

1 0
原创粉丝点击