今日份学习”rand函数和srand函数“
本文简介:
相信大家都知道猜数字游戏吧,我想好一个1-100之间数然后你来猜,如果你猜的数比我想的数大,我则告诉你猜大了,比我想的数要小,则告诉你猜小了。看看谁能以最少的次数来猜对呢?🤨
🛸下面我们带着这个游戏来进入代码🛸
猜数字游戏:
如何来制作这个游戏呢?我们先得想好大概的架构。
我的思维:1.首先得有选择性游戏菜单。
2.能进行多次游玩。
3.使其具有可玩性。
带着这份思维进行代码实现:
一,游戏菜单
我们平常玩游戏是不是都有游戏菜单供我们选择,这就利用到C语言的输入输出函数👇
printf("##################\n");
printf("##1.play 0.over##\n");
printf("##################\n");
这样是不是很像一个简单的游戏菜单~
光有菜单可不行,我们得让这个菜单可执行起来呀!
#include<stdio.h>
int main()
{
int input=0;
printf("##################\n");
printf("##1.play 0.over##\n");
printf("##################\n");
printf("请选择:");
scanf("%d",&input);//接收菜单选择
if(input==1)
{
printf("猜数字\n");//
}
else
printf("游戏结束 OVER\n");//结束游戏
}
这样我们的菜单就可以执行了。
来看看效果:
感觉还不错~就是只能玩一次,跟我们的思维”可多次游玩”不符合~
多次游玩是不是就能联想到我们的“循环语句“呢?
这里我就用到了”循环语句“的”do while“:让其先执行一次,再根据我们的选择来决定是否继续游玩(最合适不过了😁)。
变代码:
#include<stdio.h>
int main()
{
int input = 0;
do
{
printf("##################\n");
printf("##1.play 0.over##\n");
printf("##################\n");
printf("请选择:");
scanf("%d", &input);//接收菜单选择
if (input == 1)
printf("猜数字\n");//选择1游戏实现
else if (input == 0)//选择0结束游戏
printf("游戏结束 OVER\n");//结束游戏
else//除了1或者0则选择错误
printf("选择错误,重新选择\n");
} while (input);
}
看效果:
游戏的大概运行逻辑就很完美啦!
下面重要环节就是游戏的实现👇
二,实现游戏
实现该游戏,肯定得是让计算机给我们出一个1~100之间的数字让我们猜,问题就转移到计算机如何产生1~100之间的数呢?
这就可以利用rand函数:rand函数介绍
可以产生0~RAND_MAX
那就好办了, 定义一个变量接收计算机随机产生的数就行啦,再把产生的数模上100就能产生1~100之间的数!👉“num=rand()%100”
尝试尝试~上代码:
#include<stdio.h>
void game()
{
int count=0;//记录猜的次数
int num=rand()%100;
int guess=0;
do
{
count++;
printf("猜1~100之间的数:");
scanf("%d",&guess);
if(guess<num)
printf("猜小了\n");//猜小了继续猜
else if(guess>num)
printf("猜大了\n");//猜大了继续猜
else
printf("猜对了,猜了%d次\n",count);//猜对了退出游戏
}while(guess!=num);
}
int main()
{
int input = 0;
do
{
printf("##################\n");
printf("##1.play 0.over##\n");
printf("##################\n");
printf("请选择:");
scanf("%d", &input);//接收菜单选择
if (input == 1)
game();//选择1游戏实现
else if (input == 0)//选择0结束游戏
printf("游戏结束 OVER\n");//结束游戏
else//除了1或者0则选择错误
printf("选择错误,重新选择\n");
} while (input);
}
效果很不错👏👏
但是这里还是有一个小小的问题:每次运行程序第一次玩都是同样的数,且后几次都一样,这样我们玩多了就记住了答案那是不是就没有可玩性了呢。
虽然rand函数可以产生随机值,但每次运行程序产生的随机值都一样导致游戏不够灵活,如何解决这个问题呢?
这里我再介绍一个函数“srand”
srand函数的参数需要一个随机值才能运行rand函数产生的随机数更随机起来(感觉有点怪怪的😅)
我们本就需要一个随机值,它还需要我们给它一个随机值才能产生随机值,这是不是太矛盾了😒
没关系,不就一个随机值嘛!我们想想什么数一直在变化呢?
没错就是时间!如何获取时间呢?那就是“time”函数了!
那它如何使用呢?
看代码👇
srand((unsigned int)time(NULL));
time 函数形参需要一个指针才能返回时间,我们给其空指针“NULL”即可,再将time函数返回的时间强制转换成srand函数需要的形参数就成功了!
小提示:"rand"和“srand”函数头文件为:<stdlib.h>
"time"函数头文件为:<time.h> 记得引用噢!
✨来看最后的成果✨
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void game()
{
int count=0;//记录猜的次数
int num=rand()%100;
int guess=0;
do
{
count++;
printf("猜1~100之间的数:");
scanf("%d",&guess);
if(guess<num)
printf("猜小了\n");//猜小了继续猜
else if(guess>num)
printf("猜大了\n");//猜大了继续猜
else
printf("猜对了,猜了%d次\n",count);//猜对了退出游戏
}while(guess!=num);
}
int main()
{
srand((unsigned int)time(NULL));
int input = 0;
do
{
printf("##################\n");
printf("##1.play 0.over##\n");
printf("##################\n");
printf("请选择:");
scanf("%d", &input);//接收菜单选择
if (input == 1)
game();//选择1游戏实现
else if (input == 0)//选择0结束游戏
printf("游戏结束 OVER\n");//结束游戏
else//除了1或者0则选择错误
printf("选择错误,重新选择\n");
} while (input);
}
🎈完美结局🎈
结束语:
试一下,你会比你自己想象中的还要强大,青春由磨砺而出彩,人生因奋斗而升华!
🥰