ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

用C语言实现猜数字游戏

用C语言实现猜数字游戏 猜数字游戏在学了基础的C语言知识以及分支语句和循环语句后我们可以试着写一个简单的小游戏猜数字游戏游戏要求电脑⾃动⽣成1 ~ 100的随机数玩家猜数字猜数字的过程中根据猜测数据的⼤⼩给出大了或⼩了的反馈直到猜对游戏结束1. 随机数生成要想完成猜字谜游戏首先得产生随机数那怎么产生随机数呢1.1 randC语⾔提供了⼀个函数叫rand这函数是可以⽣成随机数的函数原型如下所⽰intrand(void)rand函数会返回⼀个伪随机数这个随机数的范围是在0 ~RAND_MAX之间这个RAND_MAX的⼤⼩是依赖编译器上实现的但是⼤部分编译器上是32767。rand函数的使⽤需要包含⼀个头⽂件是stdlib.h那我们就测试⼀下rand函数这⾥多调⽤⼏次产⽣5个随机数#includestdio.h#includestdlib.hintmain(){printf(%d\n,rand());printf(%d\n,rand());printf(%d\n,rand());printf(%d\n,rand());printf(%d\n,rand());return0;}我们先运⾏⼀次看看结果再运⾏⼀次再看看结果多运⾏⼏次呢我们可以看到虽然⼀次运⾏中产⽣的5个数字是相对随机的但是下⼀次运⾏程序⽣成的结果和上⼀次⼀模⼀样这就说明有点问题。如果再深⼊了解⼀下我们就不难发现其实rand函数⽣成的随机数是伪随机的伪随机数不是真正的随机数是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的那是因为rand函数⽣成随机数的默认种⼦是1。如果要⽣成不同的随机数就要让种⼦是变化的。1.2 srandC语⾔中⼜提供了⼀个函数叫srand⽤来初始化随机数的⽣成器的srand的原型如下voidsrand(unsignedintseed);程序中在调⽤rand函数之前先调⽤srand函数通过srand函数的参数seed来设置rand函数⽣成随机数的时候的种⼦只要种⼦在变化每次⽣成的随机数序列也就变化起来了。那也就是说给srand的种⼦是如果是随机的rand就能⽣成随机数在⽣成随机数的时候⼜需要⼀个随机数这就⽭盾了。1.3 time在程序中我们⼀般是使⽤程序运⾏的时间作为种⼦的因为时间时刻在发⽣变化的。在C语⾔中有⼀个函数叫time就可以获得这个时间time函数原型如下time_ttime(time_t*timer);time 函数会返回当前的⽇历时间其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运⾏时间之间的差值单位是秒。返回的类型是time_t类型的time_t类型本质上其实就是32位或者64位的整型类型。time函数的参数timer如果是⾮NULL的指针的话函数也会将这个返回的差值放在timer指向的内存中带回去。如果timer是NULL就只返回这个时间的差值。time函数返回的这个时间差也被叫做时间戳。time函数的时候需要包含头⽂件time.h#ifndef_CRT_NO_TIME_T#ifdef_USE_32BIT_TIME_Ttypedef__time32_ttime_t;#elsetypedef__time64_ttime_t;#endif#endiftypedeflong__time32_t;typedef__int64 __time64_t;如果只是让time函数返回时间戳我们就可以这样写time(NULL);//调⽤time函数返回时间戳这⾥没有接收返回值那我们就可以让⽣成随机数的代码改写成如下#includestdio.h#includestdlib.h#includetime.hintmain(){srand((unsignedint)time(NULL));printf(%d\n,rand());printf(%d\n,rand());printf(%d\n,rand());printf(%d\n,rand());printf(%d\n,rand());return0;}运行多次后就能发现明显的差异了。注srand函数是不需要频繁调用的一次运行的程序中调用一次就够了。1.4 设置随机数的范围如果我们要⽣成0~99之间的随机数⽅法如下rand()%100;//余数的范围是0~99如果要⽣成1~100之间的随机数⽅法如下rand()%1001;//%100的余数是0~99,0~99的数字1,范围是1~100如果要⽣成100~200的随机数⽅法如下100rand()%(200-1001)//余数的范围是0~100加100后就是100~200所以如果要生成a ~ b的随机数方法如下arand()%(b-a1)2. 猜数字游戏的代码实现参考代码#includestdio.h#includestdlib.h#includetime.hvoidgame(){intrrand()%1001;intguess0;intcount5;while(count){printf(你还有%d次机会,猜一下数字是多少: \n,count);scanf(%d,guess);if(guessr)printf(猜小了\n);elseif(guessr)printf(猜大了\n);else{printf(恭喜你猜对了\n);break;}count--;}if(count0){printf(游戏失败正确值是%d\n,r);}}voidmenu(){printf(********************************\n);printf(*********** 0. exit *********\n);printf(*********** 1. play *********\n);printf(********************************\n);}intmain(){intinput0;srand((unsignedint)time(NULL));do{menu();printf(请选择: );scanf(%d,input);switch(input){case1:game();break;case0:printf(游戏结束\n);default:printf(输入错误请重新输入\n);}}while(input);return0;}
返回列表