目录

引言

一、游戏规则

二、设计思路

1. 制作菜单

2.生成随机数

3.逻辑判断与玩家互动

4.结束处理

三、 游戏设计

1.菜单函数

2.主函数

3.游戏功能函数

四、完整代码及运行效果图

总结 


引言

本文将带领大家一步步使用C语言编写一个经典的猜数字小游戏。通过这个项目,你将学习到C语言的基本语法、控制结构以及如何与用户进行交互。无论你是编程初学者还是有经验的开发者,这个项目都将为你提供一个实践C语言编程的机会。让我们开始这段编程之旅吧!

一、游戏规则

游戏规则如下:

1.游戏的目标是猜出一个由计算机随机生成的1到1000之间的整数。
2.玩家有9次机会来猜测这个数字。
3.每次猜测后,计算机会提供提示,告诉玩家猜的数字是太高、太低还是正确。
4.如果玩家在9次机会内猜对了数字,则获胜;否则,游戏结束。
5.玩家可以输入任何1到1000之间的整数进行猜测。
6.如果玩家输入的数字不在1到1000的范围内,计算机将提示错误并要求重新输入。
7.每次猜测都是独立的,前面的猜测不会影响后面的猜测。
8.玩家可以通过逻辑和推理来缩小猜测范围,提高猜中的几率。

二、设计思路

1. 制作菜单

设计一个简单的文本菜单,提供开始游戏和退出游戏的选项。
使用printf函数显示菜单选项,并通过scanf函数获取玩家的输入选择。
判断玩家输入的选项:如果输入1,则开始游戏;如果输入0,则退出游戏。 

2.生成随机数

在游戏开始前,使用srand函数和time函数来初始化随机数生成器,确保每次游戏都能产生不同的随机数。
使用rand函数生成一个1到1000之间的随机整数,作为玩家需要猜测的目标数字。 

 rand函数

C语言中提供了一个函数叫rand,这个函数是用来生成0~RAND_MAX(32767)之间的伪随机数。函数原型如下:

#include<stdlib.h>//rand函数所需的头文件
int rand(void);//函数原型,返回值为伪随机数

srand函数

C语言提供了一个函数叫srand,这个函数用来初始化随机数的生成器,通过调用srand函数的参数seed来设置rand函数的随机种子,从而达到生成随机数的效果。函数原型如下:

#include<stdlib.h>//srand函数所需的头文件
void srand(unsigned int seed);//函数原型

time函数

C语言中提供了一个函数叫time,用来获取当前时间戳,返回值为time_t类型。函数原型如下:

#include<time.h>//time函数所需的头文件
time_t time(time_t* timer);
//当timer非空时,函数会返回时间戳
//并将这个时间戳存储在函数返回的变量中;
//time为空时,只返回时间戳

3.逻辑判断与玩家互动

提示玩家输入猜测的数字,并通过 scanf 函数读取玩家的输入。
设置一个循环,允许玩家最多猜测9次。在每次猜测后,使用条件语句(if-else)来判断玩家输入的数字与目标数字的关系。
如果玩家猜对了,显示祝贺信息并结束游戏。
如果玩家猜错了,给出提示,并允许玩家继续猜测,直到用完所有的机会。

4.结束处理

如果玩家在9次尝试内猜对了数字,显示胜利消息,并使用 system("cls") 来清屏。
如果玩家用完了所有机会仍未猜对,显示失败消息,并告知正确答案,然后使用 system("cls") 来清屏。

三、 游戏设计

 1.菜单函数

首先,我们需要制作一个简易的游戏菜单,代码如下:

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

}
//玩家按1开始游戏,按0则结束游戏

2.主函数

主函数用来控制按1开始游戏/按0退出游戏,并且多次进行直到玩家退出。

这里我们用switch来实现玩家的选择,用do...while循环语句保证游戏的多次进行。代码如下:

int main()
{
	int option;
	srand((unsigned int)time(NULL));//利用返回的时间戳提供随机种子
	do
	{
		system("cls");//用于清除缓冲区,后一次玩的时候清除前面记录
		menu();//调用菜单函数
		printf("请做出你的选择:>");
		scanf("%d", &option);//玩家输入选择
		switch (option)//switch语句实现玩家的选择
		{
		case 1:
		{
			game();//调用游戏功能函数
			break;
		}
		case 0:
		{
			printf("游戏结束\n");
			break;
		}
		default:
			printf("输入有误,请重新输入\n");
			system("pause");//用来暂停程序,按下后继续运行,即运行循环开头的清除缓冲区功能
			break;
		}
	} while (option);

}

3.游戏功能函数

用rand生成1~1000之间的随机数。再设置一个循环,允许玩家最多猜测9次,在每次猜测后,使用条件语句(if-else)来判断玩家输入的数字与目标数字的关系来给出相应提示。代码如下:

void game()
{
	int guess=0;//该变量为玩家即将输入的数字
	int num = rand() % 1000 + 1;//产生一个1~1000的随机数
	int chance = 9;//这里设置共有9次机会
	while (1)
	{
		printf("你还有%d次机会\n", chance);
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess > num)
		{
			printf("不对哦,再往小了猜\n");
		}
		else if (guess < num)
		{
			printf("不对哦,再往大了猜\n");
		}
		else
		{
			printf("恭喜你猜中了!\n");
			system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
			break;
		}
		chance--;
		if (chance == 0)
		{
			printf("很遗憾,你没有猜出\n");
			printf("正确答案是%d\n", num);
			system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
			break;
		}
	}
}

四、完整代码及运行效果图

完整源代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("****************************\n");
	printf("*******    1.play    *******\n");
	printf("*******    0.exit    *******\n");
	printf("****************************\n");

}
void game()
{
	int guess = 0;
	int num = rand() % 1000 + 1;//产生1~1000的随机数
	int chance = 9;//这里设置共有9次机会
	while (1)
	{
		printf("你还有%d次机会\n", chance);
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess > num)
		{
			printf("不对哦,再往小了猜\n");
		}
		else if (guess < num)
		{
			printf("不对哦,再往大了猜\n");
		}
		else
		{
			printf("恭喜你猜中了!\n");
			system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
			break;
		}
		chance--;
		if (chance == 0)
		{
			printf("很遗憾,你没有猜出\n");
			printf("正确答案是%d\n", num);
			system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
			break;
		}
	}
}
int main()
{
	int option;
	srand((unsigned int)time(NULL));
	do
	{
		system("cls");//用于清除缓冲区,后一次玩的时候清除前面记录
		menu();
		printf("请做出你的选择:>");
		scanf("%d", &option);
		switch (option)
		{
		case 1:
		{
			game();
			break;
		}
		case 0:
		{
			printf("游戏结束\n");
			break;
		}
		default:
			printf("输入有误,请重新输入\n");
			system("pause");//用来暂停程序,按下后继续运行,即运行下面的清除缓冲区
			break;
		}
	} while (option);

}

运行效果图如下:

总结 

通过这个项目,我们不仅学习了C语言的基本语法和控制结构,还学习了如何与用户进行交互。无论你是编程初学者还是有经验的开发者,这个项目都为你提供了一个实践C语言编程的机会。

最后,我们希望这个项目能够激发你对编程的兴趣,并鼓励你继续学习C语言和其他编程语言。编程是一项有趣且有用的技能,能够帮助你解决问题、创造工具和实现自己的想法。感谢阅读,祝你在编程之旅中取得进步!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐