【C语言趣味游戏】猜数字

要求:
1)电脑会生成一个随机数
2)玩家猜数字,若猜的比生成的随机数大,系统会提示“猜大了”;同理猜小也是,直到猜对.

首先,我们得知道C语言生成随机数的操作.这与rand()函数、srand()函数、time_s()函数相关.
rand()函数:
函数原型:
int rand(void);它返回的类型为整型,且包含在头文件stdlib.h中.但当我们写出如下代码:

int main()
{
    int num = 0;
    int i = 0;
    for (i = 0; i < 10; i++)
    {
        num = rand();
        printf("%d ", num);
    }
    return 0;
}

但我们不同时间运行多次,都是如下结果:在这里插入图片描述
所以rand()函数并不是生成随机数的函数,甚至我们可以预测它的随机序列.

  • 为什么每次生成的数字是固定的?
    rand()函数每次生成的数字与所谓的"种子"有关.使用rand()函数之前要使用srand()函数进行种"种子".若没有使用srand()函数,系统会默认给1,导致每次生成随机数一样.
    srand()函数:
    函数原型:
 void srand(unsigned seed);//unsigned seed无符号种子

但当调用srand()函数传入一个种子时,这样生成随机数仍是固定的(因为种子不变,类似系统默认给的1).

解决方法:将系统时间作为种子,因为以系统时间为种子,达到不同的结果(时间是一直在改变的)。

时间函数time(): 利用时间函数time()获取系统时间(其返回值time_t一定是数值类型)。time()的参数是一个time_t类型对象的地址,时间值则存储在该地址中。time(NULL)和time(0)返回的是系统的时间,从1970年1月1日0点0分0秒算起,单位为秒,包含在头文件time.h中。 综上得出:srand((unsigned)time(NULL));
由上得:
在这里插入图片描述
在这里插入图片描述
至此,生成随机数的任务就完成啦!

那该如何固定随机数的范围呢?
常用方法:随机数取模+1(比如随机数%100,结果在0-99之间,加1后便在1-100之间)

代码实现如下:

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()//关于菜单的函数
{
	printf("***********************************\n");
	printf("**** 1.进入游戏     0.退出游戏 ****\n");
	printf("***********************************\n");
}

void game()//关于游戏实现的函数
{
	int guess = 0;
	int ret = rand() % 100 + 1;//生成1-100的随机数
	int count = 1;//计数变量来实现猜数字次数
	printf("游戏开始,你有10次机会,请猜数字:>\n");

	while (1)
	{
		scanf("%d", &guess);
		if (guess < ret)
		{
			printf("猜小了,你还有%d次机会\n",10-count);
			count++;
		}
		else if (guess > ret)
		{
			printf("猜大了,你还有%d次机会\n",10-count);
			count++;
		}
		else
		{
			printf("恭喜你,用了%d次猜对了\n",count);
			system("pause");
			system("cls");
			break;
		}
		if (11 == count)//count从1加起,加10次1是11
		{
			printf("猜数字次数用尽,游戏失败\n");
			system("pause");
			system("cls");
			break;

		}
	}
}

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

其中,system(“pause”)可以实现冻结屏幕;system(“cls”)可以实现清理屏幕。
在这里插入图片描述
通过游戏的技巧就是二分查找法!

  • 13
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大猩猩!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值