猜数字游戏

准备工作

猜数字游戏,顾名思义就是系统生成一个随机数,玩家需要在规定时间内猜出正确答案。那我们思考以下问题:

1.随机数如何生成?数字的范围怎么确定的?

2.如何规定玩家的最大输入次数?

3.内部的代码是怎样进行判断运行的?

随机数的生成

假设我们规定这个游戏中的随机数产生于1到100之间。想获得一个随机数,就需要用到rand函数。补充一点:如果我们需要使用rand函数的话,必须引用新的头文件stdlib.h。那我们先来试用一下:

不难发现,虽然生成的数字式随机的,但是前后两次生成的数字是一模一样的,假如玩家想多次进行游戏,显然这样的随机数是不行的,每次的最终结果都会一样。为什么会这样呢?因为rand生成一个随机数的原理是里面有一个生成随机数的种子,而rand函数运行时默认的种子为1。自然随机数也就不会改变了。那么我们该如何解决这样的困难呢?

再引入了一个srand函数,用于初始化随机数,相当于在rand里埋下不同的种子,最终生成的随机数就会不同。

void srand (unsigned int seed);

那我们思考一下,什么东西是一直在变化的?不难想到是时间吧。恰好在c语言中有一个函数就叫做time。原型:

time_t time(time_t*timer)

如果timer是NULL,time返回的时间差就叫做时间戳。同时,使用该函数时也需要定义一个新的头文件:time.h。带入之前的代码有:

可以发现,前后两次打印出来的随机数是不同的,至此,我们便完成了随机数生成。

随机数范围设置

0到99:

rand()%100  //余数的范围是0到99

1到100:

rand()%100+1;      //0到99后余数值各加1

100到200:

100+rand()%(200-100+1)  //余数的范围是0到100,加上100后变成100到200

以此类推,a到b:

a+rand%(b-a+1)

ok,范围的问题解决了

代码实现

定义game函数

void game();
{
	int r = rand() % 100 + 1;
	int guess = 0;
	int count = 8;
		while(count)
		{
			printf("你还有%d次机会\n",count);
			scanf("%d",&guess);
			if (r < guess)
			{
				printf("猜小了\n");
			}
			else if(r>guess)
			{
				printf("猜大了\n");
			}
			else
			{
				printf("猜对啦!\n");
				break;
			}
			count--;
		}
		if (count == 0)
		{
			printf("次数耗尽,挑战失败。正确答案是%d\n", r);
		}
}

利用多次循环,判断是否猜对。用来输出游戏的结果,游戏的内核就已经基本实现,接下来我们要做一个菜单,询问玩家是继续play还是选择退出游戏。

菜单的实现

直接打印要输出的内容就好了。

判断是否进行下一次游戏

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));
	do
	{
		menu();
		printf("请选择是否继续进行游戏:");
		scanf("%d",&input);
		switch (input)
		{
		case 1:game();
			break;
		case 0:printf("游戏结束\n");
			break;
		default:printf("输入错误,请重新选择!");
			break;
		}
	} while (input);
	return 0;
}

利用上一期讲的do while循环可以很好的执行这个程序。srand函数定义时间戳,给rand函数埋下了不同随机数的种子。至此,所有的代码编译完成,接下来是完整代码。

完整代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

	void game()
	{
		int r = rand() % 100 + 1;
		int guess = 0;
		int count = 8;
			while(count)
			{
				printf("你还有%d次机会\n",count);
				scanf("%d",&guess);
				if (r < guess)
				{
					printf("猜大了\n");
				}
				else if(r>guess)
				{
					printf("猜小了\n");
				}
				else
				{
					printf("猜对啦!\n");
					break;
				}
				count--;
			}
			if (count == 0)
			{
				printf("次数耗尽,挑战失败。正确答案是%d\n", r);
			}
	}
	void menu()
	{
		printf("***********输入1继续游戏*********\n");
		printf("***********输入0退出游戏*********\n");
	}
	int main()
	{
		int input = 0;
		srand((unsigned int)time(NULL));
		do
		{
			menu();
			printf("请选择是否继续进行游戏:");
			scanf("%d",&input);
			switch (input)
			{
			case 1:game();
				break;
			case 0:printf("游戏结束\n");
				break;
			default:printf("输入错误,请重新选择!");
				break;
			}
		} while (input);
		return 0;
	}

感兴趣的小伙伴可以自己上手试试,可以让我们更好的理解循环语句的使用哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值