栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 猜数字游戏

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 猜数字游戏

文章目录
  • 一、srand和rand函数的用法
    • 1、rand+srand+time函数的合体
    • 2、当单独使用rand函数会怎样?
    • 3、当使用srand函数,为rand提供随机数种子时,会出现什么?
    • 4、time函数是来干什么的?
  • 二、猜数字游戏


一、srand和rand函数的用法 1、rand+srand+time函数的合体

rand函数的作用是产生一个随机值,每次调用它,都会它产生一个随机值,随机值的类型是 int
在调用rand函数时,应先调用srand函数,然后使用time函数的返回值作为srand函数的参数,为rand函数提供一个随时都在变的随机数种子,使rand的随机数依赖这个种子来产生随机值。

2、当单独使用rand函数会怎样?

单独使用rand函数时,rand默认的随机数种子是1,随机数的产生会依据数字1为起点,来产生随机数,所以就会产生缺陷,我们使用rand函数分别创建两组随机数,得到的结果是两组数是一模一样的。
归根揭底是随机数的种子是一成不变的,一直是1。
如下图所示:

int main()
{ 
	for (int i = 1;i <= 5;i++)
	{
		int z = rand();
		printf("%dn", z);
	}
	printf("------------");
	int a = 1;
	while (a <= 5)
	{
		int b = rand();
		printf("%dn", b);
		a++;
	}

	return 0;
}

3、当使用srand函数,为rand提供随机数种子时,会出现什么?

srand函数是为rand函数提供随机数种子的,使rand函数的随机数种子不是一个一成不变的数
也就是说当种子不一样时,会出现两组不同的随机数。
如下图所示:


4、time函数是来干什么的?


time函数的返回值是时间戳,类型是time_t,是整型,可以为srand函数提供参数,time函数的参数是个指针类型,可以不用参数,直接传一个空指针进去。
由于srand的参数类型是unsigned int ,所以为srand提供参数时,需要强转类型到unsigned int。
如下图:

srand((unsigned int)time(NULL));
二、猜数字游戏

首先,用自己的话描述,再转化为计算机语言
规则:先由电脑产生一个随机数,我们在去猜,猜大了或者猜小了,系统会提示,直到猜对了,游戏完成。
第一步:在玩游戏之前,都会有一个菜单的界面,让我们进行选择,是退出游戏,还是继续游戏

#include
void menu()
{
	printf("******欢迎进入游戏******n");
	printf("******    1.play  ******n");
	printf("******    0.exit  ******n");
}
int main()
{
	// 1.编写一个菜单
	menu();
	// 2.进行选择,输入一个数
	int input = 0;
	scanf_s("%d", &input);
	// 3.进行判断,是继续游戏,还是退出
	if (input == 1)
	{
		printf("继续游戏,进入游戏n");
	}
	else if (input == 0)
	{
		printf("退出游戏n");
	}
	else
	{
		printf("输入错误,请重新输入");
	}
	return 0;
}

第二步:如果进行到else里面,输入错误了,希望可以再次输入,并且在玩完一局之后,可能还会想玩
所以需要用到循环,且在开始的时候,菜单是先出来,不需要进行判断,所以用到do-while循环语句。

#include
void menu()
{
	printf("******欢迎进入游戏******n");
	printf("******    1.play  ******n");
	printf("******    0.exit  ******n");
}
int main()
{
	int input = 0;
	// 1.编写一个菜单
	do
	{
		menu();
		// 2.进行选择,输入一个数
		
		scanf_s("%d", &input);
		// 3.进行判断,是继续游戏,还是退出
		if (input == 1)
		{
			printf("继续游戏,进入游戏n");
		}
		else if (input == 0)
		{
			printf("退出游戏n");
		}
		else
		{
			printf("输入错误,请重新输入");
		}
	} while (input);
	
	return 0;
}

这里的条件表达式是input,因为这个决定这个循环里面的内容是否执行的是input的值,非0则执行,0为不执行。

第三步:开始正式进入游戏内部,开始玩游戏了

如规则一样:
1 :先产生一个随机数

#include
void menu()
{
	printf("******欢迎进入游戏******n");
	printf("******    1.play  ******n");
	printf("******    0.exit  ******n");
}
void game()
{
	// 5.先产生一个随机数,由于产生的随机值太大,所以使返回值模100,得到0-99的余数,在+1,得到1-100的余数
	int z = rand();
	

}
int main()
{
	int input = 0;
	//  为rand产生随机种子
	srand((unsigned int)time(NULL));
	// 1.编写一个菜单
	do
	{
		menu();
		// 2.进行选择,输入一个数
		printf("请进行选择(0/1)->");
		scanf_s("%dn", &input);
		// 3.进行判断,是继续游戏,还是退出
		if (input == 1)
		{
			//4.封装一个游戏函数
			game();
		}
		else if (input == 0)
		{
			printf("退出游戏n");
		}
		else
		{
			printf("输入错误,请重新输入n");
		}
	} while (input);
	
	return 0;
}

2:输入自己心中的答案,开始进行猜数

#include
void menu()
{
	printf("******欢迎进入游戏******n");
	printf("******    1.play  ******n");
	printf("******    0.exit  ******n");
}
void game()
{
	// 5.先产生一个随机数,由于产生的随机值太大,所以使返回值模100,得到0-99的余数,在+1,得到1-100的余数
	int z = rand() % 100 +1;
	// 6.输入自己心中的答案,进行判断
	int guess = 0;
	printf("输入自己心中的答案->");
	scanf_s("%dn",%guess):
	if(guess == z)
	{
		printf("猜对了");
	}
	else if (guess > z)
	{
		printf("猜大了");
	}
	else
	{
		printf("猜小了");
	}

	

}
int main()
{
	int input = 0;
	//  为rand产生随机种子
	srand((unsigned int)time(NULL));
	// 1.编写一个菜单
	do
	{
		menu();
		// 2.进行选择,输入一个数
		printf("请进行选择(0/1)->");
		scanf_s("%d", &input);
		// 3.进行判断,是继续游戏,还是退出
		if (input == 1)
		{
			//4.封装一个游戏函数
			game();
		}
		else if (input == 0)
		{
			printf("退出游戏n");
		}
		else
		{
			printf("输入错误,请重新输入n");
		}
	} while (input);
	
	return 0;
}

3 :此时想,这几行代码,如果猜错了,就不会再执行,继续执行剩下的代码,我现在希望当我猜错之后,会重新进行判断,直到猜对了,退出。所以此时需要给这几行代码加入到循环语句里面。
完整代码:

#include
void menu()
{
	printf("******欢迎进入游戏******n");
	printf("******    1.play  ******n");
	printf("******    0.exit  ******n");
}
void game()
{
	// 5.先产生一个随机数,由于产生的随机值太大,所以使返回值模100,得到0-99的余数,在+1,得到1-100的余数
	int z = rand() % 100 +1;
	int guess = 0;
	// 6.输入自己心中的答案,进行判断
// 7.给判断语句加入到循环语句,可以循环判断。
	while (1)
	{
		printf("输入自己心中的答案->");
		scanf_s("%d", &guess);
			if (guess == z)
			{
				printf("猜对了n");
				break;
			}
			else if (guess > z)
			{
				printf("猜大了n");
			}
			else
			{
				printf("猜小了n");
			}

	}
	
	

}
int main()
{
	int input = 0;
	//  为rand产生随机种子
	srand((unsigned int)time(NULL));
	// 1.编写一个菜单
	do
	{
		menu();
		// 2.进行选择,输入一个数
		printf("请进行选择(0/1)->");
		scanf_s("%d", &input);
		// 3.进行判断,是继续游戏,还是退出
		if (input == 1)
		{
			//4.封装一个游戏函数
			game();
		}
		else if (input == 0)
		{
			printf("退出游戏n");
		}
		else
		{
			printf("输入错误,请重新输入n");
		}
	} while (input);
	
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/948401.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号