关于如何生成随机数的详细知识
1.rand函数的相关知识
在c语言中,存在一个生成随机数的函数,叫rand函数:函数原型为 int rand(void);
rand函数会返回一个伪随机数,这个随机数的范围是在0-RADN_MAX之间,这个最大数是依赖编译器实现的,大部分编译器的最大值是32767;
rand函数所需要的头文件是<stdlib.h>;
如图我们用rand函数随机生成几个数字看看运行结果,发现4个数真的是随机的,但是我关掉第一次运行的结果再运行多次会发现,后面几次的结果都和第一次是相同的,这就是前面伪随机数的具体体现。所谓的伪随机数是通过算法生成的一些数字,而我们在游戏里面需要的真随机数是无法预测下一次值的随机数。而rand函数是基于一个“种子”为基准值生成的随机数,rand函数生成随机数时又默认1为基准值;
那么在这样的前提下,如果要生成不能预测的随机数,那么需要改变“种子”;
2.srand函数
为了解决上述问题,c语言又提供了一个函数叫srand来初始化所谓的基准值;
srand的形式是:void srand(unsigned int seed);
程序员在调用rand函数之前先调用srand,通过srand函数的seed来设置rand函数生成随机数时候的种子,只要种子在变,那么随机值也会真的在变化;
但是那样会意味着srand函数里面的seed也要一直在变化才可以,为了解决这个问题又可以引入一个新的知识,time
3.time函数
在程序中,一般都是用程序运行的时间来作为种子的,因为时间是时时刻刻在发生变化的;
我们可以用时间戳来作为seed然后传回给rand函数,这样就可以有一个一直在变化的种子也就是基准值(关于时间戳就是当前时间减去所谓计算机起始时间然后换算成秒的单位。具体可以去时间戳转化工具查看 时间戳(Unix timestamp)转换工具 - 在线工具 );
那么如何使用time函数把时间戳弄到srand函数里面呢:
(1)time函数形式:time_t time(time_t * timer);
(2)time函数的相关知识:(3)头文件为<time.h>;
(4)具体如何使用:srand((unsigned int )time(NULL)); (强制类型转化);
注意:在使用这个的时候如果使用太快会发生什么呢,那就是时间戳并未改变,所以让这个函数使用太快是没有多少意义的(至少对于这个猜数字小游戏来说);
4.生成随机数
生成1-10的随机数可以表示为:rand()%10+1:
生成1-100的随机数可以表示为:rand()%100+1:
生成100-200的随机数可以表示为:100+rand()%(200-100+1):
然后有如下规律:如果要生成a-b之间的随机数:a+rand()%(b-a+1);
关于游戏的代码实现
1.关于游戏菜单:
其中较为重要的就是srand((unsigned int )time(NULL));的放置地点,如果放在do-while循环里面的话则会导致之前提到的时间戳没变的问题;
二者就是在菜单设置中while括号中的判断条件为input;
2.游戏的完成过程:
这里面使用了一个system函数,其头文件是<stdlib.h>,然后其作用是清理屏幕;
我在这里还限制了一个五次的机会,但是也可以结合其他条件来完成,例如如果挑战失败就将使用关机程序等(具体怎么写可以参考:写文章-优快云创作中心);
总结
以上就是关于这个简单的游戏的形成过程,当然最重要的就是随机生成的过程以
及相关知识点。