C语言之猜数字游戏

本文详细介绍了如何通过C语言实现猜数字游戏,包括随机数生成(利用rand()和time()函数),菜单设计,以及游戏核心逻辑(循环结构与模运算)。
摘要由CSDN通过智能技术生成

对于猜数字游戏,我们分为三个步骤解决。

1:生成随机数。

2:菜单及其游戏整体的封装。

3:游戏核心主体构成(游戏如何运转)。

对于随机数的生成,我们要讲到 rand()函数的应用, rand()函数是专门生成随机数的一个函数,它运用时要用到 #include<stdlib.h> 这个头文件,它生成的随机数是根据一个特定的“种子”来确定的,我们不妨实际测试看看

 

正如图片显示的一样,它生成的数是不一样的,这对于我们解决猜数字游戏有一定的帮助,但是有一个问题,无论你测试多少次,它生成的这个随机数是不变的,你不妨测试一下。拿为啥呢。这是由于 rand()函数运用前提是有一个“种子”,种子不变,生成的随机数是不变的,这时我们又要学到另外的函数 srand() :void srand( unsigned int seed )和 time 函数()(要用到time.h头文件),srand函数是初始化随机数生成器的工具,而 time函数会返回当前日历时间与1970年1月1日0时0分0秒的差值(这里不细述,可以到网站查找),这时我们就可以把时间作为种子,那么种子就可以一直变化,而随机数的生成也就可以不断变化。time函数运用时我们要将其转换无符号整型,不然编译器会警告(不是报错),而且要给一个空指针NULL参数。如图

 

 至此随机数生成就结束,第一步也就完成。

对于菜单,我们可以这样

void menu()
{
    printf("*****************\n");
    printf("***1.进行游戏 ***\n");
    printf("***0.退出游戏 ***\n");
    printf("*****************\n");
}

对于如何进出游戏我们可以循环语句,利用真假判断使用 do—while循环,以及switch语句:

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

	return 0;

至此,第二步就完成。整个游戏最重要的就是第三步——游戏的核心运转。

我们猜数字游戏,是猜1到100的数字,我们生成的数字是随机杂乱的,我们不妨运用模计算将其转换,但模之后是0到100(整除就变成0),这里我们可以在最后加给1。

int ret = rand() % 100 + 1;

这样我们的随机数就将其控制在了1到100之间,然后就是一直猜数字。猜数字我们可能不会一次性就猜对,可能会持续许多次,那么我们这里不难想到可能与循环有关,那究竟是for还是while还是do—while循环呢?我们首先排除for,这里基本是与它没有什么关系。那剩下两种如何区别,先判断还是先循环,笔者认为都可以,但我优先推荐while。我们任然可以利用0,1真假性来处理。我们让循环条件为真,那么循环就可以一直持续下去,刚好满足我们猜很大次的要求,但万一我们猜对了,如何让它停下来呢?我们不难想到运用break,一旦我们猜对,立即使用break跳出循环,就成功停止,也就意味着猜数字游戏完成。

while (1)
{
	printf("请输入你要猜的数字:");
	scanf("%d", &guess);
	if (guess > ret)
	{
		printf("猜大了\n");
	}
	else if (guess < ret)
	{
		printf("猜小了\n");
	}
	else
	{
		printf("恭喜你,猜对了,数字是%d\n", ret);
		break;
	}
}

这就是游戏核心内容。

将所有代码组合到一块,就是猜数字游戏的完整代码。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("*****************\n");
	printf("***1.进行游戏 ***\n");
	printf("***0.退出游戏 ***\n");
	printf("*****************\n");
}
void game()
{
	int guess = 0;
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("请输入你要猜的数字:");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了,数字是%d\n", ret);
			break;
		}
	}
}
int main()
{
	int num=0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &num);
		switch (num)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新选择\n");
			break;
		}
	} while (num);

	return 0;
}

对于复杂的代码,我们不妨拆开一段一段写,保持头脑清醒才能效率最高化,希望我的文章对你们有所帮助!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值