简单c语言猜数字游戏

分析

猜数字游戏,顾名思义。就是一个人心里默想一个数字,然后我们来猜。当然这个被猜想的数字一定是有范围的。而且一旦被猜者想好后就不能更改。然后我们猜数的一方,根据自己报出的数字,结合被猜者判断后反馈给我们的信息,我们再重新确定范围后再一次猜数。依次循环,知道被猜者反馈给我们猜对了的信息后。猜数游戏才结束。
如果交由计算机来做的话。我们需要先实现规定好猜数范围。利用计算机自己生成的随机数来当做被猜者心中的数值。然后用户输入自己所猜想的数字,计算机通过屏幕反馈信息。直到猜对了,单次的猜数游戏才算结束。

步骤总结

  1. 确定数值范围,再让计算机生成随机数。
  2. 用户输入自己所猜想的数。和已经生成的随机数比较,从而影响接下来的过程。.
  3. 若猜测错误,则通过屏幕反馈信息,并再次要求用户输入数据;
    若猜测正确,则结束这次游戏。
    以上则是大体思路。具体分布实现过程见下文。

分步实现

第一步

再游戏开始之前,需要通过屏幕提供用户一定的信息。用户可以在这里决定要不要玩这个游戏。
如果玩这个游戏,则开始猜数游戏,如果不玩,则可以关闭改程序。
如果提供这些信息,用户可能一脸懵逼,毕竟程序是为了让使用者更好的使用,而不是身为床罩这的我们单纯的能自己自娱自乐
所以我们需要给该程序提供一个主菜单

主菜单MENU1()函数

void MENU1()
{
	printf("\t\t\t\t欢迎来到猜数字游戏\n\t\t系统将给出一个100以内的随机数作为答案,供你猜想\n");
	printf("\t\t    ########################################\n");
	printf("\t\t    ######        *1:开始游戏         ######\n");
	printf("\t\t    ######        *2:退出游戏         ######\n");
	printf("\t\t    ########################################\n");
}

第二步

用户在看到主菜单之后,会根据以获取的信息进行功能选择,由块代码克制,我们至少需要实现两个功能。暨1.实现猜数游戏的运转。2.退出这个游戏。所以我们需要分支语句来进行条件匹配的选择。最好是用的就是switch语句,简单粗暴。

int main()
{
	srand((unsigned long)time(NULL));//随机数种子
	MENU1();
	int a = 0;
	while (1)
	{
		scanf("%d", &a);
		switch (a)
		{
		case 1:PLAY(); goto loop;//break;//goto
		case 2:
			printf("游戏结束");
			return 0;//提前结束主函数,使得游戏退出
		default:printf("请输入正确编号\n");

		}
	loop:break;
	}return 0;



	system("pause");
}

其中,由于用户看到的功能选项是1和2所以用户一般都会从键盘输入相应的数字,来试图实现对应的功能。所以我们声明一个变量a。使用户的选择赋值到a中,最后通过switch(a)和case搭配来实现相对应的功能的跳转。但是如果用户非要输入除了这1和2以外的数呢,我们就需要提示用户,输入的功能号错误。同时为了避免多次重复输入错误额,我们将其放入到一个死循环中,通过功能1和2的return 和goto来结束main(),非1和2的输入值将永远循环提示用户输入错误,知道功能号对应正确。
第三步

猜数游戏主体
已知数据范围是0-100,所以用户通过不断的试验,在结合程序的结果(用户猜大了,还是猜小了)帮助用户不断调账所猜测数字的区间,最终逼近被猜数字,直到猜测正确。

void PLAY()
{
	int n = 0;
	
	do
	{
	    n = rand() % 100 + 1;//膜100+1使得n的范围为【0-100】
		int x = 0;
		printf("请输入你猜想的数字\n");
		scanf("%d", &x);
		if (n > x)
		{
			printf("你所猜的数字%d小了", x);
		}
		else if (n < x)
		{
			printf("你所猜的数字%d大了", x);
		}
		else
		{
			printf("你所猜的数字%d是正确的\n", x);
			MENU2();
			int z = 0;
			scanf("%d", &z);
			if (z == 2){
				printf("byebye\n");
				break;
			}
		}
	} while (1);
}

在用户才正确后,如果用户想继续玩或者想退出的话,就有需要实现这两项功能。所以我们需要再列出一个小菜单

void MENU2()
{
	printf("\t\t    ########################################\n");
	printf("\t\t    ######        *1:再来一局        ######\n");
	printf("\t\t    ######        *2:退出游戏         ######\n");
	printf("\t\t    ########################################\n");
}

先关的实现关系在上图play()函数中最后一个else处。因为已经猜数正确,所以这时用户如果输入1的话就不会进入if(z==2)的判定,从而使的break无法执行,从而在play函数中继续循环。

n = rand() % 100 + 1;//膜100+1使得n的范围为【0-100】

这一句是在整个do while循环里面的,所以导致了,循环没做一遍,这条语句都要执行一次。这条语句结合一下这条代码。通过下面这条代码种下一个随机数种子。再使上面那条代码中的rand()生成一个随机数。ok这下随机数已经有了,但是如何确定范围呢。仔细看在rand()后面还有%100+1
这一整句话就是一个随机数膜100+1;从而确定了范围边界是【1,100】(任何int数%100的范围是0-99)

srand((unsigned long)time(NULL));//随机数种子

总结

在这里插入图片描述
play函数中的退出时利用goto语句跳转处main()函数中的循环从而结束程序的

发布了13 篇原创文章 · 获赞 13 · 访问量 757

猜你喜欢

转载自blog.csdn.net/jiewaikexue/article/details/102592875