C语言猜数字游戏详解及代码优化

目录

引言:

1.程序思路: 

2.代码实现:

2.1.生成游戏菜单:

2.2.构建主函数框架: 

2.3.构建游戏函数: 

3.游戏源码: 

4.程序优化:

优化后源码: 

结论: 


引言:

猜数字游戏是一种非常经典的小游戏,通过让玩家猜一个随机生成的数字来测试其智力和运气。在本篇博客中,博主将通过详细的代码示例来介绍如何使用C语言实现一个简单的猜数字游戏,帮助小伙伴们更好的理解和掌握C语言的基本语法和逻辑控制结构。

1.程序思路: 

猜数字游戏的基本思路是:

  1. 程序随机生成一个1~100之间的数
  2. 玩家通过输入猜测的数字来猜测这个数字
  3. 如果猜小了,就告诉你猜小了
  4. 如果猜大了,就告诉你猜大了
  5. 如果猜对了,那就恭喜你,游戏结束

2.代码实现:

2.1.生成游戏菜单:

给这个游戏设置一个菜单,玩家选择1为开始游戏,选择0为退出游戏。

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

效果显示:

C语言猜数字游戏详解及代码优化_第1张图片

2.2.构建主函数框架: 

我们希望一盘游戏结束后不过瘾,还可以继续玩,这时候就可以使用do-while循环。然后用switch语句控制继续游戏还是退出游戏,写到这儿我们可以简单测试一下,看我们的代码有没有问题。

int main()
{
	int input = 0;
	do
	{
		menu();
		printf("请选择(1/0):>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("猜数字!\n");
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}
	} while (input);

	return 0;
}

2.3.构建游戏函数: 

 如果测试没有问题,就可以继续实现里边的细节。接下来我们可以在“猜数字”这儿简单封装一个game()函数,将玩游戏的逻辑包含在里边,回头再在主函数里边调用。我们C语言里边提供了一个生成随机数的函数,叫rand(),它的返回值其实就是一个随机数。感兴趣的伙伴可以在https://legacy.cplusplus.com/这个网站里边了解一下它的基本用法,但是如果我们只是这样写出来,却会发现它每次生成的随机数都是一样的,如下图所示:

C语言猜数字游戏详解及代码优化_第2张图片

如果这样,那这个游戏玩起来可就没意思了,那怎么样才能让它每次生成的随机数都不一样呢,接下来我们可以一起来了解一下这个rand()函数:

C语言猜数字游戏详解及代码优化_第3张图片

  • 首先,rand()函数生成的数都是伪随机数(即不是真正的随机数),rand()函数是通过某种算法生成的随机数,所以说这个随机数就不够随机。
  • 其次,rand()函数生成的随机数范围是:0~RAND_MAX(32767)
  • rand()函数在生成随机数之前,要使用srand()函数设置随机数的生成器。

C语言猜数字游戏详解及代码优化_第4张图片

一旦srand()函数设置的种子数固定了,那我们生成的随机数就成固定的了。

C语言猜数字游戏详解及代码优化_第5张图片

  • 反之,如果我们设置srand()函数的种子数不一样,那么生成的随机数就会不一样。
  • 那怎样设置一个随机数的种子呢,其实很简单,只要传进去一个时刻在发生变化的值,那我们的随机数就生成了 。
  • 我们知道,计算机上面的时间在时刻发生变化,如果我们能把这个值给它传进去,随机数不就生成了吗。
  • 这里,我们就要用到time()函数,它可以返回一个时间戳(顾名思义就是一个数字,可以转换成时间),只要时间在变化,那我们的时间戳就在变化,到这里,我们的game()函数就封装完成了。
void game()
{
	//1.生成1~100的随机数
	int ret = rand() % 100 + 1;
	printf("%d\n", ret);
	//2.猜数字
	int guess = 0;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess > ret)
			printf("猜大了,请继续猜!\n");
		else if (guess < ret)
			printf("猜小了,请继续猜!\n");
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}

游戏效果:

C语言猜数字游戏详解及代码优化_第6张图片

3.游戏源码: 

附上游戏源码:

#include 
#include 
#include 

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

void game()
{
	//1.生成1~100的随机数
	int ret = rand() % 100 + 1;//生成1~100之间的整数
	printf("%d\n", ret);
	//2.猜数字
	int guess = 0;//存储玩家猜测的数字
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess > ret)
			printf("猜大了,请继续猜!\n");
		else if (guess < ret)
			printf("猜小了,请继续猜!\n");
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//初始化随机数种子

	do
	{
		menu();
		printf("请选择(1/0):>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏!\n");
			break;
		default:
			printf("选择错误,重新选择!\n");
			break;
		}
	} while (input);

	return 0;
}

4.程序优化:

上面的程序虽然可以实现猜数字游戏的基本功能,但还有一些可以优化的地方,如下:

  1. 在程序中添加错误处理机制,防止玩家输入非法字符或超出范围的数字。
  2. 增加可玩性,例如添加计时功能记录最高分等。
  3. 优化代码结构,使程序更加简洁,易读。

优化后源码: 

#include 
#include 
#include 
#define MAX_NUM 100//最大数字
#define MIN_NUM 1//最小数字
#define MAX_TRIES 10//最大猜测次数

int main() 
{
	int guess, tries = 0;
	srand((unsigned int)time(NULL)); // 初始化随机数种子    
	int num = rand() % MAX_NUM + MIN_NUM; // 生成随机数    
	printf("欢迎来到猜数字游戏!\n");
	printf("你需要在%d次之内猜出1~%d之间的一个数字。\n", MAX_TRIES, MAX_NUM);
	do 
	{
		printf("请输入一个1~100之间的整数:");
		if (scanf("%d", &guess) != 1) 
		{
			printf("输入错误,请输入一个整数!\n");
			fflush(stdin); // 清空输入缓冲区            
			continue;
		}
		if (guess < MIN_NUM || guess > MAX_NUM) 
		{
			printf("输入错误,请输入一个1~100之间的整数!\n");
			continue;
		}
		tries++;
		if (guess > num) 
		{
			printf("猜大了,请继续猜!\n");
		}
		else if (guess < num) 
		{
			printf("猜小了,请继续猜!\n");
		}
	} while (guess != num && tries < MAX_TRIES);
	if (guess == num) 
	{
		printf("恭喜你,猜对了!\n");
		printf("你用了%d次猜出了这个数字。\n", tries);
	}
	else 
	{
		printf("很遗憾,你没有在%d次之内猜对这个数字。\n", MAX_TRIES);
		printf("这个数字是%d。\n", num);
	}
	return 0;
}
  • 在上面的程序中,我们首先使用定义定义了一些常量,例如最大数字、最小数字、最大猜测次数等。
  • 然后,我们在程序开始时输出欢迎信息和游戏规则。
  • 在玩家猜测数字的过程中,我们使用了一些错误处理机制,例如使用scanf函数读取输入时检查返回值,以确保输入的是一个整数;使用fflush函数清空输入缓冲区,以避免输入错误的字符导致程序崩溃;使用continue语句跳过错误输入,以便玩家重新输入正确的数字。
  • 最后,我们在游戏结束时输出相应的提示信息,并记录玩家猜测的次数和随机数字的值。 

效果如下:

C语言猜数字游戏详解及代码优化_第7张图片

结语: 

猜数字游戏是一种非常有趣的小游戏,通过实现一个简单的猜数字游戏程序,我们可以更好地理解和掌握C语言的基本语法和逻辑控制结构。在实际开发中,我们可以根据具体的需求和场景,对程序进行优化和扩展,以提高游戏的可玩性和用户体验。希望本篇博客能够帮助大家更好地学习和应用C语言,我们下期再见。

你可能感兴趣的:(C语言小游戏,c语言,猜数字游戏)