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

举报
倔强的石头_ 发表于 2024/11/30 19:11:11 2024/11/30
【摘要】 游戏可以连续进行,每次游戏有五次猜测机会。描述——随机产生一个100到200的整数,猜测产生的数字。二、game()函数实现产生随机数并猜数字的过程。三、menu()函数封装游戏菜单。一、主函数 实现循环游戏的主体。代码和运行截图在下方。

 目录


一、问题描述

二、思路

三、代码实现


四、随机数的实现

1.rand()函数

2.srand()函数

3.time()函数

4.随机数的生成

五、VS2022运行截图



一、问题描述

1.随机产生一个100到200的随机整数

2.猜测产生的数字,根据猜测数据的正确性以及大小给出反馈

3.游戏可以连续进行

4.每次游戏限制猜测次数


二、思路

1.主函数 实现循环游戏的主体
2.game()函数实现产生随机数并猜数字的过程
3.menu()函数封装游戏菜单


 

三、代码实现

#include<stdio.h>
#include<time.h>
#include<stdlib.h>

void menu()
{
	printf("**********************\n");
	printf("**输入数字1 开始游戏**\n");
	printf("**输入数字0 退出游戏**\n");
	printf("**********************\n");
}

void game()
{
	int a = 100 + rand() % 101;//存放产生的随机数
	int temp = 0;              //临时变量存储猜测值 
	int count = 5;             //记录剩余机会
	printf("请输入您的猜测值\n");
	
	while (count)              //当剩余机会为0,不再执行循环
	{
		printf("您的剩余机会为%d\n", count);
		scanf("%d", &temp);
		if (temp > a)
		{
			printf("猜大了\n");
			count--;
		}
		else if (temp < a)
		{
			printf("猜小了\n");
			count--;
		}
		else
		{
			printf("回答正确\n");
			break;           //猜对时,跳出while循环
		}
	}
	if (count == 0)
	{
		printf("很遗憾,您的机会已用尽,正确答案为%d\n", a);
	}
}

int main()
{
	srand((unsigned int)time(NULL)); //用时间戳来产生rand函数的种子
	int n = 0;      //用于存储游戏指令值的标志变量
	do
	{
		menu();
		scanf("%d", &n);
		switch(n) 
		{
			case 1:
				game();
				break;
			case 0:
				printf("退出游戏\n");
				break;
			default:
				printf("指令错误,请重新输入\n");
				break;
		}
	} while (n);
	return 0;
}


四、随机数的实现

1.rand()函数

C语⾔提供了库函数rand,可以用于生成随机数

CPlusPlus中关于该函数的介绍 →   rand - C++ Reference (cplusplus.com)

函数原型int rand (void);

头文件:stdlib.h

返回值的范围:0~RAND_MAX(⼤部分编译器上是32767)

注意:rand()函数生成的随机值是伪随机值,其原理是根据一个“种子”按照某种算法所得,⼀次运⾏中产⽣的多个结果是相对随机的,但是程序多次运行时,结果是完全相同的

编辑

所以单靠rand()函数无法实现真正的随机数生成


2.srand()函数

C语⾔中提供了库函数函数srand(),⽤来初始化随机数的⽣成器

CPlusPlus中关于该函数的介绍 → srand - C++ Reference (cplusplus.com)

srand的原型 void srand (unsigned int seed);

头文件:stdlib.h

参数: unsigned int类型的seed参数(种子)——在程序中我们⼀般是使用程序与运行的时间作为种子的,因为时间时刻在发生变化的

说明:程序中在调⽤rand()函数之前先调⽤srand()函数,通过srand()函数的参数seed来设置rand()函数⽣成随 机数的时候的种子,只要种子在变化,每次⽣成的随机数序列也就变化起来——srand函数是不需要频繁调⽤的,一次运行的程序中调用一次就可以


3.time()函数

C语⾔中提供了库函数time(),可以获得这个时间

CPlusPlus中关于该函数的介绍time - C++ Reference (cplusplus.com)

time函数原型 : time_t time (time_t* timer);

头文件: time.h

返回值:time_t类型,本质上是32位或者64位的整型类型(time函数会返回当前的日历时间,其实返回的是1970年1月1日0时0分0秒到现在程序运⾏时间之间的 差值,单位是秒)

注意:  time函数的参数timer,如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存 中带回去。 如果timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳


4.随机数的生成

总结——最终,我们可以先使用  srand((unsigned int)time(NULL));  ——使用time函数的返回值作为srand函数的参数,调用srand()函数就可以初始化种子

接下来,再调用rand()函数的时候得到的就是一个真正的随机值(再次声明,srand函数是不需要频繁调⽤的,一次运行的程序中调用一次就可以

五、VS2022运行截图

编辑

编辑

编辑


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。