C 语言之猜数字游戏

写一个猜数字游戏,要求

1. 电脑随机生成1—100的随机数

2.玩家猜数字,猜数字的过程中根据猜测数字的大小给出大了或小了的反馈,直到猜对,游戏结束

首先关于生成随机数,先介绍一个函数——int rand(void),首先它会生成一个伪随机数,这个数的范围为0~RAND_MAX(其实是32757,取决于编译器),使用时需要包含头文件<stdlib.h>。

#include <stdio.h>
#include <stdlib.h>
int main()
{
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

先运行一次,再运行一次 

我确实是运行了两次,可是这两次结果都是一样的。所以才说rand函数生成的函数是伪随机数。rand函数是对一个叫“种子”的基准值进行运算生成的随机数,之所以前面的运算结果是一样的,是因为rand函数生成随机数的默认种子是1。所以我们要生成不同的随机数,就要让种子变化。

这时候就要用到void srand(unsigned int seed)函数,去初始化设置那个随机数的生成器。 

电脑上的时间 时刻都在发生变化,那么可以利用时间做这个种子,只要时间在变化,种子就在变化,下一次生成的随机数就会变化。接下来还要介绍一个概念—时间戳,其实就是这个时间和计算机的起始时间之间的差值以秒为单位。 C语言中有个time函数,可以返回时间戳的值。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	srand((unsigned int)time(NULL));//srand需要一个无符号的整型,就强制类型转换
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	printf("%d\n", rand());
	return 0;
}

可以自己运行一下,是不一样的。

接下来是控制范围。如果要生成1~100的随机数:rand()%100+1,如果要生成100~200的随机数:100+rand()%(200-100+1) ,所以如果要生成a~b的随机数:a+rand()%(b-a+1)。而当我们玩了一次这个游戏后觉得不过瘾想再来几次,就可以使用循环结构,可以选择用do-while循环先打印一个菜单,再利用switch语句根据所选内容给出相应功能。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
	int input;
	do
	{
		printf("*****************\n");
		printf("******1.play******\n");
		printf("******0.exit******\n"); 
		printf("*****************\n");
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("猜数字游戏\n");
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);

	return 0;
}

 接下来就是猜数字的主体。首先猜数字可能要猜很多次,所以需要循环,猜的数字可能会大也可能会小 ,所以要有选择结构,可以使用if语句,最后猜出数字了,就没必要继续下去了,需要跳出循环,再根据上面讲到的生成随机数的知识,就可以写出如下代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
	//1.生成随机值
	int r = rand() % 100 + 1;
	//2.猜数字
	int gess = 0;
	while (1)
	{
		printf(" 请猜数字:>");
		scanf("%d", &gess);
		if (gess > r)
			printf("猜大了\n");
		else if (gess < r)
			printf("猜小了\n");
		else
		{
			printf("恭喜你猜对了\n");
		    break;
		}
	}
}
int main()
{
	int input;
	srand((unsigned int)time(NULL));

	do
	{
		printf("*****************\n");
		printf("******1.play******\n");
		printf("******0.exit******\n"); 
		printf("*****************\n");
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("猜数字游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);

	return 0;
}

我自己猜了几次就对了 ,还是蛮有意思的。

当然如果是无限制的猜下去直到猜对那可能没那么有意思,于是我们可以再加上次数限制:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void game()
{
	//1.生成随机值
	int r = rand() % 100 + 1;
	//2.猜数字
	int gess = 0;
	int count = 5;
	while (count)
	{
		printf("剩下%d次机会", count);
		printf(" 请猜数字:>");
		scanf("%d", &gess);
		if (gess > r)
			printf("猜大了\n");
		else if (gess < r)
			printf("猜小了\n");
		else
		{
			printf("恭喜你猜对了\n");
		    break;
		}
		count--;
	}
	if (count == 0)
		printf("很遗憾,游戏失败\n");
}
int main()
{
	int input;
	srand((unsigned int)time(NULL));

	do
	{
		printf("*****************\n");
		printf("******1.play******\n");
		printf("******0.exit******\n"); 
		printf("*****************\n");
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("猜数字游戏\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,重新选择\n");
			break;
		}
	} while (input);

	return 0;
}

 

OK本次的猜数字游戏就介绍到这里了,下来希望大家可以多敲多练,才可以掌握。

拜拜。 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值