今天写一个简单的猜数字小游戏,并且告诉你怎么来恶作剧你朋友的电脑,一定要用你朋友的电脑哦~,同样如果有什么错误希望能指出来,或者有什么改善的可以告诉给我,非常感谢大家的反馈!!!
一.猜数字游戏想要实现的功能
1.使电脑随机生成1~100之间的随机数
2.猜数字
如果猜小了,电脑提示猜小了。
如果猜大了,电脑提示猜大了。
如果猜对了,电脑提示:恭喜你,猜对了,游戏结束。
然后游戏玩完一次之后可以选择是否继续玩。
二.怎么生成随机数?
1.rand函数
C语言rand函数可以生成随机数,它既然是个函数,就得有头文件,它的头文件是stdlib.h。
但是rand函数会返回一个伪随机数,它不是真正的随机数,而是计算机经过算法而返回的一个随机数。
OK,当我们用rand函数生成一个随机数时:
再多弄几个随机数:
可是等我们再次运行一次发现生成随机数序列跟上次执行结果一样:
但是对于我们来说随机数是我们永远不会知道下一个数字是什么。
如果我们知道下一个数字是什么,那这个游戏就可太简单了,只要背住数字就可以顺利通关了,所以它一定是有问题的,这时候我们就要引入一个"种子"的概念。
三.怎么生成变化的"种子"?
rand的函数它是对一个叫种子的基准值进行运算生成的随机数,由于rand函数生成随机数默认种子为1,所以每次运行程序生成的随机数序列是一样的,
如果我们想要每次生成不一样的随机数,那么就要让种子变化,同样我们每次生成的随机数序列也就变化了,这就是我们想要的。
那怎么让种子发生变化呢?
C语言中提供了一个函数叫srand,它是用它的参数seed来改变rand函数生成随机数的种子。
当我们设置这个函数运行一下,它生成的随机数序列确实跟上次不一样了:
可是当我们再次运行时,同样的情况又发生了,跟上次运行结果一样,随机数序列没发生改变,这还不是我们想要的:
这时我们意识到,如果想要每次运行得到不同的随机数序列,那么srand函数参数就要时刻发生变化,也就是括号里面的数字每次调用时要发生变化,这样我们就可以得到想要的随机数了。
这时候我们就要引入一个叫time的函数,它的头文件time.h,也就是时间,这个函数可以获得时间,我们知道时间是在无时无刻变化着的,它就是我们设计种子的最佳选择。
四.时间戳
其实time的函数获得的时间叫时间戳,在这里我要介绍一下什么是时间戳。
时间戳,是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数(不考虑闰秒),用于表示一个时间点。然而,这种格式对于人类阅读并不友好,因此需要转换成可读的日期和时间格式。这个工具能够将时间戳快速转换为人类可读的日期时间格式,同时也支持反向转换,即将日期时间转换为时间戳。
我们来看time的原型,它的括号里面叫指针,由于我自己本身知识有限,不能讲解,不过不影响我们下面的操作,由于我们只想要time的返回值,所以在括号里面可以加一个NUll,它是一个空指针,就不关心它的参数了, 只要它的返回值,得到时间戳。
这时候我们可以看设计的随机种子:
这个time函数前面的括号是强制类型转换,是由于函数time返回值和srand函数是不同类型的原因,srand函数要接受time的返回值,所以要进行强制类型转换。
当我们再次运行两次来看时,它们运行的结果随机数序列是不一样的