【C语言】猜数字游戏的实现

简单不先于复杂,而是在复杂之后。

89efcc89ac61428db4d5b6639b2bd948.jpeg

目录

1.思路(代码会附在最后面)

2.随机数函数rand


1.思路(代码会附在最后面)

首先实现一个猜数字游戏我们先要有一个思路:
1.产生一个随机数

2.猜数字

3.可能猜大了

4.可能猜小了

5.直到猜对了结束

2.随机数函数rand

想要生成一个随机数,就要用到 rand 函数。

d01ffbe5f7d34581ad175e244af627f8.png

 rand 会返回一个 0 到 RAND_MAX 的整型

我们需要知道RAND_MAX是个什么样的值

把RAND_MAX转到定义如下图

a5e33764d5a94bc78b2fa8a10262e81e.png

 0X开头的是十六进制的数字

把鼠标移到十六进制数上方换算出的结果是32767

所以我们生成随机数的范围是0~32767之间的一个值

 【C语言】猜数字游戏的实现_第1张图片

以上是测试出生成的值

【C语言】猜数字游戏的实现_第2张图片

当关闭程序再次运行,我们会发现生成的随机数和上一次一模一样。

这显然不是我们想要生成的随机数,因为它并不随机。

085ecd4ff16e4141b7fdf9128627d8d8.png

 在调用 rand 函数之前需要使用 srand 函数来设置我们的随机数生成器。

【C语言】猜数字游戏的实现_第3张图片

srand 函数的是作用是设置一个随机数起点。


a98570d58f134133b00b3444a0c81301.png

 且需要一个无符号整形的一个数值。

【C语言】猜数字游戏的实现_第4张图片

 可是当我们用 srand 设置起点时,参数为100,生成的随机数的值全部都是 365。

这时我们发现,当 srand 中的参数变了,再次运行,生成的随机数也就改变了。

如果 srand 的参数是一个随机数,生成的数也就是随机的了。

我们为了生成一个随机数,需要一个随机数,很明显是不太现实的。

我们转换思路,参数只需要是时刻变化的数就可以,那么什么东西在时刻变化呢?

时间。

想要获取一个时间,就要引入时间戳的概念:

【C语言】猜数字游戏的实现_第5张图片

时间戳就是这个时间相对于计算机起始时间之间的一个差值。单位是秒。

时间在变,时间戳就在变。

使用 time 函数来获取时间戳。

time参数可以传一个空指针,time 的返回类型是 time_t, 但是 srand 参数需要一个无符号整型,所以就要强制类型转换。

2530b9542dfc49879944d21a4122c3aa.png

 转到定义看一下,空指针本质上就是0,表示我们不需要这个参数。

time 库函数需要的头文件是 #include

srand 库函数需要的头文件是 #include

不是每一次生成随机数都要设置一个起点,所以 srand 函数就不必放在 game 函数中,在主函数中设置一次就可以了。

如果每次生成都设置,就会发现,如果开两次生成随机数时间过短,有可能生成的随机数相同。可以自己试一下。

【C语言】猜数字游戏的实现_第6张图片

 现在我们已经可以生成足够随机的数了,但是我们想让这个数的生成范围是1~100

因为 rand 函数的生成范围是0~32767,所以这样处理:

rand()%100+1

范围就在1~100之间了。

下附代码:

#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include

//电脑产生一个随机数(1 ~ 100)
//猜数字
//猜大了
//猜小了
//直到猜对了结束

void menu()
{
	printf("##########################\n");
	printf("########   1.play  #######\n");
	printf("##########################\n");
	printf("########   0.exit  #######\n");
	printf("##########################\n");
}

//生成的随机数范围  0 ~ RAND_MAX(32767)
void game()

{
	int guess = 0;
	//time 函数返回 time_t(时间戳),用于获取系统时间。需要一个指针参数,如果不需要使用参数,传一个空指针。
	//time_t 为一个数据类型 - 整型

	//RAND_MAX;
	//在调用 rand 函数之前要使用 srand 来设置随机数生成器
	//srand : 设置一个随机的起点
	//1.生成随机数]
	//0~99 ----> 1~100
	int ret = rand() % 100 + 1;//生成随机数的函数,返回一个随机的整数
	//2.猜数字
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}

	}


}


//指针
//int *p = NULL; - 初始化空指针,本质是0
int main()
{
	srand((unsigned int)time(NULL));
	//不是每次生成随机数时都要设置一个起点,设置一次就就可以
	int input = 0;
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//猜数字的整个逻辑
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}
	} while (input);
	return 0;
}

你可能感兴趣的:(C语言,游戏,c语言,开发语言)