让你C语言学完分支和循环就能写出猜数字小游戏

写一个简单的猜数字小游戏
游戏的规则与内容:
输入一个1-100的数字,给你10次机会来猜出它
我们直接写游戏的内容:

#include <stdio.h>

int main()
{
	int a = 15;//要被猜的数字,假设它是随机的
	int tmp = 0;//每次输入的数字
	int i = 10;//一局游戏只能猜10次
	while (i)
	{
		scanf("%d",&tmp);
		if (tmp > a)
		{
			//如果输入的数字大于要猜的数字,就进入
			printf("猜大了\n");
		}
		else if (tmp < a)
		{
			//如果输入的数字小于要猜的数字,就进入
			printf("猜小了\n");
		}
		else
		{
			//否则就是才对了
			printf("猜对了\n");
			//猜对了,就不需要再猜了,就退出循环
			break;
		}

		//每次猜完 i--
		i--;
	}
	//程序走到这里只有两种原因
	//1.当 i==0 的时候循环结束
	//2.当数字猜对的时候,break会退出循环,就算是第十次才对的,i 也是 1
	//所以我们判断如果 i == 0 游戏失败,i > 0 游戏胜利,并且输出是猜了几次后猜对的
	if (i == 0)
	{
		printf("游戏失败!\n");
	}
	else if (i > 0)
	{
		printf("恭喜你走了%d步就猜对了", 10-i+1);
		//10是总步数,i是剩余步数,10-i+1计算出走了的步数
		//因为我们是在每次猜数字,猜错了,程序才会执行 i--
		//猜对的话程序就不会执行 i-- 但我们也算走了一步 所以在 i-10 后在 +1
	}
	return 0;
}

这样写有一个缺陷就是,程序没有一个随机数的生成
这里我们就要用到C语言里面的一个库函数 rand()
(这个知识点不用深入掌握,只需要知道怎么用就可以了)

rand函数是专门用来生成随机数的
rand函数返回的是0~(32767)之间的一个随机数

rand函数在使用之前要使用一个srand函数来设置随机数的生成器
srand函数在程序中只要调用一次就可以了,不需要频繁调用
rand与srand的头文件为 <stdlib.h>

C语言中,time函数会返回时间戳
time的头文件为 <time.h>

所以我们生成随机数的代码,这样用就可以

int main()
{
	srand((unsigned int)time(NULL));
	int a = rand();
	//这里 a 的值就是0~32767的随机数
}

所以我们生成 1~100 的随机值只需要给 a = rand()%100+ 1
所以我们的猜数字游戏代码为:

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

int main()
{
	srand((unsigned int)time(NULL));
	int a = rand()%100 + 1;
	int tmp = 0;//每次输入的数字
	int i = 10;//一局游戏只能猜10次
	printf("猜数字游戏,请输入一个 1--100 的数字\n");
	while (i)
	{
		scanf("%d", &tmp);
		if (tmp > a)
		{
			//如果输入的数字大于要猜的数字,就进入
			printf("猜大了\n");
		}
		else if (tmp < a)
		{
			//如果输入的数字小于要猜的数字,就进入
			printf("猜小了\n");
		}
		else
		{
			//否则就是才对了
			printf("猜对了\n");
			//猜对了,就不需要再猜了,就退出循环
			break;
		}

		//每次猜完 i--
		i--;
	}
	//程序走到这里只有两种原因
	//1.当 i==0 的时候循环结束
	//2.当数字猜对的时候,break会退出循环,就算是第十次才对的,i 也是 1
	//所以我们判断如果 i == 0 游戏失败,i > 0 游戏胜利,并且输出是猜了几次后猜对的
	if (i == 0)
	{
		printf("游戏失败!\n");
	}
	else if (i > 0)
	{
		printf("恭喜你走了%d步就猜对了", 10 - i + 1);
		//10是总步数,i是剩余步数,10-i+1计算出走了的步数
		//因为我们是在每次猜数字,猜错了,程序才会执行 i--
		//猜对的话程序就不会执行 i-- 但我们也算走了一步 所以在 i-10 后在 +1
	}
	return 0;
}

为了使游戏更完善我们可以加上游戏菜单,开始游戏与退出游戏
代码如下:

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

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

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		//打印菜单
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//game函数中是猜数字的整个路基逻辑
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);

	return 0;
}

最后我们再把游戏部分,与游戏菜单,开始游戏,退出游戏,写在一起
只需要把游戏的 函数名改成 void game()
最终代码如下:

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

void game()
{
	srand((unsigned int)time(NULL));
	int a = rand() % 100 + 1;
	int tmp = 0;//每次输入的数字
	int i = 10;//一局游戏只能猜10次
	printf("猜数字游戏,请输入一个 1--100 的数字\n");
	while (i)
	{
		scanf("%d", &tmp);
		if (tmp > a)
		{
			//如果输入的数字大于要猜的数字,就进入
			printf("猜大了\n");
		}
		else if (tmp < a)
		{
			//如果输入的数字小于要猜的数字,就进入
			printf("猜小了\n");
		}
		else
		{
			//否则就是才对了
			printf("猜对了\n");
			//猜对了,就不需要再猜了,就退出循环
			break;
		}

		//每次猜完 i--
		i--;
	}
	//程序走到这里只有两种原因
	//1.当 i==0 的时候循环结束
	//2.当数字猜对的时候,break会退出循环,就算是第十次才对的,i 也是 1
	//所以我们判断如果 i == 0 游戏失败,i > 0 游戏胜利,并且输出是猜了几次后猜对的
	if (i == 0)
	{
		printf("游戏失败!\n");
	}
	else if (i > 0)
	{
		printf("恭喜你走了%d步就猜对了\n", 10 - i + 1);
		//10是总步数,i是剩余步数,10-i+1计算出走了的步数
		//因为我们是在每次猜数字,猜错了,程序才会执行 i--
		//猜对的话程序就不会执行 i-- 但我们也算走了一步 所以在 i-10 后在 +1
	}
	
}
void menu()
{
	printf("**************************\n");
	printf("******    1. play   ******\n");
	printf("******    0. exit   ******\n");
	printf("**************************\n");
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		//打印菜单
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//game函数中是猜数字的整个路基逻辑
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);

	return 0;
}

在这里插入图片描述
猜数字小游戏这样就已经完成了
拜拜~

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

专科在努力!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值