猜数字游戏的难点肯定是生成随机数,我现在只学了一种伪随机生成的办法,顺便分享一下学习中调用函数的感悟。

首先,我从网上得知使用rand函数生成随机数,于是我打开了cplusplus,去参考那里看了一下

简单的猜数字游戏_随机数

当时我没有管srand,却发现了一个问题,我第一次打开游戏时它可以给我随机数,但是第二次打开的时候依然给我一模一样的随机数。而在例子前面都会配合srand,于是我去查找了srand

简单的猜数字游戏_随机数_02

于是我对srand进行了探索

简单的猜数字游戏_猜数字游戏_03

当我把srand放在循环里,括号里是1的时候rand就会随机生成41,2的时候就是45,如果使用时间戳让括号里面一直变化的话,那就是很相邻的顺序数字。

简单的猜数字游戏_时间戳_04

而我把它放在外面的话,它就会生成以41开头的一组随机数,为什么说是一组呢,我发现当第一个数字是41的话,下一个数就会是18467,同理,如果srand括号里是2的话它就会生成以45开头的一组随机数。而我在括号里设置时间戳的话,那么就会生成不同的开头数字,那么以开头数字为一组的随机数也固然是不同的,所以说它并不是完全随机,是伪随机生成。

回过头想,当我没有设置srand函数时,rand就会默认开头数是41(srand(1))所以我每次再次打开游戏时第一个数就是41,那么这一组随机数就是固定不变一摸一样的了。

而如果你把srand放在循环里面,那么每次玩都调用,那么它的随机数将是顺序增加,例如我把1变成2,那随机数就是41,45。

最好就是把srand放在循环外面,每一次重新进入程序的时候将第一个数字改变一下,这样就会生成一组随机数,且因为第一个数字不同,自然就不同。

这就是我今天学到的伪随机生成随机数,以后会有办法来解决这个问题,期待以后的学习。