1,C语言基础概念知识
2,分支语句
3,循环语句
4,函数创建(没有也不要紧,不需要深入)
5,一些基础函数
6,VS2022社区版集成开发环境(不需要搭建环境,简单方便又免费)
1,电脑给出一个随机数字,玩家输入数字进行猜测。
2,玩家猜测结果过大,电脑提示过大。反之,电脑提示过小。
3,(附加功能)设置玩家的猜测次数,提升游戏难度。
生成随机数,需要用到一个rand函数,rand函数可以用来生成伪随机数。
1,他的原型是:int rand(void);int表示rand的返回值是整形类型,void表示rand没有参数。
2,如果要使用rand函数,我们要在创建的文件忠包含头文件<stdlib.h>
3,由rand函数生成的伪随机数有一个具体的范围:即0~RAND_MAX,这里的RAND_MAX在不同的编译器中有代表不同的数字,当然,在大部分编译器中(包括VS),它的值一般是32767。
好了,知道这么多,让我们先尝试打印一下rand试试吧

屏幕上出现了随机数“41”,但是如果你多试几次,你会发现:你每一次得到的随机数都是“41"。
这就是rand函数的局限性。
因为rand生成随机数的原理是:对一个叫”种子“的基准值进行运算得到随机数。这个数就是伪随机数:正如你所看到的那样:41。而这个种子默认为1,种子不变,运算结果自然不变,无论操作多少次都一样。
//所以,要让rand生成的伪随机数随机(变化),就要让”种子“变化。
因此,我们引入srand函数对种子进行初始化(放在rand函数的前面)
srand函数的原型:
void srand(seed);其中,void表示srand函数没有返回值,seed表示srend函数的参数。
参数seed控制”种子“的大小,”种子“又控制随机数序列。如图


可见,随着参数seed的变化,rand()的返回值(随机数)也在发生变化。所以,只要让seed不断变化,我们就可以得到真正的随机数。
再给seed一个随机数?不对,从逻辑上就存在问题。
那么如何解决这个问题呢?(想想生活中有什么值是时时刻刻在发生变化的)
对了,是时间。
我们继续引入time函数。对于time函数,我们需要知道一些关于他的知识
1,time函数的调用需要包含<time.h>头文件。
2,time函数的返回值类型是time_t类型。
3,time函数的参数timer的类型是time*_t类型(指针,不用管他,这个程序用不到指针)
4,time函数的返回值是“时间戳”
5,时间戳的内涵是自1970年1月1日0时0分0秒开始至今所经过的时间(单位秒)
也就是说,time函数的返回值(时间戳)会随着时间的流逝而不断改变。
好的,问题迎刃而解。
我们把time的返回值当作seed,用强制类型转换设置成无符号整型类型,将time的参数设置成空指针(NULL)


现在我们可以得到真正的随机数了
但是我们还是遇到了一个问题:这么大的数字,猜起来还是太麻烦了。
这个问题很好解决:假如我想要1~100的范围,只需要对这个数%100+1就行。

如图

我们设置主函数外又新建了两个小组件:菜单,和游戏主程序。
在主程序中用if语句设置三个选项,对应菜单的选项。这样,一个基础的框架就搭好了。
这一步非常简单
可以ASCII艺术(类似于评论区写生(doge))设计你喜欢的菜单样式
我这里采用最简单朴素的方式:

1,电脑输出一个随机数字:

2,玩家输入,猜测这个数字:

3,电脑判断数字给出反馈

4,实现游戏的循环(反复猜测)和debug环节

这里我使用了do while 循环结构,保证循环至少执行一次。将while的参数设置为1,使其可以无限进行下去直到猜对为止。
debug:1,删除了printf("%d", rand() % 100 + 1);语句,不在屏幕上显示随机数。
2,为输入数添加了取地址符号&。
没有
我们可以设计一个计数器,限制猜数字的次数,增加这个游戏的难度:

感谢你的点阅和点赞,你的支持,就是我最大的动力。
我是@小此方,一个平凡而努力的大学生编程人。