一.前言
嗨嗨嗨,今天给大家分享的是如何运用前面所学的分支结构和循环结构去实现我们第一个代码小游戏——猜数字游戏,游戏要求:1.电脑自动生成1~100的随机数 2.玩家猜数字,猜数字过程中,根据猜测数据的大小给出猜大了还是猜小了的反馈,直到才对结果,游戏结束。
废话不多说,我们开始今天的分享吧。
二.正文
1.随机数的生成
1.1 rand
C语言提供了一个函数叫rand,通过这个函数我们可以生成随机数,函数的原型为:
rand函数会返回一个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分的编译器上都是32767。
注意的是,rand函数的使用需要包含一个头文件是:stdlib.h。
下面,我们将会运行一下rand函数,让大家有个大概的认识:
通过代码结果显示,每一次生成的数确实不一样,我们再将代码重新运行一下,看结果如何
欸?为什么结果和第一次运行的结果一样嘞?按照我们最初的想法,我们生成的是随机数,那为什么两次的结果一样呢?原来,rand函数生成的是一个伪随机数,伪随机数不是真正的随机数,而是通过某种算法生成的随机数。真正的的随机数是无法预测下一个值是多少的。而rand的函数是对一个叫“种子”的基准值进行运算生成的随机数。
之所以前面每次运行程序产生的随机数是一样的,那是因为rand函数生成随机数的默认种子是1。
如果要生成不同的随机数,就要让种子是变化的。
既然如此我们试着把种子1改成其它数字,看看结果是否改变:
通过图上可以看出,当种子分别是2和3的时候生成的随机数是截然不同的。
1.2 srand
C语言中提供了一个函数叫srand,用来初始化随机数的生成器的,srand的原型如下:
程序中在调用rand函数之前先调用srand函数,通过srand函数的参数seed来设置rand函数生成随机数时候的种子,只要种子变化,则每次生成的随机数就会变化。
也就是说我们需要一个种子的随机数来让rand生成真正的随机数,这里有点矛盾,我们需要生成一个随机数就需要一个随机数。那么有没有一个东西让这个种子随时处于变化中呢?这就需要了解到我们的time函数了。
1.3 time
在程序中我们一般使用程序运行的时间作为种子,因为只要时刻处于变化中,那么种子就是变化的。
在C语言中有一个函数叫time函数,就可以获得这个时间,time函数原型如下:
time函数会返回当前的日历时间,其实返回的是1970年1月0时0分0秒到现在程序运行时间之间的差值,单位是秒。返回的类型是time_t类型,time_t类型本质上其实就是32位或者64位的整形类型。
time函数的参数timer如果是非NULL的指针的话,函数也会将这个返回的差值放在time指向的内存中带回去。
如果timer是NULL,就会返回这个时间的差值。time函数返回的这个时间的差值叫做“时间戳”。
需要注意的是,引用time函数的时候需要包含头文件:time.h
如果我们只是让time函数返回时间戳的话,我们可以这样写:
接下来让我们来生成真正的随机数吧:
如图所示,两次代码运行的结果不一样,大家的代码不一定和我的相同,因为返回的时间戳不同,种子就不同,即生成的随机数当然也不同喽。所以现在我们已经真正的实现生成随机数的这个结果啦
1.4 设置随机数的范围
比如我们想要生成0~99的随机数,就可以像如下这般操作:
因为%求得就是一个数的余数,且rand()%100的余数是0~99,所以随机数的的范围就被设置成了0~99。
如果要生成1~100的随机数,只需要在上面代码的前面加1即可,如图所示:
2.猜数字的编写
三.总结
嗨嗨嗨,今天的猜数字游戏的分享就到这里了,帅哥美女们我们下期再见