猜数字游戏的实现

1.规则:

游戏在1-100之间随机生成数字,玩家根据游戏提示进行猜测随机生成的是什么数字,玩家共有5次机会,5次都没猜中则失败。

2.rand函数,srand函数及time函数的解读:

首先我们要明白,猜数字游戏的核心是什么,那就是猜。所以最关键的一步就是将要猜的那个数设置成随机值才行,因此为了实现运行出的数随机,就绕不开以下几个函数。

1)rand函数

(1)rand函数的原型

rand函数的原型如下:

(2)rand函数的作用

C语⾔提供了⼀个函数叫 rand,这函数是可以⽣成伪随机数的,什么叫伪随机数呢,即本次生成的随机数与下次生成的随机数相同。而调用rand函数还必须包含一个头文件#include<stdlib.h>.如图:

这是第一次生成的随机数:41

而这是第二次生成的随机数:还是41

对比两张图,可以看出,虽然第一次生成的随机数确实是随机的,但是第二次就不是了,应该说第二次生成的随机数与第一次生成的随机数相同,而之后的每一次都如此。这是为什么呢?

这是因为rand函数是对一个叫“种子”的基准数进行某种算法来生成随机数的,而rand函数生成随机数的“种子” 的默认值是1,所以每次生成随机数时“种子”都是1,这也就导致了每次生成的随机数是固定的。

所以只要改变了种子的大小,是种子一直在变化,那么随机数也就一直在变化了,因此我们不得不使用到另一个函数srand了。

2)srand函数

(3)srand函数的原型

srand函数的原型如下:

(2)srand函数的作用

srand函数的作用就是用来初始化随机数的生成器的,什么意思呢,就是说有了srand函数,我们就可以自己决定种子的大小。,通过srand函数的参数:(参数就是括号里的东西)来设置成rand函数的“种子”,但是参数是要自己设置的,这也就导致了我想在程序上打出随机数所以用了srand函数,结果括号里面还要设置随机数,根本办不到。所以前面说的只是只要种子一直在变化,而不是种子一直在随机。因此我们要将srand里面的参数设置成一个一直在变化的值即可。什么东西是一直在变化的呢,答案可能有很多,但最直观又最容易忽略的只有一个,那就是时间。

3)time函数

(1)time函数的原型

(3)time函数的作用

time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值,单位是秒。返回的类型是time_t类型的,time_t 类型本质上其实就是32位或者64位的整型类 型。time函数的参数 timer 如果是⾮NULL的指针的话,函数也会将这个返回的差值放在timer指向的内存中带回去。 如果 timer 是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳

可以看到这个时间戳是一个值,且随着时间的变化,时间戳也是在变化的,所以只要将这个时间戳返回,将时间戳作为srand函数的参数即可。则写成代码形式就是如下这样:

srand((unsigned)time(NULL))

需要注意的是:在使用time函数时也要使用一个头文件#include<time.h>

3.猜数字游戏代码的编辑

了解完了以上三个函数之后,我们就可以着手去编辑猜数字游戏的代码了。

1)首先是三个需要的头文件:

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

2)第二步

就是创建游戏的菜单,为了方便我们将菜单单独存入一个函数中,将这个函数命名为menu。

void表示这个函数没有返回值:

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

3)第三步

创建游戏界面,为了方便我们也创建一个函数来单独存放游戏实现的代码,我们将这个代码命名为game:

这个游戏界面我们一步步解读:

(1)首先定义一个随机数ret,令ret等于rand()%100 + 1,即生成1--100之间的随机数。

int ret = rand()%100 + 1;//生成随机数,想生成a-b之间的随机数公式为"a+rand%(b-a+1)"。

(2)第二步创建两个变量a,count,a是你输入的数,count是你拥有机会的次数,因为规则是有5次机会,所以我们将count定义成5。

int a = 0;
int count = 5;
printf("你共有5次机会\n");

(3)第三步创建一个循环,来判断你输入的数字是否等于它生成的随机数

​
while(count)
{
	printf("游戏开始,请输入你猜的数字:");
	scanf("%d", &a);
	if (a > ret)
		printf("猜大了\n");
	else if (a < ret)
	    printf("猜小了\n");
	else
	{
		printf("奶奶的,被你蒙对了\n");
		break;
	}
	count--;
	printf("你还有%d次机会\n", count);
}

​

(4)总代码

void game()
{
	int ret = rand()%100 + 1;
	int count = 5;
	printf("你共有5次机会\n");
	while(count)
	{
		printf("游戏开始,请输入你猜的数字:");
		scanf("%d", &a);
		if (a > ret)
			printf("猜大了\n");
		else if (a < ret)
		    printf("猜小了\n");
		else
		{
			printf("奶奶的,被你蒙对了\n");
			break;
		}
		count--;
		printf("你还有%d次机会\n", count);
	}
	
	if (count == 0)
	{
		printf("5次机会你都把握不住,废物,答案是%d\n", ret);
	}
}

4)第四步

创建主函数界面

(1)第一步就是将时间戳作为srand函数的参数

int main()
{
	srand((unsigned)time(NULL));
	return 0;
}

(2)第二步定义一个变量input,用来决定玩不玩这个游戏,因为我们一运行程序就要进入游戏菜单界面,并且玩了一次还要决定玩不玩这个游戏,所以我们使用"do while"循环,并用switch语句选择不同的结果,还要将前面创建的两个函数放入进主函数界面。综上就打出如下主函数界面:

int main()
{
	srand((unsigned)time(NULL));
	int input = 0;
	do
	{
		menu();
		printf("请选择-> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("选择错误,请选择 1 或 0\n");
			break;
		}
	} while (input);
	return 0;
}

4.猜数字游戏总代码

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu()
{
	printf("************************\n");
    printf("******* 1.play *********\n");
	printf("******* 0.exit *********\n");
	printf("************************\n");
}
void game()
{
	int ret = rand()%100 + 1;
	int a = 0;
	int count = 5;
	printf("你共有5次机会\n");
	while(count)
	{
		printf("游戏开始,请输入你猜的数字:");
		scanf("%d", &a);
		if (a > ret)
			printf("猜大了\n");
		else if (a < ret)
		    printf("猜小了\n");
		else
		{
			printf("奶奶的,被你蒙对了\n");
			break;
		}
		count--;
		printf("你还有%d次机会\n", count);
	}
	
	if (count == 0)
	{
		printf("5次机会你都把握不住,废物,答案是%d\n", ret);
	}
}
int main()
{
	int input = 0;
	srand((unsigned)time(NULL));
	do
	{
		menu();
			printf("请选择-> ");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();
			break;
		case 0:
			printf("游戏结束\n");
			break;
		default:
			printf("选择错误,请选择 1 或 0\n");
			break;
		}
	} while (input);

	return 0;
}

5.谢谢观看,有错或遗漏请指出

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值