代码分享(2)c语言的100以内猜数字游戏实战

(1.)所需函数

在猜数字游戏中我们要实现的几个功能分别是,生成随机数,玩家输入数字,判定数字是否为随机数,若是则打印“猜对了,游戏胜利”,若猜的数字比随机数大那么打印“猜大了”,若猜的数字比随机数小那么便打印“猜小了”,除此之外还需添加计步的概念,玩家每猜一次次数便减一,那么理论存在,实践开始。

在这其中我们需要用到一个名为rand的

函数,rand函数的作用便是生成随机数,它的头文件是<stdlib.h>,并且它的随机数生成范围在0~32767之间。

它的定义是生成一个伪随机数,为什么要说是伪随机数呢?因为一个rand函数的本质是对一个种子的基准值进行运算生成,这就是说明rand函数生成的随机数并不随机,所以我们需要另一个函数来对rand函数的种子进行初始化。

那么这个函数是什么呢?是srand函数:

srand函数格式为:void srand(unsigned int seed);

程序调用中rand函数先调用srand函数,通过srand函数的参数seed来设置rand函数的生成随机值的种子,只要种子变化则生成的随机数序列也会变动,也就是说,若srand函数的种子随机那么rand函数的值也同样随机,我相信有聪明的读者已经看出了问题,生成随机数也同样需要随机数这个概念就自相矛盾,那么我们就又需要一个随机数函数来拯救这段逻辑失误。

这个函数就是time函数,time函数头文件是<time.h>

格式为time_t time(time_t*t); time函数会返回一个当前日历时间的一个时间戳,即是从1970年0时0分0秒到现在的时间差值。

(2.)程序实现

解决了随机数和函数的问题,我们就该实战了,可是一个新的问题又出现了,rand函数返回的随机数太随机也太大了,我们有没有什么办法可以让rand函数只生成100以内的随机数,这样当然可以,只要将rand函数生成的随机值%上100加上1,即:rand()%100+1;便可以生成100以内的随机数。

首先我们打印出菜单栏

即:

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

然后开始编出游戏的主体部分,也就是猜数字的实现:
 

void game()
{
	int a = rand() % 100 + 1;
	int guess = 0;
	int count = 5;
	while (count)
	{
		printf("你还有%d次机会\n", count);
		printf("请猜数字>:");
		scanf("%d", &guess);
		if (guess < a)
		{
			printf("猜小了\n");
		}
		else if (guess > a)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了,数字是:%d\n",a);
			break;
		}
		count--;
		}
	if (count == 0)
	{
		printf("你失败了,正确值为%d\n", a);
	}
}

实现计步的原理很简单,那就是循环,我们定义一个count来进行计步计算,首先给出count的初始值也就是玩家有多少次机会,然后每循环一次初始值便减一,直到为0,则玩家挑战失败,而且我们在每回合开始时便打印出count来告诉玩家还有多少次机会。

最后就是主函数的构建,主函数的构建比较简单,因为游戏部分已经写好,我们只需要调用即可。

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("选择错误,请重新选择。\n");
			break;
		}
	} while (input);
	return 0;
}

最后我们使用do while循环,以保证玩家玩完一次之后还可以继续选择重新再来一次。

那么最后的程序便是:
 

#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 a = rand() % 100 + 1;
	int guess = 0;
	int count = 5;
	while (count)
	{
		printf("你还有%d次机会\n", count);
		printf("请猜数字>:");
		scanf("%d", &guess);
		if (guess < a)
		{
			printf("猜小了\n");
		}
		else if (guess > a)
		{
			printf("猜大了\n");
		}
		else
		{
			printf("恭喜你,猜对了,数字是:%d\n",a);
			break;
		}
		count--;
		}
	if (count == 0)
	{
		printf("你失败了,正确值为%d\n", a);
	}
}
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("选择错误,请重新选择。\n");
			break;
		}
	} while (input);
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值