学习C语言(四)———分支和循环(下)——猜数字游戏

       

目录

1.随机数生成

        1.1 rand

 1.2 srand

1.3 time

1.4设置随机数的范围

2. 猜数字游戏实现

2.1猜数字游戏

2.2 更有趣味的猜数字游戏


        掌握了前面的知识,就可以写一些稍微有趣的代码。比如:猜数字游戏。

        但是这里需要使用到几个函数,下面先来介绍一下这几个函数

1.随机数生成

        1.1 rand

        C语言提供了一个叫做 rand 的函数,这个函数可以生成随机数。rand函数需要使用到头文件 <stdlib.h>。rand 的原型如下。

int rand (void);

        rand函数生成的随机数是伪随机的,它是通过对一个叫 “种子” 的基准值进行随机运算生成的随机数。运行了一次 rand 函数之后,再次运行时就会发现值与之前的值一样,这是因为 rand 函数生成随机数的默认种子是1,如果要生成不同的随机数,就需要让种子进行变化。

 1.2 srand

        C语言又提供了一个叫做 srand 的函数,用来初始化随机数的生成器。srand 原型如下:

void srand (unsigned int seed)

        程序在调用 rand 函数之前 调用 srand 函数的参数 seed,来设置 rand 函数随机生成数的种子,但是这里又需要是 srand 的种子为随机值。

1.3 time

        因为时间是时刻发生变化的,所以在程序中我们一般使用时间来作为种子的。

        在C语言中,有一个函数叫做 time,就可以获得时间。time 函数需要使用头文件 <timer.h>。time 函数原型如下:

time_t time (time_t* timer);

        time 函数会返回1970年1月1日到程序运行时间的差值,单位是秒。返回的类型 time_t 类型本质上是32位或者64位的整型类型。

        time函数的参数 timer 如果是非 NULL 的指针的话,函数也会将这个返回的差值放在 timer 指向的内存中带回去。 如果 timer 是NULL 的话,就只返回这个时间的差值,也叫做时间戳

        time的数据类型是 time_t,用强制类型转换为 unsigned int。

1.4设置随机数的范围

        生成0-99之间的随机数。

rand()%100;    //任何数使用100取余,余数的范围都是0-99

        生成1-100的随机数,就在后面 +1.

rand()%100+1;

        生成100-200的随机数,可以使用这种格式

100 + rand()%(200-100+1);        //余数的范围是0-100,加上100后范围就是100-200
//相当于
100 + rand()%101; 

        所以生成 a-b 的随机数就是

a + rand()%(b-a+1);

2. 猜数字游戏实现

2.1猜数字游戏

        1.定义一个游戏菜单,使它可以输出游戏的菜单页面,为后续输入选择做准备。

void menu()
{
	printf("***********************\n");
	printf("****** 1.猜字游戏******\n");
	printf("****** 0.退出游戏******\n");
	printf("***********************\n");
}

       2.定义一个游戏本体。首先,,把生成的随机数赋值到变量 r 中,再定义一个猜数字的变量。通过 scanf 函数进行输入猜的数字,然后将猜的数字,和随机生成的数字进行比较,使用 if 分支来判断是猜大了、猜小了或者猜对了,最后的else语句中时两条语句,要用大括号 {} 括起来,不然程序会出错。

void game()
{
	int r = rand()%100+1;
	int guss = 0;
	while (1)
	{
		printf("请输入你猜的数字:");
		scanf("%d", &guss);
		if (guss > r)
			printf("猜大了\n");
		else if (guss < r)
			printf("猜小了\n");
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}

	}
}

        3.对 input进行赋值,输入1或者0来进行选择,输入1进行猜字游戏,输出0退出游戏。在每次进行玩游戏之后,都需要重新运行代码,比较繁琐。

        所以可以对这段代码进行循环,让玩家来进行选择。使用这里使用 do ……while 来进行循环,表达式使用变量 input  来让选择游戏的过程进行循环,当输入 0 时,表达式为 假,就可以跳出循环。

        再将之前定义的游戏菜单和游戏本体添加到do……while循环中的相应位置。

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

       

总体代码如下: 

void menu()
{
	printf("***********************\n");
	printf("****** 1.猜字游戏******\n");
	printf("****** 0.退出游戏******\n");
	printf("***********************\n");
	printf("\n");
}

void game()
{
	int r = rand()%100+1;
	int guss = 0;
	while (1)
	{
		printf("请输入你猜的数字:");
		scanf("%d", &guss);
		if (guss > r)
			printf("猜大了\n");
		else if (guss < r)
			printf("猜小了\n");
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}

	}
}

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

        执行代码效果如下:

2.2 更有趣味的猜数字游戏

         为了增加游戏的趣味性,还可以限制猜数字的次数,超过次数就失败。在游戏本体中,给一个 count 来计算猜的次数。将while循环的表达式改为 count ,在循环结尾让 count自减1,count 为0时,while循环不成立跳出循环。再用一个 if 分支来判断 count 次数是否用尽,用尽则输出正确值。再在循环最开始打印提示剩余的猜的次数。代码如下:

void menu()
{
	printf("***********************\n");
	printf("****** 1.猜字游戏******\n");
	printf("****** 0.退出游戏******\n");
	printf("***********************\n");
	printf("\n");
}

void game()
{
	int r = rand() % 100 + 1;
	int guss = 0;
	int count = 5;
	while (count)
	{
		printf("还剩下%d机会,请输入你猜的数字:", count);
		scanf("%d", &guss);
		if (guss > r)
			printf("猜大了\n");
		else if (guss < r)
			printf("猜小了\n");
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
		count--;
	}
	if (count == 0)
	{
		printf("次数用尽,游戏失败,正确的值是%d\n", r);
	}
}

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

        代码效果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值