C语言—猜数字游戏的实现

        

目录

目录

完整的程序

打印菜单

主函数部分

生成随机数

猜数字函数的实现


        我们已经学习到了C语言的一些基本知识和分支循环语句了,可以自己动一动手来尝试实现C语言—猜数字游戏了,为了猜数字程序的实现,应该要有以下几个功能:

1.程序会生成一个1~100之间的随机数。

2.猜数字的函数部分:

(1)猜小了,程序会告诉你猜小了,继续猜;

(2)猜大了,程序会告诉你猜大了,继续猜;

(3)猜对了,程序会告诉你:恭喜你猜对了,程序结束。

3.游戏可以重复运行。

完整的程序

#include 
#include 
#include 

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

void game()
{
	int ret = rand() % 100 + 1;
	int num = 0;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &num);
		if (num < ret)
		{
			printf("猜小了\n");
		}
		else if (num > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			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("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

执行结果:

C语言—猜数字游戏的实现_第1张图片


打印菜单

        通过printf函数打印出一个漂亮的菜单,以便以于对接下面循环语句的实现。

#include

void menu()//打一个漂亮的菜单
{
	printf("********************\n");
	printf("*****   1.play  ****\n");
	printf("*****   0.exit  ****\n");
	printf("********************\n");
}

int main()
{
	int input = 0;
	do
	{
		//打印菜单
		menu();
		printf("请选择:>");
		scanf("%d", &input);
        //这里要实现游戏的开始和退出
        //可以考虑使用switch循环
	} while (input);//使游戏可以重复
	return 0;

主函数部分

        我们先写主函数,先实现菜单,利用do...while()语句的特征先让程序执行一遍,再通过switch语句实现对基本三种情况(包括含数组程序的执行,程序的退出,以及输入错误)的选择。这样就可以完成主函数了。

        程序的大体框架就是这样子,下面就是完成生成随机数和对猜数字函数的实现。

#include

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

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

生成随机数

        为了生成随机数,我们需要使用rand函数,在使用rand 函数的时候需要引用头文件#include

        rand函数返回的是0~RAND_MAX(32767)之间的一个随机数

        使用rand函数,那随机数就算输入好了吗?

        其实并没有,连续启动程序,我们会发现它随机数生成的值不仅过大,而且两次都是一样的。显然,这不是我们想要的结果。

第一次调试:

C语言—猜数字游戏的实现_第2张图片

 第二次调试:

C语言—猜数字游戏的实现_第3张图片

        

        所以为了生成我们所需要的随机数值,我们还需要引用到另一个函数:srand函数rand函数在使用之前要使用一个srand函数来设置随机数的生成器

        但是我们使用srand函数时,同样也需要给该函数输入一个随机值srand函数才会发生变化,这样在我们需要输出随机值的情况下,又要输入随机值。很明显这是矛盾的,所以我们要想到一个新的办法。

C语言—猜数字游戏的实现_第4张图片

        

         我们可以使用时间戳来解决这个问题,C语言中,time函数会返回时间戳,通过time函数我们就可以生成我们想要的随机数了,记得使用time函数也需要应用头文件#include

        确实是生成随机数了,可是当电脑输出下一个数时,会发现他和上一个数值一样或者十分接近,这显然也不是我们想要的随机数,所以还是需要改进。

C语言—猜数字游戏的实现_第5张图片

     

            srand函数在程序中只需要调用一次就可以了,我们不需要不断的重新使用srand函数,所以我们只需要将它放在主函数中,这样srand函数作为起点就可以只进行一次。

        同时,为了得到1到100的随机数,我们只需要将rand函数自动生成的随机值取模100,得到该随机值的后面两位,这样我们就可以得到1到100中的随机值了。

        这样就可以生成我们需要的随机数了。

C语言—猜数字游戏的实现_第6张图片

         程序很快就要完成了。

#include 
#include 
#include 

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

void game()
{
	//srand((unsigned int)time(NULL));//放在main函数,只需要使用一次
	//1.生成随机数
	int ret = rand()%100+1;
	printf("%d\n", ret);
	//2.猜数字
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//time需要一个指针,我们传一个空指针即可
	do
	{
		//打印菜单
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 2:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}


猜数字函数的实现

        实现猜数字函数,我们先使用一个while循环,在开始或者每次判断后输入一个数字后,通过多个嵌套的if语句不断的对输入的数字进行判断,直至猜对为止。

//2.猜数字
	int num = 0;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &num);
		if (num < ret)
		{
			printf("猜小了\n");
		}
		else if (num > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}

感谢你的观看,祝进步,如有错误,望指正。

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