猜数字游戏必备知识点---随机数!

游戏介绍

猜数字游戏即给定一个既定范围内的目标数,然后游玩者猜测该数字,若猜测数字过小,则会提示“猜小了”;若猜测数字过大,则会提示“猜大了”。直到该数字被猜到。

我们可以通过以下代码实现上述内容。

#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);

到此为止,我们便掌握了写出这款游戏所必备的知识!

关于游戏的实现,请移步下一篇博客

  • 17
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值