`
tianshi_kco
  • 浏览: 22481 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

c语言之猜数字游戏

 
阅读更多

很久之前我就先自己编写猜数字这个小游戏。这里先附上我从百度百科搜到对猜数字的规则。

游戏规则如下:

通常由两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜的人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。

  如正确答案为 5234,而猜的人猜 5346,则是 1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为 2B,合起来就是 1A2B。

  接着猜的人再根据出题者的几A几B继续猜,直到猜中(即 4A0B)为止。

百度百科链接如下http://baike.baidu.com/view/358630.htm

规则明白之后,其实我们要做的事情就很明确了。

第一步:我们就是要让计算机随机产生一个0-9不重复的4位数

第二步:我们要输入自己所猜的4个0-9不重复的数字

第三步:判断我们所猜的数字和计算机随机的数字是否吻合,如果不为4A0B,返回第二步

思路明确之后,就是尝试这这些思路转化为c语言,用c语言的方式表达出来。

现在我们来完成第一步,第一步比较简单。我们可以使用rand()来产生一个随机数,不过由于这个函数产生的随机数为一个伪随机数,所以我们必须在一句srand(time(NULL));具体为什么,百度上有很多,我就不再阐述了。不过读者可以下载我的程序,试试把这句话去掉有什么不一样,一试便知。在生产随机数时,我们还要确保所生成的随机数,不能用重复数字,具体实现代码如下。

void getTheGuessNum()
{
	int i,j;
	int flag = 0;		//是否有数字重复标记位。
	srand(time(NULL));
	for (i = 0;i < 4;)
	{
		guess_num[i] = rand() % 10;	//产生0-9的随机数
		for (j = 0;j < i;j ++)
		{
			if (guess_num[j] == guess_num[i])	//四个数字有重复,退出内嵌for
			{
				flag = 1;
				break;
			}
			flag = 0;
		}
		if (flag == 0)	//如果没有重复值,i++,生成下一个随机数
		{
			i++;
		}
	}
}
【注】guess_num为一个全局数组变量。

第一步实现了,我们就要进行我自认为最难得一步了。那就是输入四个数字。也许有朋友会笑我,不就是输入4个数字而已吗?使用scanf函数不就完事了吗?被你的那么难,你是唬人的吧!对于那些初学者来说,他们很有可能编写如下的程序:

int num1,num2,num3,num4;
scanf("%d%d%d%d",&num1,&num2,&num3,&num3);


对于学过数组的朋友来说,他们可能会这样写


int num[4],i;
for(i = 0;i < 4;i ++)
  scanf("%d",&num[i]);


你说以上代码有问题。确实,以上代码没有什么问题,不过那是在对于完完全全输入正确的基础上而言的。不理解我这句话的意思。那我就写一个小程序给你们瞧瞧(其实我也是菜鸟,高手看到请不要喷我)

#include <stdio.h>

void main()
{
	int a;
	printf("请输入一个数字:");
	scanf("%d",&a);
	printf("a = %d\n",a);
}

以上这么一个程序,大家看看有没有错误。其实我可以很负责的告诉大家,这段代码完全没有任何错误的。如果在输入一个数字的情况下,完全可以打印出a的值。那如果就是有人存心搞怪,输入一个非数字的情况下会这么样呢?不要认为这是不可能的事。假如,我输入hgj,那么a的值会为多少呢?截图如下:

至此,大家明白我要表达的意思了没有?不明白的话,请从头看。哈哈。。。。如果明白了,则请继续看下去。

如果大家明白了问题所在,那么这个问题要如何解决了?如果我告诉大家我在输入4个数字压根没有使用scanf()函数,大家会相信吗?其实我使用的函数为getchar()。大家看到这个函数的时候,应该会感到很奇怪,这个函数不是用于输入一个字符的吗?怎么可以用来输入4个数字呢?其实我在写第一个程序的时候确实是使用scanf()函数,代码如下

int inputTheNum()
{
	int i,j;
	for(i = 0;i < 4;)
	{
	//	printf("请输入第%d个数字:",i);
		if(scanf("%d",&input_num[i]) == 1)		//输入正确
		{
			i ++;
		}
		else					//输入错误
		{
			fflush(stdin);		//清除输入内容
			return 3;
		}
	}
	for(i = 0;i<4;i ++)
	{
		if(input_num[i] < 0 || input_num[i] > 9)
			return 2;
		for(j = 0;j < i; j ++)
		{
			if(input_num[j] == input_num[i])
			{
				return 1;
			}
		}
	}
	return 0;
}

scanf()是有返回值的,具体可以查看百度百科http://baike.baidu.com/view/1390039.htm,这里我也不想说太多了。我刚刚开始这样写有一个坏处,那就是我输出4个数字的时候必须用空格或者回车或者tab键分开,只是是太麻烦。因为这几个数字都是一位数的。有时候我想输入1234结果我输入1234之后回车,但是函数inputTheNum()就只把1234保存在input_num的第一个元素里。这时候我又不得不输入另外3个数字。虽然我知道我这是在做无用功,不过我没办法。因为我就想改近一下这个函数,最后我使用如下的方法:

typedef enum
{
	SUCCESS,
	ILLEFAL_CHAR,
	NUMBER_REPEATED,
	NUMBER_BEYOND,
	NUMBER_WITHIN
}return_type;
int inputTheNum()
{
	int temp;
	int count = 0;
	int i,j;
	while(1)
	{
		temp = getchar();
		if (temp == '\n')
		{
			break;
		}
		else if (temp >= '0' && temp <= '9')
		{
			if (count < 4)
			{
				input_num[count] = temp - 0x30;
				count ++;
			}
			else
			{
				while(getchar() != '\n');
				return NUMBER_BEYOND;
			}
		}
		else if(temp == ' ' || temp == '\t')
		{
			continue;
		}
		else 
		{
			while(getchar() != '\n');
			return ILLEFAL_CHAR;
		}
	}
	if (count != 4)
	{
		return NUMBER_WITHIN;
	}
	for(i = 0;i<4;i ++)
	{
		for(j = 0;j < i; j ++)
		{
			if(input_num[j] == input_num[i])
			{
				return NUMBER_REPEATED;
			}
		}
	}
	return SUCCESS;
}


如果我输入的是回车键,那么我就结束这次输入。如果我输入的空格或者tab键,我将忽略这次输入。如果我输入的字母或者符号,我则返回一个错误信息。如果我输入的是一个字符'0'-'9',我就将其转为为数字0-9之后保存在数据里。如果输入的数字的过多或者过少,我都将返回相应的信息。至此,输入过程就完成了。

接下来的一步,比较简单,那就是比较输入的数字和计算机所给的数字。看看答案是几AB

具体算法如下:


void comparisonTheNum()
{
	int i,j;
	for(i = 0; i < 4; i ++)
	{
		for(j = 0;j < 4; j ++)
		{
			if(input_num[j] == guess_num[i] && i == j)
			{
				A_num ++;
			}
			else	if(input_num[j] == guess_num[i])
			{
				B_num ++;
			}
		}
	}
}


这个算法很简单,不再说明。

整个猜数字的主要三个子函数已经实现,那么主函数,也就清晰明了。这里也不再讲述。实在不知道怎么写的人,可以参考我的资料。http://download.csdn.net/detail/tianshi_kco/4605873


分享到:
评论

相关推荐

    c语言练习 猜数字游戏

    《C语言猜数字游戏详解与实践》 C语言是一种经典的编程语言,因其简洁高效而深受程序员喜爱。在学习C语言的过程中,通过编写实际的游戏程序,能够加深对语法、逻辑控制和函数运用的理解。这里我们将详细解析一个...

    C语言猜四个数字游戏

    【C语言猜四个数字游戏】是一款经典的编程...通过学习和实现这个C语言猜数字游戏,不仅可以巩固基础的编程技能,还能提升逻辑思维和问题解决能力。同时,这也是一个很好的实践项目,有助于理解和掌握C语言的关键概念。

    c语言实现猜数字小游戏

    C语言实现猜数字小游戏 本文将对C语言实现猜数字小游戏进行详细的讲解,并对该游戏的实现原理、代码分析和相关知识点进行详细的解释。 游戏概述 C语言实现猜数字小游戏是一个简单的命令行游戏,游戏的目的是猜测...

    用C语言编写的猜数字游戏

    【标题】"用C语言编写的猜数字游戏"是一个经典的编程练习项目,它涉及到了C语言的基本语法、随机数生成、循环控制结构以及条件判断等多个关键知识点。这个游戏的核心是计算机生成一个四位数字,然后让用户尝试猜测这...

    基于C语言的猜数字游戏源码.zip

    基于C语言的猜数字游戏源码.zip基于C语言的猜数字游戏源码.zip基于C语言的猜数字游戏源码.zip基于C语言的猜数字游戏源码.zip基于C语言的猜数字游戏源码.zip基于C语言的猜数字游戏源码.zip基于C语言的猜数字游戏源码....

    简单c语言实现猜数字游戏

    【标题】:“简单c语言实现猜数字游戏” 在这个项目中,开发者使用C语言编写了一个猜数字游戏,旨在帮助初学者理解和应用C语言的基本概念。这个游戏的界面设计得相对简洁,但不失吸引力,对于大一上学期的学生来说...

    猜数字游戏C语言

    用C语言编写的猜数字小游戏,可以实现选择难度,选择输入次数的程序,供大家分享。

    C语言编写的猜数字游戏

    【标题】:“C语言编写的猜数字游戏” 在这个项目中,我们主要探讨的是如何使用C语言来编写一个猜数字的游戏。C语言是一种基础且强大的编程语言,尤其适用于系统级编程和底层开发。在这个游戏中,玩家将与计算机...

    C语言猜数字游戏

    【C语言猜数字游戏】是基于C编程语言开发的一个简单互动游戏,它的设计灵感来源于经典的数字猜测游戏。这个游戏的核心逻辑是计算机随机生成一组特定数量(在这个案例中是4个)的不重复数字,然后玩家尝试猜测这些...

    C语言 猜数字游戏 源代码

    《C语言实现猜数字游戏详解》 在编程学习过程中,编写简单有趣的游戏代码是一种极好的实践方式,可以加深对编程语言的理解。本文将详细介绍利用C语言实现的猜数字游戏,包括其核心功能模块和排行榜系统。 猜数字...

    C语言实现 猜数字 游戏程序

    在本项目中,我们关注的是使用C语言实现的猜数字游戏。C语言是一种基础且强大的编程语言,适合初学者和专业开发者用来编写各种类型的程序,包括游戏。猜数字游戏是一种简单而有趣的互动游戏,玩家需要根据计算机随机...

    C语言猜数字游戏代码

    【C语言猜数字游戏代码】是一个经典的编程练习项目,它能帮助初学者更好地理解C语言的基本语法、控制结构以及函数的使用。在这个游戏中,计算机随机生成一个数字,玩家需要通过输入猜测这个数字,然后程序会根据玩家...

    用C语言编写的猜数字小游戏

    猜数字游戏是一款经典的小游戏,玩家需要在一定次数内猜测计算机随机生成的一个数字。这个游戏简单有趣,同时也包含了编程中的基本概念,如随机数生成、循环控制、条件判断等。 首先,我们来看C语言如何生成随机数...

    c语言 之 猜数字 源程序

    不过,鉴于这是一个简单的猜数字游戏,代码很可能是基于C语言标准的,只是使用了C++的编译器。 在这个游戏中,主要涉及以下几个C语言知识点: 1. **随机数生成**:为了生成一个让玩家猜测的数字,程序会使用`...

    基于C语言的猜数字游戏源码

    ### 基于C语言的猜数字游戏源码解析 #### 一、程序概述 本文将详细介绍一个使用C语言编写的猜数字游戏源代码。该程序不仅为学习者提供了实践C语言编程的机会,还能够帮助大家理解游戏逻辑及基本算法的应用。 ####...

    通过C语言编写的猜数字游戏

    《C语言实现的猜数字游戏解析》 猜数字游戏是一种简单而有趣的编程实践项目,它可以帮助初学者更好地理解和运用C语言的基本概念。在这个游戏中,计算机随机生成一个四位数,然后玩家根据提示信息来猜测这个数字。...

    C语言猜数字小游戏

    根据给定的文件信息,我们可以总结出以下关于“C语言猜数字小游戏”的相关知识点: ### 1. 游戏概述 该游戏是一款简单的基于C语言的猜数字小游戏,适合初学者学习和理解C语言的基本语法与逻辑控制。游戏的核心是...

    猜数字游戏 c语言实现 猜4位随机生成的数 每次给猜测提示直到猜对 包含程序流程图

    在这个C语言实现的猜数字游戏中,玩家需要猜一个由计算机随机生成的四位整数。游戏的核心在于算法设计和用户交互,下面将详细讲解这个过程。 首先,我们需要理解C语言的基础语法,包括变量定义、条件判断(if语句)...

    C语言游戏猜数字(有音乐)

    在C语言的学习过程中,接触最多的就是黑乎乎的DOS窗口,这也是在消磨学习者的兴趣,学到最后可能还不知道C语言到底能做什么,难道就是输入输出数据吗?当然不是,C的用处很广泛,这里里说一下加音乐的方法。

Global site tag (gtag.js) - Google Analytics