C语言程序设计-----猜数字游戏(1A2B详解)

 目录

一、游戏介绍

游戏内容

游戏玩法

二、游戏实现思路

三、游戏实现过程

1、游戏菜单menu函数

2、help函数

3、same函数

4、game函数

5、构建主函数

四、主函数内的其他函数的调用

1、产生随机数函数

2、清屏函数

3、 _getch()函数

五、终极代码+游戏效果展示

 Last

 ​​​这是博主大一时期的课程设计,目前刚结束大一,实力有限,内容仅供参考,如果有不足之处,请多多指教。


一、游戏介绍

游戏内容

该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复。玩游戏者通过游戏提示输入八次来匹配上面所输入的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。例如玩家输入四位数5678,计算机会按照正确答案5720给出1A1B的提示内容,玩家根据此提示继续猜测数字。

游戏玩法

1、游戏软件随机产生4个数字,但不显示,给用户提供输入提示符,让用户猜4个数字的值和位置顺序。如果数字值和位置顺序均正确,则猜数字成功。

2、玩家有8次猜数字的机会,如果在8次之内仍末猜出正确的数字值和数字位置顺序,则提示用户游戏失败。

3、 一旦玩家在8次的次数限制内猜出正确的数字值和位置顺序,则赢得游戏。

二、游戏实现思路

1、首先设计一个menu函数,生成游戏菜单 ——>1.开始游戏 2.帮助 3.退出

2、设计一个help函数,说明游戏规则。

3、设计一个same函数,判断产生的随机数各个位置上有没有重复的函数。

4、设计一个game函数,比较用户输入数据和随机数,并产生提示信息。

5、利用生成随机数的函数产生随机数。

三、游戏实现过程

1、游戏菜单menu函数

void menu()//函数声明
{
	printf("\t\t\t\t猜数字游戏\n\n\n\n");
	printf("\t\t\t\t1.开始游戏\n\n");
	printf("\t\t\t\t2.帮助\n\n");
	printf("\t\t\t\t3.退出\n\n");
	printf("\t\t\t请输入(1-3):");
}

效果展示:

4d71221e4d3746aa9738b71ecd5c776b.png

2、help函数

void help()//游戏规则说明函数

{

printf("\t\t\t欢迎使用本程序\n\n\n");

printf("游戏说明:输入四位数字,输入后有提示XAYB,X表示有几个数字与答案数字相同且位置相同。\n");

printf("Y表示有几位数字与答案数字相同且位置不正确。\n");

printf("按任意键继续............\n");

}

3、same函数

这里的u是全局变量

int same(int num[])//判断产生的随机数各个位置上有没有重复的函数
{
	int i, j;
	u = 0;
	for (i = 0; i < 3; i++)
		for (j = i + 1; j < 4; j++)
			if (num[i] == num[j])
				u = 1;
	return u;
}

4、game函数

此函数没有返回值,它是分配空间将随机生产的数存储到这个函数的int a[]参数中并且在这个函数里定义一串其他的参数,来实现玩家对数据的输入和提示信息的输出,与此同时再实现对游戏成功与否的判断,若游戏成功在主屏幕上打印“恭喜,游戏成功!”,若是游戏失败就打印“游戏失败!”。

void game(int a[])//比较用户输入数据和随机数,并产生提示信息
{
	int b[4] = {0};
	int i = 0, j = 0;
	while (1)
	{
		//生成4个随机数
		do
		{
			for (i = 0; i < 4; i++)
				a[i] = rand() % 10;
			same(a);
		} while (u);
		if (a[0] != 0)
			break;
	}
	int k = 1, A = 0, B = 0, N = 8 ,pick = 0;
	printf("请输入要猜想的四位数\n");
	while (A != 4 && k <= N)
	{
		A = 0, B = 0;
		printf("第%d次:", k);
		scanf("%d", &pick);//玩家从键盘输入数据
		while (pick < 999 || pick>10000)
		{
			printf("输入不合法!\n");
			scanf("%d", &pick);
		}
		for (i = 3; i >= 0; i--)
		{
			b[i] = pick % 10;
			pick = pick/ 10;
		}
		//比较对应位置上的数
		for (i = 0; i < 4; i++)
			for (j = 0; j < 4; j++)
				if (a[i] == b[j])
					if (i == j)
						A++;
					else
						B++;
		printf("%dA%dB\n", A, B);
		if (A == 4)
		{
			printf("恭喜,游戏成功!\n");
		}
		k++;
	}
	if (A != 4 && k > 8)
	{
		printf("游戏失败!\n");
		printf("正确答案是:");
		for (i = 0; i < 4; i++)
			printf("%d", a[i]);
		printf("\n");
	}
	printf("输入 1 继续游戏,输入 2 返回菜单,输入 0 退出游戏:");
	while (1)
	{
		scanf("%d", &pick);
		if (pick == 2)
		{
			system("cls"); menu();
			int select=0;
			while (select != 3)
			{
				switch (select)
				{
				case 1: {system("cls"); game(a); break; }
				case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; }
				default:printf("输入不合法,请重新输入!"); break;
				}
				scanf("%d", &select);
			}
			exit(0);
		}
		else if (pick == 1)
		{
			system("cls");
			game(a);
		}
		else if (pick == 0)
			exit(0);
		else
			printf("输入错误,请重新输入!\n");
	}
}

5、构建主函数

利用while()循环,确保玩家输入1—3的数字选择菜单选项。利用swich语句选择开始游戏还是获得游戏介绍或是选择退出游戏。

//主函数
int main()
{
	void help();//函数声明
	void game(int a[]);//函数声明

	int  k = 0, select=0;
	int a[4] = { 0 };
	srand((unsigned)time(NULL));//随机数种,只调用一次即可
	menu();
	scanf("%d", &select);
	while (select!= 3)
	{
		switch (select)
		{
		case 1: {system("cls"); game(a); break; }
		case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; }
		default:printf("输入不合法,请重新输入!"); break;
		}
		scanf("%d", &select);
	}
	return 0;
}

四、主函数内的其他函数的调用

1、产生随机数函数

scrand函数是随机数发生器的初始化函数。原型:void srand(unsigned seed);

随机的起点:srand((unsigned) int time(NULL)

上述代码用到了两个库函数void srand(unsigned int seed)和 longlong time(NULL),分别对应的头文件是<stdio.h>和<time.h>

用法:它初始化随机种子,会提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的rand()函数会出现一样的随机数,如: srand(1); 直接使用1来初始化种子。不过为了防止随机数每次重复,常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将time_t型数据转化为(unsigned)型再传给srand函数,即: srand((unsigned) time(&t)); 还有一个经常用法,不需要定义time_t型t变量,即:srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的数据。

srand((unsigned)time(NULL));//随机数种,只调用一次即可

  2bc66c4c437f424db316a25f14e5823f.png

 生成四个随机数储存到数组a中。

2、清屏函数

头文件:stdlib.h

函数:system(“cls”);

3、 _getch()函数

所在头文件: conio.h

函数用途:从控制台读取一个字符,但不显示在屏幕上

函数原型:int getch(void)

返回值:读取的字符

用_getch();会等待你按下任意键,再继续执行下面的语句

五、终极代码+游戏效果展示

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
int u; //全局变量
int same(int num[]);//函数声明
void menu()//函数声明
{
	printf("\t\t\t\t猜数字游戏\n\n\n\n");
	printf("\t\t\t\t1.开始游戏\n\n");
	printf("\t\t\t\t2.帮助\n\n");
	printf("\t\t\t\t3.退出\n\n");
	printf("\t\t\t请输入(1-3):");
}
//主函数
int main()
{
	void help();//函数声明
	void game(int a[]);//函数声明

	int  k = 0, select = 0;
	int a[4] = { 0 };
	srand((unsigned)time(NULL));//随机数种,只调用一次即可
	menu();
	scanf("%d", &select);
	while (select != 3)
	{
		switch (select)
		{
			case 1: {system("cls"); game(a); break; }
			case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; }
			default:printf("输入不合法,请重新输入!"); break;
		}
		scanf("%d", &select);
	}
	return 0;
}

void help()//游戏规则说明函数
{
	printf("\t\t\t欢迎使用本程序\n\n\n");
	printf("游戏说明:输入四位数字,输入后有提示XAYB,X表示有几个数字与答案数字相同且位置相同。\n");
	printf("Y表示有几位数字与答案数字相同且位置不正确。\n");
	printf("按任意键继续............\n");
}

void game(int a[])//比较用户输入数据和随机数,并产生提示信息
{
	int b[4] = { 0 };
	int i = 0, j = 0;
	while (1)
	{
		//生成4个随机数
		do
		{
			for (i = 0; i < 4; i++)
				a[i] = rand() % 10;
			same(a);
		} while (u);//此处用到全局变量u
		if (a[0] != 0)
			break;
	}
	int k = 1, A = 0, B = 0, N = 8, pick = 0;
	printf("请输入要猜想的四位数\n");
	while (A != 4 && k <= N)
	{
		A = 0, B = 0;
		printf("第%d次:", k);
		scanf("%d", &pick);//玩家从键盘输入数据
		while (pick < 999 || pick>10000)
		{
			printf("输入不合法!\n");
			scanf("%d", &pick);
		}
		for (i = 3; i >= 0; i--)
		{
			b[i] = pick % 10;
			pick = pick / 10;
		}
		//比较对应位置上的数
		for (i = 0; i < 4; i++)
			for (j = 0; j < 4; j++)
				if (a[i] == b[j])
					if (i == j)
						A++;
					else
						B++;
		printf("%dA%dB\n", A, B);
		if (A == 4)
		{
			printf("恭喜,游戏成功!\n");
		}
		k++;
	}
	if (A != 4 && k > 8)
	{
		printf("游戏失败!\n");
		printf("正确答案是:");
		for (i = 0; i < 4; i++)
			printf("%d", a[i]);
		printf("\n");
	}
	printf("输入 1 继续游戏,输入 2 返回菜单,输入 0 退出游戏:");
	while (1)
	{
		scanf("%d", &pick);
		if (pick == 2)
		{
			system("cls"); menu();
			int select = 0;
			scanf("%d", &select);
			if (select == 3)
			{
				exit(0);
			}
			else
			{
				while (select != 3)
				{
					switch (select)
					{
						case 1: {system("cls"); game(a); break; }
						case 2: {system("cls"); help(); _getch(); system("cls"); menu(); break; }
						default:printf("输入不合法,请重新输入!"); break;
					}
					scanf("%d", &select);
				}
				exit(0);
			}
		}
		else if (pick == 1)
		{
			system("cls");
			game(a);
		}
		else if (pick == 0)
			exit(0);
		else
			printf("输入错误,请重新输入!\n");
	}
}

int same(int num[])//判断产生的随机数各个位置上有没有重复的函数
{
	u = 0;//注意u是全局变量
	for (int i = 0; i < 3; i++)
		for (int j = i + 1; j < 4; j++)
			if (num[i] == num[j])
				u = 1;
	return u;
}

效果展示:

 Last

🔥 ​​这是博主大一时期的课程设计,目前刚结束大一,实力有限,内容仅供参考,如果有不足之处,请多多指教。🤞

  • 63
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 83
    评论
### 回答1: 您好,我是AI语言助手,以下是对您的回复: 20201022-成信大-c语言程序设计-20201学期《c语言程序设计b》是一门面向大学生的C语言程序设计课程,主要教授C语言的基础知识和编程技巧,包括数据类型、运算符、流程控制语句、函数、指针、数组、结构体等内容。通过本课程的学习,学生可以掌握C语言的基本语法和编程思想,提高编程能力和解决问题的能力,为以后的编程学习和工作打下坚实的基础。 ### 回答2: 20201学期的《c语言程序设计b》是一个深入学习C语言的课程,教授的是C语言的高级应用。在本次课程中,学生将会进一步学习C语言的语法、程序设计思路以及具体的编码实践。 首先,学生将会学习C语言中的函数、指针、结构体、联合体、枚举等高级概念。这些概念是C语言面向对象编程中至关重要的概念,也是学生在日后编写复杂程序时所必须了解的内容。此外,在学习这些概念的同时,学生还将学习如何使用宏定义和预编译指令来进一步优化程序性能。 其次,学生将会进行具体的编码实践,包括基于C语言的数据结构设计和实现、字符串处理、文件操作、网络编程等等。这些项目和实践将会提供给学生大量的机会来将所学的概念应用到具体的场景中,帮助学生更深入地理解C语言的应用。 此外,学生还将参加课堂讨论、代码评审等活动,通过这些活动来提高自己的编程能力、代码质量和团队协作能力。教师也将会给学生提供详细的反馈,帮助他们改善自己的问题和提高自己的能力。 总之,《c语言程序设计b》是一门非常重要的课程,对于学生日后从事计算机编程工作具有非常重要的意义。通过学习这门课程,学生将会大幅提高自己的编程能力、透彻理解C语言并将其应用到实际工作中。 ### 回答3: 成信大-20201学期《c语言程序设计b》是一门针对深入学习C语言的高级课程,内容涵盖了高级数据结构、算法设计、动态内存分配、文件操作等等。 在这门课程中,学生将通过实践和理论学习,掌握C语言的高级编程技巧和策略。课程的重点之一是高级数据结构,包括链表、树、哈希表、图等等,学生将深入理解数据结构的实现和应用。 除此之外,课程还将涉及算法设计和分析,学生将学习如何设计出高效的算法,并进行时间和空间复杂度分析。动态内存分配和文件操作也是这门课程的重点,这些技术对于C语言程序设计来说非常重要。 学生在课程中还将开展实践项目,以实现理论学习。通过项目实践,学生将在实际中应用学到的技术,发现其中存在的问题并解决。 总之,成信大-20201学期《c语言程序设计b》是一门非常高级的、面向深度学习的课程。通过系统学习和实践的方式,学生将深入掌握C语言的高级编程技巧。这门课程对于想要深入学习C语言的学生来说是非常重要的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

江池俊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值