C语言猜数字游戏(超级详细)

#C语言猜数字游戏

简介:

学习完C语言分支与循环之间的内容,可以写一些稍微有趣的代码了。

例如:写一个猜数字游戏
游戏要求:

  1. 电脑自动生成1~100之间的数
  2. 玩家猜数字,猜数字的过程中,根据猜测数据的⼤⼩给出⼤了或⼩了的反馈,直到猜对,游戏结束

1. 菜单的打印

用一个自定函数将其分装起来,利用printf写一个简单的菜单,菜单内容可以自主设计
例如:

void menu()
{
	printf("****************\n");
	printf("****  1.play  ***\n");
	printf("****  0.exit  ***\n");
	printf("****************\n");
	printf("请选择是否游玩:>>");
}

2. 游戏的选择

当进入菜单的时候给人们一个选择
选择 1 则进入游戏
选择 0 则退出游戏
选择 其他 则让其重新输入
我们可以使用switch语句来实现选择功能
当人们进入游戏的时候,打印一个菜单,再判断玩家是否游玩,所以至少要执行一次代码,所以我们可以使用do while语句
实现代码如下:

#include <stdio.h>
void menu() //封装一个函数用来打印菜单
{
	printf("****************\n");
	printf("****  1.play  ***\n");
	printf("****  0.exit  ***\n");
	printf("****************\n");
	printf("请选择是否游玩:>>");
}
int main()
{
	int input = 0; //定义一个input,do while的表达式为input 这样玩家游戏结束时 想再次游玩 选择1继续游戏的同时就又循环的一次,选择0则退出游戏
	do
	{
		menu();  //调用封装的函数
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("猜猜猜猜\n");
			break;
		case 0:
			printf("退出游戏咯,感谢游玩!请给个五星好评!!!\n");
			break;
		default:
			printf("输入错误请重新选择噢!\n");
			break;
		}
	} while (input);
	return 0;
}

3. 游戏功能的实现

猜数字游戏不能只是上述的猜猜猜猜吧 所以我们要在case 1中的游戏部分进行修改,同样封装一个game()函数

3.1 随机数的生成

要想生成1~100之间的随机数,我们需要使用rand()函数,但是rand()生成的随机数是固定的,也就是伪随机数

1 int rand(void);

  伪随机数不是真正的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。而使用srand()⽤来初始化随机数的⽣成器

1 void srand(unsigned int seed);

  在rand之前调用srand就可以是种子的值变化起来,种子变化起来了,随机数就生成了,那也就是说给srand的种⼦是如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随机数,这就⽭盾了。那什么是时刻在变化的呢,时间。

time_t time (time_t* timer); //如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳。

随机数生成代码如下:

1. srand((unsigned int)time(NULL))2. rand()% 100 +1; //生成1~100之间的随机数
//如果要生成a~b之间的随机数,方法如下:
3. a + rand()%(b-a+1)

#####3.2 游戏胜利的判断

生成了一个随机数 我们就要去猜这个数
当我们猜的数字大了,反馈一个猜大了
当我们猜的数字小了,反馈一个猜小了
当我们猜的数字对了,反馈一个猜对了
用while循环来写,当我们才对了,break
实现代码如下:

	int guess = 0;
	while (1)
	{
		printf("请开始你的表演,输入你蒙的数字:>>");
		scanf("%d", &guess);
		if (guess < x)
		{
			printf("猜小了,试着往大点猜猜呢\n");
		}
		else if (guess > x)
		{
			printf("猜大了,试着往小点猜猜呢\n");
		}
		else
		{
			printf("蒙对啦 蒙对啦 运气真好!!!\n");
			break;
		}
	}
}

4 游戏的完整代码

#include <stdio.h>
#include <stdlib.h> //使用rand()和srand()需要引这个头文件
#include <time.h>   //使用time()需要引这个头文件

void menu() //封装一个函数用来打印菜单
{
	printf("****************\n");
	printf("****  1.play  ***\n");
	printf("****  0.exit  ***\n");
	printf("****************\n");
	printf("请选择是否游玩:>>");
}

void game() //游戏功能的实现
{
	int x = rand() % 100 + 1; //生成1~100之间的随机数
	int guess = 0;
	while (1) //猜数字的过程
	{
		printf("请开始你的表演,输入你蒙的数字:>>");
		scanf("%d", &guess);
		if (guess < x)
		{
			printf("猜小了,试着往大点猜猜呢\n");
		}
		else if (guess > x)
		{
			printf("猜大了,试着往小点猜猜呢\n");
		}
		else
		{
			printf("蒙对啦 蒙对啦 运气真好!!!\n");
			break;
		}
	}
}
int main()
{
	int input = 0;//定义一个input,do while的表达式为input 这样玩家游戏结束时 想再次游玩 选择1继续游戏的同时就又循环的一次,选择0则退出游戏
	do
	{
		menu();  //调用menu函数来打印菜单
		srand((unsigned int)time(NULL));
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game(); //调用game函数来打印菜单
			break;
		case 0:
			printf("退出游戏咯,感谢游玩!请给个五星好评!!!\n");
			break;
		default:
			printf("输入错误请重新选择噢!\n");
			break;
		}
	} while (input);
	return 0;
}

5 代码的小优化

当我们觉得这个游戏太简单的时候,没有挑战性,我们可以设置一个次数限制,超过这个次数游戏就失败。
实现代码如下:

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

void menu() //封装一个函数用来打印菜单
{
	printf("****************\n");
	printf("****  1.play  ***\n");
	printf("****  0.exit  ***\n");
	printf("****************\n");
	printf("请选择是否游玩:>>");
}

void game()
{
	int x = rand() % 100 + 1;
	int guess = 0;
	int count = 5;
	while (count)
	{
		printf("你只剩%d次了,你猜不对咯\n", count);
		printf("请开始你的表演,输入你蒙的数字:>>");
		scanf("%d", &guess);
		if (guess < x && count > 1)
		{
			printf("猜小了,试着往大点猜猜呢\n");
		}
		else if (guess > x && count > 1)
		{
			printf("猜大了,试着往小点猜猜呢\n");
		}
		else if(guess = x && count > 1)
		{
			printf("蒙对啦 蒙对啦 运气真好!!! 正确答案是%d\n",x);
			break;
		}
		count--;
	}
	if (count == 0)
		printf("你没蒙对,你输了,正确答案是%d\n", x);
}
int main()
{
	int input = 0;//定义一个input,do while的表达式为input 这样玩家游戏结束时 想再次游玩 选择1继续游戏的同时就又循环的一次,选择0则退出游戏
	do
	{
		menu(); //调用封装的函数
		srand((unsigned int)time(NULL));
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏咯,感谢游玩!请给个五星好评!!!\n");
			break;
		default:
			printf("输入错误请重新选择噢!\n");
			break;
		}
	} while (input);
	return 0;
}
  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

4U247

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

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

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

打赏作者

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

抵扣说明:

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

余额充值