猜数游戏(详细讲解)

本文介绍用C语言实现猜数小游戏,电脑随机生成1 - 100的整数,玩家猜测。先构建程序基本逻辑,用do - while循环和switch语句,完成菜单函数和游戏函数。重点讲解随机数生成,需用srand和time函数,最后附上完整代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天给大家介绍一款小游戏,猜数游戏,规则很简单,电脑随机生成1~100直接的一个整数,由玩家进行猜测,猜的数比电脑生成的大了,电脑会告诉你猜大了,比生成的小了,会告诉你猜小了,猜对了的话,会恭喜你,猜对了。

首先,我们要写好程序的基本逻辑,让它可以先跑起来,我们写代码要一步一步的敲,不要上来就巴拉巴拉的敲,我之前学java时听过一句话叫:化繁为简,先死后活。意思是我们要把困难的题目给他化解成一块一块小的简单的,便于我们写出来,开始先让它可以跑起来(最开始时候先让代码死板一点,能跑就行),最后再统合变为活的(比如输入各种复杂参数,让代码可以变化无穷),自己需要的。

#include<stdio.h>
int main() {
		int input = 0;
	do {
		printf("这里是菜单函数\n");
		printf("请选择:>\n");
		scanf("%d", &input);
		switch (input) {
		case 0:
			printf("退出游戏,程序结束!\n");
			break;
		case 1:
			printf("这里是猜数字的游戏函数\n");
			break;
		default:
			printf("输入错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

我们使用do-while循环和switch语句来构成代码的基本逻辑。

再接着,我们来完成菜单函数,这个非常简单,只需要用printf函数打印出一个好看的菜单就行。

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

对应我们switch里的case语句,input输入的为0,退出游戏,输入为1,开始游戏,输入其他的就让他重新输入。

接着我们来完成猜数游戏的游戏函数

void game() {
	int n = rand() % 100 + 1;
	int x = 0;
	int i = 5;
	do {
		printf("请猜数字,你还有%d次机会\n", i);
		scanf("%d", &x);
		if (x < n) {
			printf("猜小了\n");
			i--;
		}
		else if (x > n) {
			printf("猜大了\n");
			i--;
		}
		else {
			printf("恭喜你,猜对了\n");
			break;
		}
	} while (i);
}

这里我们使用do-while循环来执行猜数逻辑,设定一个可以猜的次数i,我设置的是5,5次没有猜中就重新开始,大家可以根据自己的需求设置。

这里难的地方是生成随机数,我们重点讲解一下:我们可以使用rand函数来生成一个随机的数字,rand函数会返回一个范围在0到RAND_MAX(32767)之间的伪随机数(整数),如果我们直接这样写,那么每次游戏生成的随机数是一样的,在使用rand函数前要先使用一个叫srand的函数,去初始化随机数的生成器,srand函数的原型是:void srand(unsigned int seed);参数说明:unsigned seed:随机数产生器的初始值(种子值)。由百度所见,我们在使用srand时,需要给他设置一个参数seed,而且这个seed参数是要变化的才行,不然还是会产生一样的随机数。所以这时候,我们需要引入一个新的函数,叫time函数,因为时间就是在不断的变化,很符合我们的需求,我们设置一个时间戳为seed(时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数),time函数的参数我们设置为NULL即可,又因为参数seed为unsigned int类型,我们使用强制转换将time函数的返回值转为该类型。最后写出来的srand是这样的:

srand((unsigned int)time(NULL));

srand函数在整个程序中只需要调用一次即可,所以把他放在main函数里边的开头就行。

使用time函数需要引入头文件#include<time.h>,使用rand函数和srand函数需要引入头文件#include<stdlib.h>。

然后说一下为什么生成的rand值需要%100+1,因为上边说了rand函数会返回一个范围在0到32767的数字,我们对他%100后,会得到一个0到99的数字,此时+1,就可以得到一个1到100的数字了,大家可以根据自己的需求来设置猜数的大小,这样我们的猜数游戏就完成啦。

最后附上完整代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu() {
	printf("*************************\n");
	printf("******** 1. play  *******\n");
	printf("******** 0. exit  *******\n");
	printf("*************************\n");
}
void game() {
	int n = rand() % 100 + 1;
	int x = 0;
	int i = 5;
	do {
		printf("请猜数字,你还有%d次机会\n", i);
		scanf("%d", &x);
		if (x < n) {
			printf("猜小了\n");
			i--;
		}
		else if (x > n) {
			printf("猜大了\n");
			i--;
		}
		else {
			printf("恭喜你,猜对了\n");
			break;
		}
	} while (i);
}
int main() {
	int input = 0;
	srand((unsigned int)time(NULL));
	do {
		menu();
		printf("请选择:>\n");
		scanf("%d", &input);
		switch (input) {
		case 0:
			printf("退出游戏,程序结束!\n");
			break;
		case 1:
			game();
			break;
		default:
			printf("输入错误,请重新选择\n");
			break;
		}
	} while (input);
	return 0;
}

新人作者,上述文章如有错误,还请大佬指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值