用c语言写出猜数字游戏

产生随机数

基本思路

这里介绍一个库函数rand函数,他是专门用来产生随机数的。其对应的头文件是stdlib.h

但是,我们可以在vs中打印随机数时,发现其每次打印出来的几个数字是一样的,那这就不可以算作真正的随机数,所以仅仅靠rand函数生成的只是伪随机数。

这其中原因是什么呢?是因为rand函数是根据一个基准数叫做“种子”来进行运算生成的随机数,因为其默认种子是1。

所以如果想生成真正的随机数,就必须要种子发生变化。

由此我们有了srand函数,他是用来初始化随机数生成器的,其格式为void srand(unsigned int seed)。但是呢,我们要让srand里面的数在变化,该怎么办呢?

这就来到了time函数,我们通常使用时间戳来作为种子。这个时候,我们就要用到time函数了。其对应的头文件是time.h,当我们要使用这个函数时,通常写为time(NULL)。

即在使用rand函数之前调用一下srand函数即可。这样生成一个随机数就基本完成了。

值得注意的是,time返回的有符号数,而srand要求无符号整数,所以我们通常要用强制类型转换来避免警告。

产生a~b的随机数

接下来,因为rand产生的随机数上限很大,但是我们猜数字以及通常情况只会用到一百个或者几百个数字。那么,产生一定范围内的随机数该怎么办呢?

比如说,我们生成0~99的随机数,这个应该很容易就想到取余数即可即rand()%100,如果生成0~100呢,我们可以这样写rand()%(100-0+1)。以此类推,我们推出求a~b的随机数的通用示子,即a+rand()%(b-a+1)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
	srand((unsigned int)time(NULL));
	printf("%d\n",1+ rand()%100);
	printf("%d",1+ rand()%100);
	return 0;
}


 

以上,是我进行两次的打印,大家看到我们成功的产生了随机数。那么我们的第一步就捋清楚了。

编程序

首先,一个游戏进去应该第一个就是菜单menu,选择玩or不玩。这个程序里面肯定要用到循环,这种情况我们应该选择哪一个呢,大家可以看我的http://t.csdnimg.cn/quXD8 这个博客,里面讲到了此时什么都不管就要显示出来一个menu应该用到do while循环。

接下来让我们开始一步步写程序。

一确认大体

现在我们写出生成随机数的srand,do while循环,和menu这个函数。

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
	printf("***************");
	printf("****1.begin****");
	printf("****0.exit *****");
}
int main()
{
	srand((unsigned int)time(NULL));
	do
	{
		menu();
	} while ();
	return 0;
}

二进入游戏前的part

接下来,我们要输入1或者0,所以设一个input变量,从键盘上输入。输入之后,我们有三种情况。1,0或者其他数。大家想到要用什么了吗?是的,我们接下来要用到switch语句。

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	
	do
	{
        menu();
        printf("请输入:>");
	    scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

注意,while后面的判断条件哦。只有当它为0的时候,才会终止循环。这里,输入1后我们就要进入游戏啦,接下来就是咱们游戏game函数的编写。

三game函数

接下来,就是最后的部分,来写猜数字这个游戏的代码。首先,我们生成随机数,注意rand函数要在game函数里面,而调用srand只用调一次,故在主函数里面。生成随机数后,我们就要猜数字了。先定义一个变量guess,来接受键盘上的输入。然后呢,这里依然肯定又要用循环,因为现在这个猜数字游戏的最终是只有当你才出来是什么的时候,你才可以结束循环,故这里我们写一个死循环,让他恒为真,只有猜对了才用break来结束循环,所以大家应该有大体轮廓了吧。

void game()
{
	int guess = 0;
	
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("你猜的数字是:>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("哇塞,猜对了,数字就是:%d\n", ret);
			break;
		}
	}
}

这里就是我们game函数的内容。把内容合在一起,我们这个初版猜数字游戏就编写完成了。大家都来玩一玩自己编的这个小游戏吧。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void game()
{
	int guess = 0;
	
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("你猜的数字是:>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("哇塞,猜对了,数字就是:%d\n", ret);
			break;
		}
	}
}
void menu()
{
	printf("***************\n");
	printf("****1.begin****\n");
	printf("****0.exit ****\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	
	
	do
	{
		menu();
		printf("请输入:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

上面是我玩的,哈哈哈哈。

根据这个,我们可以再精进一下,给定有限次数,在有限次数里面每次没猜出来的话,就挑战失败。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void game()
{
	int guess = 0;
	int count = 5;
	int ret = rand() % 100 + 1;
	while (count)
	{
		printf("你还有%d次机会\n", count);
		printf("你猜的数字是:>");
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了\n");
		}
		else if (guess > ret)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("哇塞,猜对了,数字就是:%d\n", ret);
			break;
		}
		count--;
	}
	if (0 == count)
	{
		printf("很遗憾,五次机会使用完,挑战失败,不要伤心,随机数是:%d\n", ret);
	}
}
void menu()
{
	printf("***************\n");
	printf("****1.begin****\n");
	printf("****0.exit ****\n");
}
int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	
	
	do
	{
		menu();
		printf("请输入:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误,请重新输入\n");
			break;
		}
	} while (input);
	return 0;
}

 

哈哈,这次运气很好哦。

总结

现在,我们就用c语言的一些简单知识写出了一个游戏。希望我们都可以去试试看。看了就给我这个普普通通女大学生初学c语言者点个赞吧!

最后,祝我们都可以“码”思泉涌,下“指”如有神。 

  • 42
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值