游戏介绍
猜数字游戏即给定一个既定范围内的目标数,然后游玩者猜测该数字,若猜测数字过小,则会提示“猜小了”;若猜测数字过大,则会提示“猜大了”。直到该数字被猜到。
我们可以通过以下代码实现上述内容。
#include <stdio.h>
int main()
{
int n = 0;//目标数
int input = 0;
scanf("%d", &n);
while (1)
{
scanf_s("%d", &input);
if (input > n)
{
printf("猜大了\n");
}
else if (input < n)
{
printf("猜小了\n");
}
else
{
printf("猜中了\n");
break;
}
}
return 0;
}
代码效果如下
但,这个代码中存在很多问题,一者是输入的目标数已知,带着答案找答案就没意思了;二者是,这个游戏只能玩一次,要想重复玩只能再运行一次该代码;三者是,该代码没有游戏菜单,无法让玩家进退自如。
本篇博客主要解决第一个问题。
知识点介绍
1.随机数函数rand
C语言中提供了一个函数交rand,这个函数可以生成随机数,代码如下。
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
通过测试我们发现,运行多少次结果都是一样的,如下图。
这是因为我们的rand函数其实是通过算法来得到的随机数,也就是说,这个随机数是伪随机数。
rand函数是对一个叫“种子”的基准值生成的随机数。上图得到的随机数是一样的,那是因为我们的rand函数默认种子是1,那么若想真正的达到随机的效果,则需要我们的另外一个函数srand。
2.srand函数
C语言中提供了另外一个函数叫srand,这个函数是用来初始化随机数的生成器的,srand的原型如下:
void srand (unsigned int seed)
从以上代码可以看出,该函数的输入值是无符号整型的。
我们通过该函数的参数seed来设置rand生成随机数时候的种子。
但是我们又发现了另外一个问题,大兄弟,seed的值都不是随机的,那rand的数怎么随机?
为了解决这个问题,我们一般都是使用程序运行的时间做为种子的,因为时间时刻都在变化。那么下面我们来介绍以下time函数。
3.time函数
因为时间时刻是随时变化的,那么我们就可以用time函数来充当我们的seed值。
time函数的原型如下
time_t time (time_t* timer);
由该函数的原型可以看出,返回类型为time_t类型,即整型。而如果time函数中的参数timer是NULL的话,就可以返回时间戳。
这样就完成了真正的随机数生成,那么现在我们就可以写出如下代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//time函数所需要的头文件
int main()
{
srand((unsigned int)time(NULL));//因为srand的参数是unsigned int类型,我们将time函数的返回值强制类型转换
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
printf("%d\n", rand());
return 0;
}
现在我们便完成了随机数的实现,那么现在则需要想办法规定出这个范围。
我们用如下方法来规定这个范围
4.随机数范围的规定
(1)如果要生成1~100的随机数,方法如下:
rand()%100+1;
(2)生成100~200的随机数,方法如下:
100+rand()%(200-100+1);
(3)所以如果要⽣成a~b的随机数,⽅法如下:
a+rand()%(b-a+1);
到此为止,我们便掌握了写出这款游戏所必备的知识!
关于游戏的实现,请移步下一篇博客!