小游戏系列——猜数字游戏
【声明】:这里博主推出一个小游戏给铁汁们,用来增强铁汁们学习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()中,那么调用一次函数就会设置一个随机数的生成器,所以才放在主函数中。
好咯,这个小游戏就这么多内容了,确实很简单,后面笔者还会更新一些小游戏哦,觉得有所收获的铁汁们可以动动小手,给笔者来个三连。
小游戏系列——猜数字游戏相关推荐
- 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏
对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...
- java 后台跳出提示_小猿圈Java初学者练习小案例:猜数字游戏
对于Java初学者,如果没有好的引导,可能会觉得自己学什么都不好,学什么都不会,这个时候就要给他们一下小的案例,让他们去实践一下,让他们知道自己学的东西是可以用到的,小猿圈java讲师为你准备了Jav ...
- 小程序实现猜数字游戏
游戏是小程序一个比较有趣的分类,我们今天就带着大家实现一下猜数字的游戏.每次输入数字,显示结果,有以下几种情况: 1.猜高了 2.猜低了 3.猜对了,游戏结束 1 组件搭建 开发游戏的话,我们先搭建组 ...
- 【C语言小游戏】猜数字游戏
hello,csdn的小伙伴呢,在前面,我们已经初步了解了c语言,并且系统的学习了分支与循环的内容.今天我们就将分支与循环的内容综合应用一下,来做一个很简单猜数字小游戏. 目录 程序的需求以及最终代码 ...
- C语言小恶搞之猜数字游戏
这是一个用C语言做的带惩罚的猜数字游戏 下面是咱运用到的新知识! 1.自动关机部分:可搜索C语言实现电脑自动关机程序 system("shutdown -s -t 60");//注 ...
- 猜数字游戏python程序_python经典小程序:猜数字游戏
#猜数字游戏 import random #impor语句导入random模块 guessor=0;print("#"*30) #输出30个"#"(" ...
- java猜数字游戏_java猜数字游戏
java猜数字游戏要求:1.在100-999中输入任意数字,有10次猜的机会,期间会被告知猜大了.猜小了.猜对了.当10次机会用完,游戏结束.2.任意时候按S可开始或重新开始,按Q可退出.我... j ...
- 计算机游戏流程图,猜数字游戏 流程图+源代码
1.问题描述: 该游戏可以由程序随机产生或由用户输入四个0到9之间的数字,且不重复.玩游戏者通过游戏提示输入八次来匹配上面所输入的数字.A表示位置正确且数字正确,B表示数字正确而位置不正确.如果4A0 ...
- 第四周项目三-随机数函数应用于游戏(猜数字游戏)
/**Copyright(c)2016,烟台大学计算机与控制工程学院*All rights reserved*文件名称:123.cpp*作 者:王蕊*完成日期:2016年3月20日*版 本 号:v1. ...
- 猜数字游戏,输入一个数若大了则输出高了,小了则输出低了,直到猜中为止
猜数字游戏,输入一个数若大了则输出高了,小了则输出低了,直到猜中为止. 一.猜数字游戏规则 二.代码编写 三.结果分析 四.总结 一.猜数字游戏规则 猜数字游戏相信大家都不陌生吧,当你从键盘输入一个数 ...
最新文章
- 后台获取视图对应的字符串
- uboot i2c 命令的读写测试
- 收下这 16 篇最新论文,周会基本不用愁
- jquery+easyui开发、培训文档
- winXP 下安装python3.3.2
- Linux下处理BOM头和^M的简单方法
- 北京特9内环和外环的区别_2021年2月CFA北京机考考点在哪里?
- Shiro集成Cas单点登录
- 电感值、电容值的理解(上)
- 联想台式计算机设置u盘启动不了,联想台式电脑bios设置u盘启动教程
- 华为企业业务的数字化与绿色节能“双向突围”
- 【IT视频】支付宝架构师眼中的高并发架构
- 【社区团购平台排名】社区团购平台有哪些?
- chmod 权限777 -rwxrwxrwx是什么意思
- 一文精通S4 HANA中的Business Partner
- Step7中有关时间和定时器的使用和例程2
- 主流的音视频SDK调研
- (笔记总结)单片机与单片机的通信
- 总算挽回点面子,中国上月为印尼发射通信卫星定点成功 运行正常
- 文件在线预览功能(office文件)