目录
1.随机数的生成
2.猜数字代码实现
学完分支和循环后,我们可以实现一个简单的参数字小游戏,游戏实现的要求有两点:1.电脑自动生成128~256的随机数。2.玩家猜数字过程中,要根据猜测数据的大小给出相应提示,直到猜对游戏结束。这里我们需要明确两个点:1.随机数的生成;2.猜数字的过程需要循环实现。
1.随机数的生成
1.1rand函数
C语言提供rand函数来生成随机数,rand函数会返回一个伪随机数(算法生成的数)它的范围在0~RAND_MAX之间,RAND_MAX大小依赖编译器实现,但通常范围是(0~32767)。它的函数形式如下:
1 int rand (void);
使用rand函数前需要包含头文件。
1 #include <stdlib.h>
这里我们可以简单测试一下rand函数产生随机值:
这里我们再次运行代码可以惊奇的发现下次运行程序生成的随机数不变,从而证明rand函数生成的随机数是伪随机数,因为真正的随机数是不确定的,无法提前预知的。而rand函数是对一个叫“种子”的基准值进行运算生成的随机数,生成相同随机数是因为rand函数生成随机数默认的种子是1,只有让种子发生改变,才能生成不同的随机数。
1.2 srand函数
srand函数:用来初始化随机数的生成器,它的形式如下:
1 void srand (unsigned int seed);
这里我们通过代码比较可以更好的让大家理解其功能:
这里我们发现程序在调用rand函数前先调用了srand函数,我们把默认种子(基准数)1换成5后发现三次生成的随机数序列发生了变化说明只要种子在变化,每次生成的随机数序列也会随着变换。(srand函数一次运行的程序中调用一次就够了)
1.3 time函数
在程序运行中我们一般使用程序运作的时间作为种子,因为时间时刻发生变化,time函数就可以获得这个时间,它的形式如下:
1.time_t time (time_t* timer);
C语言中time函数返回的这个时间差叫做时间戳,那什么又是时间戳呢?
其实时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点。例如下图所示:
当然,如果timer是NULL,就只返回这个时间的差值,且time函数使用时需要包含头文件:
1 #include <time.h>
如果只让函数返回时间戳则形式如下:
1 time(NULL);
此时优化后的生成随机数代码如下:
这里声明一下:因为程序运行的时间不同,所以每次运行生成随机数的结果是不同的。
1.4设置随机数的范围
随机数的设置范围是:0~RAND_MAX之间,而这个小游戏设置的范围是128~256,之间,那我们该怎么操作呢?如果是要生成a~b的随机数(一般情况下b最大值为32767),方法如下:
1 a + rand()%(b-a+1)
则128~256之间的随机数形式为:
1 128 + rand()%129
2.猜数字代码实现
2.1解题思路
首先,游戏开始肯定需要菜单,我们创建菜单使1来表示play,0来表示exit.因为玩游戏嘛玩一把肯定不过瘾想继续玩,所以在此采用do while循环代码实现,然后制作游戏主体。为了使游戏更加丰富有趣,我们可以设置猜数字的次数限制,来增加游戏难度,例如n次猜错直接宣布游戏挑战失败。我们可以适当给玩家一些小提示例如猜小了或猜大了,让玩家一步步接近并找到答案。
2.2参考代码如下
运行结果如下: