猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂

文章目录

  • 前言
  • ==文章重点==
  • 1.游戏思路
  • 2.构建游戏框架
    • 2.1游戏初建
    • 2.2设置game
      • ==2.2.1如何生成随机数字==
      • ==2.2.2玩家输入数字,判断输入大小==
        • 猜数字小游戏总代码
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

  • 编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。

前言

通过一段时间的对C语言的认识,我们来检测一下吧!本篇用猜数字小游戏把对循环选择使用进一步加深,看看是否对你也有进一步的作用!


本文开始

猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第1张图片

文章重点

  • 随机值的产生与使用
  • 循环和选择的使用

1.游戏思路

说明:玩家自我输入一个值,电脑自我产生一个随机值,玩家根据提示内容判断,自己的值输入大了,还是小了,最终输入正确答案.

猜数字游戏
思路:
1.计算机 生随机数字
2.设计游戏 , 玩家猜数字
3.判断 数字正确性:
如果猜大了,告知猜大了
如果猜小了,告知猜小了
如果猜对了,告知猜对了

2.构建游戏框架

2.1游戏初建

对应游戏,我们该如何下手呢?
首先通过构建游戏主函数main的框架,能我们对游戏整体思路有更好的梳理.接下来让我们来看看吧!

提示:

  • menu(菜单):菜单告知我们开始游戏(1)还是退出游戏(0),进行选择的一种 提示意思

  • switch:根据switch作用,可根据输入的值input判断是否执行游戏

  • do while:不管是什么游戏,肯定需要我们先玩一次,do while复合这种规则

  • 循环变量为什么使用input?:
    ①当输入的值为0时,break会跳出switch语句,进行条件判断,0为假,所以游戏over结束
    ②当输入的除了0和1之外的整数时,会执行default然后break跳出switch,再进行条件判断,非0为真,会再执行do while直到你输入0结束游戏或1开始游戏

/#include<stdio.h>	
//void menu()
//{
//	printf("*********************************\n");
//	printf("**********   1.play    **********\n");
//	printf("**********   0.exit    **********\n");
//	printf("*********************************\n");
//
//}
//int main()
//{
//	//不管是什么游戏,肯定需要我们先进行一次(先玩一次),这里我们可以用到do while
//
//	int input = 0;
//	do
//	{
//		//写个简易菜单告知我们开始游戏还是退出游戏
//
//		menu();
//		printf("请选择 0/1>:"); 
//		//输入0或1
//		scanf("%d",&input);
//		//问什么用switch?根据switch作用,可根据输入的值input判断是否执行游戏
//		switch (input)
//		{
//		case 1:
//			printf("猜数字游戏\n");
//			break;
//      // 这里只是用文字代替游戏,为了是先完成mian函数框架,一会会修改
//		case 0:
//			printf("退出游戏,游戏终止\n");
//			break;
//		default :
//			printf("输入错误,请重新输入\n");
//			break;
//		}
//	} while (input);
//	//循环变量问什么时input?
//	//当输入的值为0时,break会跳出switch语句,进行条件判断,0为假,所以游戏over结束
//	//当输入的除了0和1之外的整数时,会default然后break跳出switch,
//	//再进行条件判断,非0为真,会再执行do while直到你输入0结束游戏或1开始游戏
//	//所以不用担心输入错误
//	return 0;
//}

代码结果:猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第2张图片

编程好习惯:对于一些较难编写的代码或者较长的代码,为了减少错误,我们通过 写一些步骤就编译 看自己是否出现错误,这样会减少自己的BUG,不会因此浪费掉太多时间.

2.2设置game

在框架中我们只是通过文字代替了游戏的过程,现在我们来写一下这个程序game.

game包含两点:

  • 生成随机数字
  • 玩家输入数字,判断数字大小

2.2.1如何生成随机数字

这里我们要讲一下新的知识,生成随机数的函数rand,srand;

让我们通过game代码来看一下他们的使用.

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

}

//rand函数可以参数随机值
//它的返回值是一个0~RAND_MAX(32767)
//srand可以设置生成数的随机起点(初始化生成器)
void game()
{
	int guess = 0;
	//1.生成随机数字
	//这里给大家介绍一下如何产生随机值
	//使用到了rand函数
	//srand中需要一个变化的整型数,这就涉及了时间戳
	//时间戳:根据时间点转化为一个数字(时间点与计算机起始时间的一个差值)
	
	int ret = rand();
	//printf("%d\n", ret);
	//我们打印看一下rand产生的随机值
	//我们观察随机值发现,虽然产生了随机值
	//但是每次玩游戏产生的随机值都是一样的,让人玩一次游戏就没有体验感
	//所以我们考虑如何能每次玩游戏产生不同的值呢?


	//2.玩家输入数字,判断数字大小
	
}
int main()
{
	//不管是什么游戏,肯定需要我们先进行一次(先玩一次),这里我们可以用到do while

	int input = 0;
	//设置随机数的生成器
	srand((unsigned int)time(NULL));
	do
	{
		//写个简易菜单告知我们开始游戏还是退出游戏

		menu();
		printf("请选择 0/1>:");
		//输入0或1
		scanf("%d", &input);
		//问什么用switch?根据switch作用,可根据输入的值input判断是否执行游戏
		switch (input)
		{
		case 1:
			game();
			break;
		//因为game函数太多内容,所以以函数调用形式使用,为了让代码更加整洁易懂
		case 0:
			printf("退出游戏,游戏终止\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	//循环变量问什么时input?
	//当输入的值为0时,break会跳出switch语句,进行条件判断,0为假,所以游戏over结束
	//当输入的除了0和1之外的整数时,会default然后break跳出switch,
	//再进行条件判断,非0为真,会再执行do while直到你输入0结束游戏或1开始游戏
	//所以不用担心输入错误
	return 0;
}
  • rand函数的参数是void ,返回值为整型,所以会产生不同的随机值
  • 它的返回值是一个0~RAND_MAX(32767)

我们转到定义看到了RAND_MAX是十六进制数转换二进制数就为32767在这里插入图片描述>猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第3张图片

来看看他的代码结果你会发现什么呢?
猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第4张图片

是不是高兴的太早了,通过编译我们又发现了它的缺陷, 但是 每次生成的随机数都是一样的,我们每次玩游戏时,如何来生成不同的随机值?

猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第5张图片

再次观看rand函数使用它我们还需要srand的函数
让我们再来看一些srand相关知识

  • srand:
    ①可以设置生成数的随机起点(初始化生成器)
    ②srand中需要一个变化的整型数,这就涉及了时间戳
    ③时间戳:根据时间点转化为一个数字(时间点与计算机起始时间的一个差值

猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第6张图片

srand函数使用到了时间戳,而时间戳使用time函数产生,然我们再了解一些知识吧!

猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第7张图片

  • srand:是生成随机数,需要time函数强制类型转换unsigned int类型

2.2.2玩家输入数字,判断输入大小

使用srand确实产生了随机数,但是在game函数中多次调用,输入过快也会产生一样的值,我们怎么解决呢?

猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第8张图片

我们都知道main函数是只调用一次的,所以我们一般都把srand函数放到主函数中,避免产生重复的值.

代码即将完工,我们只需要判断玩家的数字与电脑随机产生的数字的大小了,让我们尽快看一下吧!!!

猜数字小游戏总代码

#include	
#include
#include


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

}

//rand函数可以参数随机值
//它的返回值是一个0~RAND_MAX(32767)
//srand可以设置生成数的随机起点(初始化生成器)
void game()
{
	int guess = 0;
	//1.生成随机数字
	//这里给大家介绍一下如何产生随机值
	//使用到了rand函数
	//srand中需要一个变化的整型数,这就涉及了时间戳
	//时间戳:根据时间点转化为一个数字(时间点与计算机起始时间的一个差值)

	int ret = rand()%100+1;
    //因为随机太大了,%100转化为0~99的数

	//printf("%d\n", ret);

	//我们打印看一下rand产生的随机值
	//我们观察随机值发现,虽然产生了随机值
	//但是每次玩游戏产生的随机值都是一样的,让人玩一次游戏就没有体验感


	//2.玩家输入数字,判断数字大小
	while (1)
	{
		printf("请输入猜测的数:>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了!!!\n");
			break;
		}
	}
}
int main()
{
	//游戏,肯定需要我们先进行一次,这里我们可以用到do while

	int input = 0;
	//设置随机数的生成器
	srand((unsigned int)time(NULL));
	do
	{
		//写个简易菜单告知我们开始游戏还是退出游戏

		menu();
		printf("请选择 0/1>:");
		//输入0或1
		scanf("%d", &input);
		//问什么用switch?根据switch作用,可根据输入的值input判断是否执行游戏
		switch (input)
		{
		case 1:
			game();
			break;
			//因为game函数太多内容,所以以函数调用形式使用,为了让代码更加整洁易懂
		case 0:
			printf("退出游戏,游戏终止\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	
	return 0;
}
  • 这里srand产生的值0~32767有的太大,不容易猜出,所以我们取100的余数,让所有数在小范围内,容易更好猜出

代码结果
猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第9张图片

总代码:

猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第10张图片


猜数字游戏--(srand,rand产生随机值的使用)C语言--详解易懂_第11张图片

总结

通过本篇详细介绍的小游戏数字的过程,希望可以帮助到正在学习路上的你,如果感觉对你有帮助请给个赞鼓励一下吧!

你可能感兴趣的:(c语言,学习,算法,软件工程)