【声明】:这里博主推出一个小游戏给铁汁们,用来增强铁汁们学习C语言的热情,真的很简单哦,快来康康吧。

猜数字小游戏

注意,由于这篇是为了刚入门计算机专业的铁汁们准备的,目的是增加大家对于学习编程的热情,所以就没有按照项目工程那样分为声明、定义、测试模块,笔者在这里就直接写在测试一栏里了。不要给自己设限,当自己实现出来的时候,你会发现真的很简单,和笔者一起加油哦。

描述:电脑随机生成一个1~100之间的数字,要求玩家去猜数字。

  • 玩家猜小了,电脑会告诉,猜小了;
  • 玩家猜大了,电脑会告诉,猜大了;
  • 玩家猜中了,电脑会告诉,恭喜你,猜对了

下面,我先把这个游戏的大致逻辑给写出来,帮助大家更好的上手。

#include<stdio.h>//菜单
void menu()
{printf("*****************************\n");printf("*****      1.play       *****\n");printf("*****      0.exit       *****\n");printf("*****************************\n");
}
int main()
{int input = 0;//用do...while语句更合适一些,因为程序刚执行就要把菜单打印出来do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:printf("猜数字\n");break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

其实逻辑很简单,下面只要把

printf("猜数字\n");

封装成一个函数,用来实现猜数字的功能就行啦。

此时执行代码是这样的:

是不是看起来很简单,下面我将猜数字的过程给实现出来,那么这个小游戏就完成啦。

//实现猜数字过程
#include<stdio.h>
#include<stdlib.h>
#include<time.h>void menu()
{printf("*****************************\n");printf("*****      1.play       *****\n");printf("*****      0.exit       *****\n");printf("*****************************\n");
}void game()
{//猜数字游戏的过程int guess = 0;//0~32767之间的范围太大了,本题要的是1~100之间即可int r = rand() % 100 + 1;//1~100      rand() % 100 -> 0~99//猜数字while (1){printf("猜数字:>");scanf("%d", &guess);if (guess < r){printf("猜小了\n");}else if (guess > r){printf("猜大了\n");}else{printf("恭喜你,猜对了\n");break;}}}
int main()
{int input = 0;//设置随机数的生成器,整个程序只要设置一次就可以了所以不要放在前面函数定义里面srand((unsigned int)time(NULL));//但是生成的随机数需要时时在变化,所以传入的是时间戳//用do...while语句更合适一些,因为我们一上来就要打印菜单do{menu();printf("请选择:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("退出游戏\n");break;default:printf("选择错误\n");break;}} while (input);return 0;
}

好,我知道铁汁可能对于上面的有些代码不是很理解,没关系的,我来了。

你可能不理解为什么多了两个头文件:

#include<stdlib.h>
#include<time.h>

添加stdlib.h头文件,是因为使用了库函数 rand() 和 srand() ,而添加time.h头文件,是因为使用库函数time(), 而添加stdio.h头文件,不用我说大家都知道,是因为使用了库函数printf() 和 scanf()

说到这里,我自己都忍不住问自己为啥要使用库函数rand() ,srand() 和 time()?别急, 请朝后看:

首先,这个游戏的操作重点在于电脑处理生成随机数这块内容,那么C语言中生成随机数的方法是什么呢?嘿嘿,这里就要提到库函数 rand() 了。

rand() 函数原型:

哈哈,没错这是英文文档,其实也能找到很多中文版本的,但是大家要学习着看英文文档哦,毕竟以后进入公司,很多专业文档他喵的几乎都是英文的,谁叫咱们这方面没有老外起步早呢,不过没关系,后来者居上,大家一起努力,若干年之后,咱们中文势必成为真正的国际通用!!!

有点跑题了,回来回来...

从红方括号括起来的内容不难看出,rand()生成随机数的范围是0~RAND_MAX之间的数字,而RAND_MAX大小是0x7fff ,这是十六进制表示形式,转换成十进制就是32767,所以rand()生成随机数的范围就是0~32767

可能你在疑问,为什么RAND_MAX大小是0x7fff ,不是别的呢,哈哈,笔者当然是有根据的,先在编译器上将它打出来 

然后点击鼠标右键,会显示:

此时只需要点一下“转到定义”, 就能看到咱们想要的啦。

问:下面代码是啥意思?

int r = rand() % 100 + 1;

解释:

    //0~32767之间的范围太大了,本题要的是1~100之间即可//rand() % 100 == 0 ~ 99//rand() % 100 + 1 == 1~100  //所以才写成下面的形式int r = rand() % 100 + 1;

好,说到这里,红色方框里面的内容就解释的差不多了 ,现在来看蓝色方框里面的内容。

蓝色方框主要讲的是,在使用rand()函数之前,需要先设置随机数的生成器,想想也是啊,没有随

机数的生成器,怎么会生成随机数呢!

这该死的逻辑

那这里就要讲解一下库函数srand() 了

srand() 函数原型:

srand()函数里面需要传入一个不断变化的值 ,才能让rand()函数生成随机数,如果传入的是常数的话,那么每次生成的随机数都会是同一个数,那什么值是不断变化的呢,当然是时间啦。

那程序里面写了这么一大坨是啥意思?

srand((unsigned int)time(NULL));

如果想要把这个讲解清楚,首先讲一下库函数time()

那为什么要引入time()函数呢?

这里补充一下“时间戳”的概念:何为时间戳?

任何一个时间都能转化成一个时间戳,时间是在不断变化的,所以时间戳也是不断变化的,而获取时间戳,需要调用time()函数

time()函数原型:

time() 函数里面参数的数据类型是指针型,所以传入一个NULL(空指针)进去,变成time(NULL)

这里大家先别刨根问底问为什么传进去的是空指针而不是别的,因为这里涉及的知识比较多,等到零基础搞定C语言系列更新到指针那块内容,笔者会灰常详细的介绍哦,在这里大家只要知道time()函数里面的参数类型是指针型,此题传入的是空指针就行啦。

因为time()函数的返回值类型是time_t类型,但是srand()函数参数类型是unsigned int 型,所以要进行强制类型转换

srand((unsigned int)time(NULL));

还有还有,为什么srand()函数不直接写在rand()函数的前面,而是放在主函数中?

那是因为啊,设置随机数的生成器,整个程序只要设置一次就可以了,如果放在game()中,那么调用一次函数就会设置一个随机数的生成器,所以才放在主函数中。

好咯,这个小游戏就这么多内容了,确实很简单,后面笔者还会更新一些小游戏哦,觉得有所收获的铁汁们可以动动小手,给笔者来个三连。

小游戏系列——猜数字游戏相关推荐

  1. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏

    对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...

  2. java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏

    对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...

  3. 小程序实现猜数字游戏

    游戏是小程序一个比较有趣的分类,我们今天就带着大家实现一下猜数字的游戏.每次输入数字,显示结果,有以下几种情况: 1.猜高了 2.猜低了 3.猜对了,游戏结束 1 组件搭建 开发游戏的话,我们先搭建组 ...

  4. 【C语言小游戏】猜数字游戏

    hello,csdn的小伙伴呢,在前面,我们已经初步了解了c语言,并且系统的学习了分支与循环的内容.今天我们就将分支与循环的内容综合应用一下,来做一个很简单猜数字小游戏. 目录 程序的需求以及最终代码 ...

  5. C语言小恶搞之猜数字游戏

    这是一个用C语言做的带惩罚的猜数字游戏 下面是咱运用到的新知识! 1.自动关机部分:可搜索C语言实现电脑自动关机程序 system("shutdown -s -t 60");//注 ...

  6. 猜数字游戏python程序_python经典小程序:猜数字游戏

    #猜数字游戏 import random #impor语句导入random模块 guessor=0;print("#"*30) #输出30个"#"(" ...

  7. java猜数字游戏_java猜数字游戏

    java猜数字游戏要求:1.在100-999中输入任意数字,有10次猜的机会,期间会被告知猜大了.猜小了.猜对了.当10次机会用完,游戏结束.2.任意时候按S可开始或重新开始,按Q可退出.我... j ...

  8. 计算机游戏流程图,猜数字游戏 流程图+源代码

    1.问题描述: 该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复.玩游戏者通过游戏提示输入八次来匹配上面所输入的数字.A表示位置正确且数字正确,B表示数字正确而位置不正确.如果4A0 ...

  9. 第四周项目三-随机数函数应用于游戏(猜数字游戏)

    /**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年3月20日*版 本 号:v1. ...

  10. 猜数字游戏,输入一个数若大了则输出高了,小了则输出低了,直到猜中为止

    猜数字游戏,输入一个数若大了则输出高了,小了则输出低了,直到猜中为止. 一.猜数字游戏规则 二.代码编写 三.结果分析 四.总结 一.猜数字游戏规则 猜数字游戏相信大家都不陌生吧,当你从键盘输入一个数 ...

最新文章

  1. 后台获取视图对应的字符串
  2. uboot i2c 命令的读写测试
  3. 收下这 16 篇最新论文,周会基本不用愁
  4. jquery+easyui开发、培训文档
  5. winXP 下安装python3.3.2
  6. Linux下处理BOM头和^M的简单方法
  7. 北京特9内环和外环的区别_2021年2月CFA北京机考考点在哪里?
  8. Shiro集成Cas单点登录
  9. 电感值、电容值的理解(上)
  10. 联想台式计算机设置u盘启动不了,联想台式电脑bios设置u盘启动教程
  11. 华为企业业务的数字化与绿色节能“双向突围”
  12. 【IT视频】支付宝架构师眼中的高并发架构
  13. 【社区团购平台排名】社区团购平台有哪些?
  14. chmod 权限777 -rwxrwxrwx是什么意思
  15. 一文精通S4 HANA中的Business Partner
  16. Step7中有关时间和定时器的使用和例程2
  17. 主流的音视频SDK调研
  18. (笔记总结)单片机与单片机的通信
  19. 总算挽回点面子,中国上月为印尼发射通信卫星定点成功 运行正常
  20. 文件在线预览功能(office文件)

热门文章

  1. Cadence导出Excel格式BOM表
  2. 【运营】产品推广计划书
  3. 维护计算机需要做哪些,电脑的日常维护有哪些?
  4. 全系列三极管应用参数
  5. 分页虚拟存储管理——页面置换算法例题
  6. ROMS 编译upwelling.h
  7. dlp技术(dlp技术和单片lcd的区别)
  8. Clouda 之我见
  9. cookie 、localStorage 和 sessionStorage 区别
  10. ubuntu 您不是所有者所以您不能更改