【C语言练习】猜数字游戏

1. 游戏规则

系统随机生成0-100的整数,让玩家来猜。玩家猜数字后,系统给予玩家回馈并且统计玩家猜的次数,直到玩家猜对为止。

2. 思路分析

  1. 首先编写主函数,在函数内部使用do…while循环构建游戏框架,使玩家可以进行多次游戏。
  2. 定义一个menu()函数,实现菜单功能。
  3. 以用户输入的值作为判断条件,来决定猜数字游戏是否要运行,可以用switch语句进行判断。
  4. 定义一个game()函数,来实现游戏功能。
  5. 系统需要随机生成0-100的整数,可以考虑rand()函数来实现。
  6. 玩家输入一个值,并用if判断语句对用户输入的值与随机生成的值进行相比较,给用户比较结果的提示。
  7. 玩家猜对时,会跳出循环,返回到原先程序的一个入口,再给用户一个选择是否进行游戏的选择,从而达到一个可以继续循环游戏的效果。反之,玩家继续输入一个数,再进行判断。

3. 代码实现

3.1 构建主函数

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do{	
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("输入错误请重新输入");
			break;
		}
	} while (input);
	return 0;
}

3.2 构建menu()函数

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

3.3 构建game()函数

void game()
{
	int i = 0;//计数,初始为0
	int guess = 0;
	int ret = rand()%100+1;//随机生成0-100之间的整数
	printf("请猜数字:>");
	while (1)
	{
		do{
			scanf("%d", &guess);//用户猜数字
			i++;
			if (guess > ret)
			{
				printf("猜大了\n");
			}
			else if (guess < ret)
			{
				printf("猜小了\n");
			}
			else
			{
				printf("恭喜你,猜对了!");
			}//根据对比结果,提示用户猜低了、高了还是对了
		} while (guess != ret);
      printf("一共猜了%d次\n",i);
	  break;//一旦用户猜对,跳出while循环
	}
}

有时程序需要一个规定范围内的随机数。要将随机数的范围限制在 1 和某个最大值 max 之间的整数,可以使用以下公式:number = rand() % max + 1。
另外,在调用rand()函数时,多次运行程序产生的随机数是不变的,因此需要先在main函数中加入以下这段代码:

srand((unsigned int)time(NULL));//随机数发生器初始化

事实上,rand() 函数产生的随机数是伪随机数,是根据一个数值按照某个公式推算出来的,这个数值我们称之为“种子”。种子和随机数之间的关系是一种正态分布:
在这里插入图片描述
种子在每次启动计算机时是随机的,但是一旦计算机启动以后它就不再变化了;也就是说,每次启动计算机以后,种子就是定值了,所以根据公式推算出来的结果(也就是生成的随机数)就是固定的。
为了解决这个问题,我们可以使用时间戳来生成随机数,通过 srand() 函数来重新“播种”,这样种子就会发生改变。

4. 代码汇总

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

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

void game()
{
	int i = 0;
	int guess = 0;
	int ret = rand()%100+1;
	printf("请猜数字:>");
	while (1)
	{
		do{
			scanf("%d", &guess);
			i++;
			if (guess > ret)
			{
				printf("猜大了\n");
			}
			else if (guess < ret)
			{
				printf("猜小了\n");
			}
			else
			{
				printf("恭喜你,猜对了!");
			}
		} while (guess != ret);
      printf("一共猜了%d次\n",i);
	  break;
	}

}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do{	
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏");
			break;
		default:
			printf("输入错误请重新输入");
			break;
		}
	} while (input);
	return 0;
}

5. 程序运行结果

在这里插入图片描述
欢迎大家在评论区交流学习,更多代码资料见GitHub:C-language

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值