猜数字游戏的实现
从简单的随机数到一次次的输入与判断猜数字游戏藏着最朴素的编程乐趣。它不仅是一段代码更是理解程序逻辑、感受交互魅力的小小起点。接下来就让我们一起走进这个经典小游戏的世界猜数字游戏规则1.电脑随机生成1~100之间的数字2.玩家猜数字的过程中根据猜测数字的大小给出大了或者小了的反馈直到猜对为止游戏结束3.在这个游戏中希望玩完后还可以继续玩不用退出游戏给出菜单分析1.随机生成-----随机函数2.玩完后还可以继续玩不用退出游戏-----循环且菜单至少打印一次因此使用do-while循环3.猜数字这个过程要有猜大了或者是猜小了的提示所以应该为while循环随机数的生成1.rand函数rand() 是 C 标准库 stdlib.h 中用于生成伪随机整数0 ~ RAND_MAX RAND_MAX 一般是32767这是由编译器决定的的函数是编程中最常用的随机数生成工具。1.头文件#include stdlib.h2.函数原型int rand(void) , 无参数类型返回值为int类型。3. 生成指定范围随机数最常用公式rand() % (最大值 - 最小值 1) 最小值使用列子#includestdio.hintmain(){intrrand()%1001;//1~100之间的随机数printf(%d\n,r);}多次运行该代码你会发现为什么每一次运行出的结果是一样的呢这和rand() 是伪随机数生成器它内部有一个 “种子”seed有关。当种子固定生成的序列就固定。默认情况下C 语言会把种子固定设为 1。所以每次运行程序随机数都一模一样。那么种子该如何变化呢这与srand函数有关。2.srand()函数srand() 是设置随机数种子的函数我们可以手动设置种子使随机数发生变化。它是专门用来配合 rand() 工作 ——没有它rand () 生成的随机数每次运行都一模一样。1.头文件#include stdlib.h2.函数原型void srand(unsigned int seed)srand 的参数类型为无符号整型没有返回值3.搭配函数必须和 rand() 一起用使用例子#includestdio.hintmain(){srand(1);//将srand里面的种子变换后你会发现随机数将不一样intrrand()%1001;//1~100之间的随机数printf(%d\n,r);}但该怎么样才能使种子自动变化呢电脑上一直在变化的只有一个—时间。而在C语言中我们可以看到时间戳这个概念。时间戳(秒数当前时间-计算机的起始时间由此我们需要了解一下time函数相关链接时间戳3.time函数time() 是用来获取当前系统时间的函数在随机数里它的作用就是给 srand() 的种子提供一个永远在变的数字让随机数真正随机。1.头文件#include time.h2.函数原型time_t time(time_t *timer)返回类型为time_t类型实际上也是long long类型参数为指针类型3.返回值一个很大的整数每秒都在变常用写法配合随机数使用// 直接获取当前时间秒数time(NULL);完整组合#includestdio.h#includestdlib.h#includetime.hintmain(){// 用当前时间做种子srand((unsignedint)time(NULL));// 生成真正随机的数字printf(%d\n,rand()%1001);return0;}好了到这里为止我们 已经了解写这个代码需要的一些函数了接下来让我们开始写猜数字游戏吧猜数字游戏#includestdio.h#includestdlib.h#includetime.hvoidmenu(){printf(**********************\n);printf(***** 1.猜数字 *****\n);printf(***** 0.退出游戏 *****\n);printf(**********************\n);}voidgame(){//1.生成随机数,1~100之间intrrand()%1001;//2.猜数字while(1){intnum0;printf(请输入一个数字);scanf(%d,num);if(numr){printf(猜大了\n);}elseif(numr){printf(猜小了\n);}else{printf(恭喜你猜对了随机数是%d\n,r);break;}}}intmain(){intinput0;srand((unsignedint)time(NULL));//种子do{menu();printf(请选择);scanf(%d,input);switch(input){case1:game();break;case0:printf(退出游戏\n);break;default:printf(选择错误重新选择\n);break;}}while(input);return0;}以上代码就是猜数字游戏的整个逻辑。这个时候你是否会想要为什么种子的设置不是在game函数里面而是在main函数吗1.在探讨这个问题之前我们要先梳理一下思路玩一次猜数字游戏需要一个随机数并且在游戏没有玩完之前这个随机数是不能够变化的。整个程序只需要设置一次随机起点。设置完后面 rand () 就会自动变数字。2.其次我们使用了时间戳来让种子变化也就是种子1 秒才变一次如果放在了game函数中但游戏的while循环1 秒跑几千次会造成1 秒内种子没有变化导致生成的所有随机数都一模一样到这里本期博客内容就结束啦看过代码之后记得自己亲自实操一下这样才能真正理解猜数字游戏的逻辑。谢谢大家观看