C语言超详细讲解猜数字游戏的实现

 更新时间:2022年07月14日 10:03:23   作者:白朝槿kk  
现在很多游戏都有抽奖抽卡的功能,其实这个就类似于猜数字,生成一个随机数,然后你去猜,猜对了就得奖。猜到一定次数就会保底。要实现猜数字的小游戏,首先是要让程序生成随机数,这就要用到rand、srand和time这三个函数,其次要了解时间戳
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

rand函数

先看一下下面这张图:

通过这张图我们可以了解到rand函数的返回值是int类型,形参为空,它的头文件<stdlib.h>以及它的返回值范围是0到RAND_MAX. 而RAND_MAX在VS中是0x7fff,转换成二进制就是32767.所以rand返回的随机数的范围就是0到32727。

其实我们用rand函数就可以生成随机数了,那为什么我们还要用到srand函数呢?

因为只有第一次生成的随机数是随机的,如果程序执行多次,那第二次之后生成的随机数就会和第一次生成的一样。这是一种伪随机。

因此只用到rand函数是不够的,我们要用rand函数之前,先用strand函数。

srand函数

看一下strand函数,返回值为void,形参是int类型的数据,要用strand函数,首先要给strand传一个int类型的数据,根据传进去的值不同,生成的随机数也不同。但是这样就矛盾了。生成一个随机数之前首先要传进去一个随机数,为了解决这个问题,就要使用时间戳。

时间戳

我们无法给它一个随机数,但是我们可以用时间作为参数传进去,时间是变的,这样生成的随机数也就是变的。怎么获得时间戳呢?C语言也为我们提供了一个time函数可以帮助我们获得时间戳。

time的头文件是<time.h>,time的函数原型有点复杂,看不懂没关系,会用就行。我们只是要把time的值作为参数传给strand函数。strand的形参是unsigned int类型的,而time的返回值是time_t类型的,我们可以强制类型转换。time的形参是指针类型的参数,我们用NULL就可以了。

srand((unsigned int)time(NULL));

解决完这个问题,我们还要解决rand生成随机数的范围的问题,我们如果要获得一个1~N之间的数的话,就要对生成的随机数对N进行取余+1.为了方便猜数字,生成的随机数范围就控制在1到100.猜数字不是一次就能才对的,猜不对就要一直猜,猜对了才退出。下面是完整代码。

完整代码与程序运行图

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("|-------------------|\n");
	printf("|-----1.玩游戏------|\n");
	printf("|-----0.退出--------|\n");
	printf("|-------------------|\n");
}
void game()
{
	int ret = rand()%100+1;
	int m = 0;
	while (1)
	{
		scanf("%d", &m);
		if (m > ret)
		{
			printf("猜大了!\n");
		}
		else if (m < ret)
		{
			printf("猜小了!\n");
		}
		else
		{
			printf("恭喜你,猜对了!\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int n = 0;
	do
	{
		menu();
		printf("请选择:");
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			printf("开始猜数字\n");
			game();
			break;
		case 0:
			printf("已退出\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while(n);
	return 0;
}

程序运行图如下:

到此这篇关于C语言超详细讲解猜数字游戏的实现的文章就介绍到这了,更多相关C语言猜数字游戏内容请搜索程序员之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持程序员之家!

相关文章

  • C语言循环控制入门介绍

    C语言循环控制入门介绍

    大家好,本篇文章主要讲的是C语言循环控制入门介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • C语言 OpenCV实现柱面投影

    C语言 OpenCV实现柱面投影

    在做全景拼接的时候,为了保持图片中的空间约束与视觉的一致性,需要进行柱面投影,否则离中心图像距离越远的图像拼接后变形越大。本文将具体介绍一下这如何实现,需要的可以参考一下
    2021-12-12
  • 自己实现strcpy函数的实现方法

    自己实现strcpy函数的实现方法

    本篇文章介绍了,自己实现strcpy函数的实现方法。需要的朋友参考下
    2013-05-05
  • OLEDB打开Excel文件的实现方法

    OLEDB打开Excel文件的实现方法

    下面小编就为大家带来一篇OLEDB打开Excel文件的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • 使用C语言构建基本的二叉树数据结构

    使用C语言构建基本的二叉树数据结构

    这篇文章主要介绍了使用C语言使用C语言构建基本的二叉树数据结构,包括根据前序序列和中序序列构建二叉树的方法,需要的朋友可以参考下
    2015-08-08
  • C语言数据结构之堆排序源代码

    C语言数据结构之堆排序源代码

    这篇文章主要为大家详细介绍了C语言数据结构之堆排序源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C++实现单词管理系统

    C++实现单词管理系统

    这篇文章主要为大家详细介绍了C++实现单词管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • C语言员工信息管理系统源代码

    C语言员工信息管理系统源代码

    这篇文章主要为大家详细介绍了C语言员工信息管理系统源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • 通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    通俗易懂的C语言快速排序和归并排序的时间复杂度分析

    这篇文章主要为大家通俗易懂的讲解了C语言快速排序和归并排序的时间复杂度分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 推箱子游戏C语言实现代码

    推箱子游戏C语言实现代码

    这篇文章主要为大家详细介绍了推箱子游戏C语言实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12

最新评论

?


http://www.vxiaotou.com