猜数字游戏
现在我们想实现这样一个功能:
1.生成一个随机数,这个随机数大小在1-100之间
2.用户输入数字,如果输入的数字比随机数小,就提示玩家猜小了,输入的数字比随机数大,就提示猜大了,直至找到我们的随机数
结合上面两点,就成了我们今天要实现的第一个小项目,猜数字游戏,我们分步来分析。
一.生成随机数
为了让电脑能生成的数随时在变化,我们必须找到一个在随时变化的东西传进去不断的生成数
此时我们想到,有一个东西正无时无刻不在发生变化,那就是时间,恰好符合我们的要求。
接下来先讲讲怎么通过时间戳生成随机数。
随机数的生成
什么是时间戳?
时间戳是计算机科学中常见的术语,是指一种记录时间的方式,通常用于记录某个事件的发生时间或者文件的创建、修改时间等信息。简单的说,时间戳就是一串数字,表示从某个固定时间点(1970年1月1日00:00:00)开始到现在的时间长度,通常以秒为单位计算。
生成随机数的函数
#include<stolib>//使用该函数所需的头文件 rand()
我们通过msdn来认识一下它
rand的返回值为一个整型,注意最后一句话哦:
也就是说,在使用rand之前,我们得先调用一下srand为其设定生成随机数的起点(或者生成器)”
srand函数msdn定义如下:
当我们调用srand函数时,必须满足的条件是传给它的值是一个变化的值,此时就可以用我们前面讲到的时间戳了
#include<time.h>//使用time函数所需头文件 srand((unsigned int)time(NULL));//把时间函数置空传给srand同时由于srand要求参数必须为unsigned int型,把time(NULL)强制类型转换一下
注意,rand生成的其实是一个伪随机数。
二. 猜数字
随机数的问题搞定了,现在开始解决具体问题
打印菜单
在开始游戏前,我们得先打印一个菜单来提醒一下玩家怎么进入游戏。
这一步其实是非常简单的,代码如下
void menu()//打印菜单 { printf("*****************************\n"); printf("*********** 1.play **********\n"); printf("*********** 0.exit **********\n"); printf("*****************************\n"); }
好了,一个简单的菜单就写好了,但是此时的1和0是没有任何的选择效果的,我们接下来就让我们的菜单真正能做到输入1开始输入0结束的效果。
int main() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("请选择:> "); scanf("%d",&input); switch (input) { case 1: game(); //进入游戏 break; case 0: printf("退出游戏\n"); break; default: printf("输入错误,请重新输入\n");//输入的非0非1时 break; } }while(input); return 0; }
来测试一下我们这个菜单的效果
非常完美,菜单算是打印完成了,我们进行下一步。
游戏的编写
前面我们已经分析了该游戏的逻辑,现在我们就来根据我们游戏的逻辑来编写这段代码:
void game() { int random_num = rand() % 100 + 1;//产生1-100的随机数 int input = 0; while (1) { printf("请输入猜的数字>:");//玩家输入 scanf("%d", &input); if (input > random_num)//输入的数字比生成随机数大 { printf("猜大了\n"); } else if (input < random_num)//生成的数字比随机数小 { printf("猜小了\n"); } else { printf("恭喜你,猜对了\n"); break; } } }
唯一要解释一下的是随机数生成的范围是怎么设定在0-100的
int random_num = rand() % 100 + 1;
看下这段代码,我们把生成的随机数对100取余,那么此刻是不是随机数的值就一定在0-99之间了?(大于100的话会进1的),然后我们对这个数再+1,那么此时随机数的范围就被定在1-100了?
这个项目并不算太难,大家看代码自己分析一下相信就能想明白,其他的我就不过多解释了,咱们来直接试试游戏的效果。
没啥问题吧?话说我两次就猜对了今天是不是该去买彩票呢?
三.源码
源码给大家放这啦,有需要的自取哦!
#include<stdlib.h> #include<time.h> void menu()//打印菜单 { printf("*****************************\n"); printf("*********** 1.play **********\n"); printf("*********** 0.exit **********\n"); printf("*****************************\n"); } void game() { int random_num = rand() % 100 + 1; int input = 0; while (1) { printf("请输入猜的数字>:"); scanf("%d", &input); if (input > random_num) { printf("猜大了\n"); } else if (input < random_num) { printf("猜小了\n"); } else { printf("恭喜你,猜对了\n"); break; } } } int main() { srand((unsigned int)time(NULL)); int input = 0; do { menu(); printf("请选择:> "); scanf("%d", &input); switch (input) { case 1: game(); //进入游戏 break; case 0: printf("退出游戏\n"); break; default: printf("输入错误,请重新输入\n");//输入的非0非1时 break; } } while (input); return 0; }
总结
以上就是今天要讲的所有内容啦,说实话我一开始压根没打算更新这个项目的,因为大家看代码就知道真的非常非常的简单。但是为了照顾有些真的是0基础的小白,嗯,咱们还是从简单的开始吧。
如果你觉得自己的基础还不错,想看稍微有点难度的实战项目的话,可以看看下面这两篇博客哦!
【C语言】万字教学,带你分步实现扫雷游戏(内含递归函数解析),剑指扫雷,一篇足矣
【C语言】三子棋详解(包教包会的那种)
如果你对文章的内容有任何疑问欢迎在评论区或者私信博主指出哦,博主看到都会第一时间回复的!
大噶(家)下次再见啦!
新人博主创作不易,如果感觉文章内容对你有所帮助的话不妨三连一下这个新人博主再走呗。你们的支持就是我更新的动力!!!
(可莉请求你们三连支持一下博主!!!点击下方评论点赞收藏帮帮可莉吧)





