引言:相比大家从小都玩过猜数字游戏吧!那么小时候玩的游戏能不能用代码写出来呢?--答案是肯定的,今天我们就来讲解一下如何用代码写出猜数字游戏!
1.打印菜单
在我们日常玩的小游戏中,我们一进入游戏界面,有会跳出一个页面让我们选择游戏模式或者选择角色类似的等等,那猜数字游戏一样需要一个菜单,无论什么条件我们都先要打印一个菜单,而且玩完一把,可能还想要进行下一把或者想要退出游戏,这就可以通过我们的循环结构实现。
代码展示:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//猜数字游戏
int main()
{
int num = 0;
do
{
//无脑打印菜单
printf("********** 菜单 ***********\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("请选择数字: ");
scanf("%d", &num);//输入数字,进行选择
switch (num)
{
case 1:
//game();
break;
case 0:
printf("退出游戏:\n");
break;
default:
printf("选择错误,请重新选择:\n");
break;
}
} while (num);//再次询问是否进行下一把游戏,选择0直接退出游戏
return 0;
}
2.产生随机数
既然要猜数字,那么这个数字肯定是随机给我们咯!那么就有人预判我想说的,这个随机数该怎么产生?这个就要涉及到一个到函数rand,rand函数是专门用来产生随机数的,如果想要了解更多,可以去c plus plus官网查询。
根据查询我们可以得知,rand函数生成的数是伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是依赖编译器上实现的,但是大部分编译器上是32767。使用rand函数要包含它的头文件<stdlib.h>。
为什么说它生成的是伪随机数呢?在后面我们会提及并讲解。
知道了rand函数能够生成伪随机数,那如何使用它呢?它的基本结构如下:
int rand(void)
接下来看一个利用rand函数小代码生成随机数
多测试几次
你会发现虽然是随机的,但它生成的数都是一样的。不少宝宝就会好奇了为什么我是用它生成随机数,它却给我生成一样的数?这就不得提及上述说的伪随机数,rand函 数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数,rand函数它默认种子是1-----这时候又有人说什么是种子?
简单来说相当于一个标准值,我们生成的随机数是需要依靠种子产生的,只有当种子发生变化,产生的随机值也就是随机变化的!!!
3.srand函数产生种子
为了让种子不断发生变化,这个时候我们又需要引入一个新的函数srand。
根据查询我们可以知晓,srand发挥的主要作用就是设置随机生成的种子,让我们编译器每次随机生成的数字都不一样。它的基本结构如下图:
void srand (unsigned int seed)
简单理解一下:就是srand函数它的返回值是空的,也就是没有返回值。同时它的参数---即种子的类型是无符号整型(unsigned int)。我们直接看代码的结果!
这时候你会发现生成的随机数不一样了,但是当我们多次运行时发现它产生的随机数依旧是这个,这是为什么呢?这是因为我们的种子没有随时发生变化,导致我们我们每一次运行产生的随机数都一样!那就说明只要我们的种子时刻发生变化,我们就能够解决这一问题!
但这个时候就有一个矛盾点,什么矛盾点呢?我们刚才说srand函数它的种子是随机产生的,那么这是不是要通过rand函数随机产生种子呢?那我产生随机数的前提要调用srand函数产生随机的种子,这不自相矛盾嘛!!!为了解决这一矛盾,我们引入一个新的知识!
4.time函数
在我们的意识中,对于随时变化的事务,我们会最先想到时间,因为时间是无时无刻不发生变化的!所以c++中为了能够表述这中随时变化,创建了一个新的函数就是time函数!
箭头所指就是time函数的基本结构(time_t time(time_t* timer))。time函数返回的类型是time_t类型的,time_t类型本质上其实就是32位或者64位的整型类型。同时在返回值那一栏里,参数timer可以是NULL---即空指针,后面我会写到。如果是NULL,那么它返回时间差-----又称作时间戳。在使用time函数的时候我们要包含它的头文件<time.h>。
时间戳(Unix timestamp)转换工具 - 在线工具 (tool.lu)
接下来让我们通过代码来看看产生的效果吧!
运行几次发现生成的数都是随机的,这非常好的解决了我们随机数产生的问题。但是,你会发现这个猜的数字也忒大了吧!这要我猜到猴年马月啊!这时候为了约束我们我们随机数产生的范围,我们就又要用上rand函数同时还要用到取模(%)符号!
5.随机数生成范围约束
我们是通过rand函数来生成我们的随机数的,生成的随机数取模范围实在除数之间。举个简单例子
我们定义一个变量a,a%100它的余数范围肯定是1~99.同理如果a%10,它的余数范围就是1~9。
所以为了约束随机数生成的范围我们可以这样做:
生成的数在1~100之间,rand%100+1即可;
生成的随机数在100~200之间,rand%(100+1)+100即可;
如此我们可以发现它的规律生成数在a~b之间 rand % (b-a+1) + a;
上述知识我们都了解之后,直接敲代码吧!
6.代码实现
如果你想要增加难度,可以加一些次数,譬如:
那么猜数字游戏到这里就结束了!下一期见咯!