用C语言实现一个猜数字小游戏

要用C语言实现一个猜数字游戏,那么首先需要了解我们的游戏的要求~

【游戏要求】

【猜数字游戏】:

  • 由电脑随机生成一个(1~100)的数字,然后由玩家来猜数字。

  • 玩家猜小了,则告知猜小了;玩家猜大了,则告知猜大了。直到猜对为止。

  • 游戏可以一直玩下去。

那么我们将用代码一步步实现这些要求~

【代码实现】

#include <stdio.h>

void menu()
{

}

int main()
{
	do
	{
		menu();
	} while ();
	return 0;
}

这是一开始的基本的代码架构。因为游戏可以一直玩下去,所以设置了do...while循环来实现这一点。其中的menu是一个“菜单”,帮助玩家选择“开始游戏”或“退出游戏”。目前这些都只是基本架构。

  • menu的内容可由程序设计者自行设计调整。这里选择了简洁的画面,提示玩家通过1/0的输入来实现游戏的开始和关闭。
  • 用scanf获取玩家输入的数字之后要进行判断。用switch...case语句,分成1、0、其他三种情况进行判断。
  • while内的条件判断可以用input的值来决定。因为0代表退出游戏也就是结束循环。

代码实现如下:

#include <stdio.h>

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 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择!\n");
			break;
		}
	} while (input);
	return 0;
}

此时的运行界面是这样的:

输入1会不断循环运行,输入0则会退出。第一阶段的目标就这样达成了!

【补充:建议大家写一段代码之后就要测试一下(比如现在我们的游戏代码就可以测试了)。如果因为前面代码的错误导致后面代码需要推倒重来是非常可惜的!所以一定要记得一个阶段一个阶段的运行检测代码哦!】 

当然,我们的游戏并不可能只是循环打印“猜数字”这么简单,接下来要用代码将游戏丰满起来!于是我们可以在case 1 这个需要开始游戏的情况下插入一个关于游戏的函数。一旦需要开始游戏则进入这个游戏函数开始游戏。那么接下来要做的就是实现我们的游戏函数。


实现这个函数首先需要电脑生成一个随机数给我们猜。

C语言中有一个叫做rand()的函数

 它可以生成一个范围为0~32767随机数,它不需要参数,可以返回一个int类型的值,头文件是<stdlib.h>。

但是!发现rand生成的随机数每次重开游戏都是一样的顺序!这是不行的!这是伪随机数!

然后我们再次阅读文件,发现上面写在运行rand前需要一个srand函数。

 它需要一个参数,如srand(100)。如果输入的数相同则会生成相同的随机数,输入的数不同则生成不同的随机数。那么问题又出现了,如果需要srand生成一个随机数,那么就需要给它输入一个随机数。哈哈哈这个先有鸡还是先有蛋的问题应该要怎么解决呢?

我们需要给srand传进去一个一直在发生变化的数。那么什么东西一直在发生变化呢?时间!时间在不停流逝不停变化!如果把时间传给它就能解决这一问题了!那么接下来,就需要介绍一个东西;

【时间戳】

时间戳是一个自增的整数,它表示从1970年1月1日零时整的GMT时区开始的那一刻,到现在的毫秒数。

C语言的time函数可以返回时间戳。

 可以将时间戳放在传入的地址参数里,也可以直接用其返回值返回时间戳,此时参数可以数额职位空指针。它返回的time_t类型本质上是一个整数。而srand需要的也是一个整数。那么就可以实现代码了!代码:srand((unsigned int)time(NULL));但要注意,srand只需要在整个一轮游戏中调用一次即可。(若频繁调用,则可能会得到相同值)于是,我们将srand放在了主函数里。这样就能实现随机数了。另外还要记得调整随机数范围至1~100。我们采取%100+1的方法就行啦!

随机数生成要点如下:1、需要rand 2、需要srand 3、需要利用时间戳 4、srand只需要调用一次 5、调整随机数范围


猜数字的实现

用while循环来让玩家一遍一遍地猜数字,用if...else语句来判断猜的大了还是小了。猜对了则用break跳出循环。


整体代码如下:

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

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

//猜数字游戏的实现
//时间戳
void game()
{
	int guess = 0;
	//生成随机数
	int ret = rand() % 100 + 1;  //rand可以生成一个0~32767的随机数 调整其范围
	//猜数字
	while (1)
	{
		printf("猜数字:>\n");
		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));  //srand只需调用一次所以放在这
	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;
}

至此,这个猜数字游戏的代码就此结束了!

おすすめ

転載: blog.csdn.net/m0_63099455/article/details/122523138