用C语言实现猜数字游戏

要实现的功能:

  1. 自动产生一个1~100的随机数。
  2. 猜数字 -     a、猜大了,就恭喜你,游戏结束     b、猜错了,会告诉你是猜大了还是猜小了
  3. 这个游戏你可以一直玩,直到游戏结束

首先我们要制作一个菜单:

#include <stdio.h>
void menu()
{
	printf("####################\n");
	printf("####  1.paly   #####\n");
	printf("####  0.exit   #####\n");
	printf("####################\n");

}


int main()
{

	menu();
	printf("进入或者退出(1/0):");
	

	return 0;
}

 这个菜单会打印输出一个菜单;然后提示你是进入游戏还是退出游戏。这时我们需要从键盘上输入一个数并且要判断这个数是1/0/其他,然后用分支语句分别对输入的数做出不同的行为。

int main()
{
	int imput = 0;
	menu();
	printf("进入或者退出(1/0):");
	scanf("%d", &imput);
	switch (imput)
	{
	case 1:
		game();
		break;
	case 0:
		printf("退出游戏\n");
		break;
	default:
		printf("输错了,请重新输入\n");
		break;
	}

	return 0;
}

由于我们要实现游戏可以一直玩,知道游戏结束,那么我们可以将主函数中的部分代码放入do - while循环当中,来实现这个功能。

不管imput输入的是什么,循环体都会先走一遍,然后再判断是不是要再进入循环。当imput的值为非0时,循环再次执行;当imput为0时,循环结束,游戏结束。

然后我们就要对进入游戏后要做的事进行编写了。我们的目的是要实现一个1~100的随机数。在C语言中有一个随机数生成函数:rand()。

void game()
{
	int rej = rand();
	printf("%d\n", rej);
}

 但是这里我们发现,我们每次退出程序,再进入游戏,这个随机数都是41,这不符合我们想要的随机数的想法。这里的问题在于这个随机数生成函数在使用的时候需要使用srand()函数对其进行设定。下面是库函数rand()和srand()的说明。rand()和srand()的使用需要引入头文件

#include <stdlib.h>

 

那么我们应该怎样设置才能让这个数字随机起来呢,我们需要使用srand函数对rand函数进行设定,srand就是给rand随机数设定一个初识的值,就是从哪开始的。

srand((unsigned)time(NULL));

这里所用到的time函数,是使用了时间戳的概念。时间戳就是将系统现在的时间和初始的时间相减,得出的一个差值。

那么当我们把这个时间戳参数给srand函数之后,可以看到现在的每个随机数都离得很近,不是我们希望的那种随机数(也就是不够随机),为了解决这个问题,我们将这个srand函数放到循环外面,整个程序中只对rand设置一次,这样这个数就足够随机了。

接下来我们就要允许玩游戏的人输入一个数,然后程序对这个数和随机生成的数进行比较,然后给出提示来让玩游戏的人继续猜直到猜中。

全部代码:

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

void menu()
{
	printf("####################\n");
	printf("####  1.paly   #####\n");
	printf("####  0.exit   #####\n");
	printf("####################\n");

}

void game()
{
	int rej = rand()%100+1;
	

	int guess = 0;
	while (1)
	{
		printf("请输入猜的数:");
		scanf("%d", &guess);
		if (guess < rej)
		{
			printf("猜小了\n");
		}
		else if (guess > rej)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你猜对了!!!\n");
			break;
		}
	}
}

int main()
{
	int imput = 0;
	do
	{
		srand((unsigned)time(NULL));
		menu();
		printf("进入或者退出(1/0):");
		scanf("%d", &imput);
		switch (imput)
		{
		case 1:
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输错了,请重新输入\n");
			break;
		}
	} while (imput);

	return 0;
}

 这里对int rej = rand()%100+1    进行解释:rand()%100是一个0~99的余数,余数加一正好符合我们的需求。

游戏运行的效果为:

 一定要认真地去理解这个程序的逻辑结构!加油吧!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值