【C语言小游戏--猜数字】

文章目录

  • 前言
  • 1.游戏描述
  • 2.代码实现
    • 2.1打印菜单
    • 2.2构建基础框架
    • 2.3玩游戏
      • 2.3.1生成随机数
        • 2.3.1.1rand()
        • 2.3.1.2srand()
        • 2.3.1.3time()
      • 2.3.2game()
    • 2.4自己设定猜的次数
  • 3.完整代码

前言

猜数字小游戏是我们大多数人学习C语言时都会了解到的一个有趣的C语言小游戏,下面我将详细介绍该游戏的实现和编程逻辑。玩小游戏的同时,也能对C语言控制语句有更好的认识。

在这里插入图片描述

1.游戏描述

电脑随机生成一个1-100的数字,玩家来猜。玩家可以根据自己需要,设置每次猜的次数。如果在设置的次数内猜对了,则提示你猜对了,否则提示猜错了。

2.代码实现

2.1打印菜单

我们在玩游戏前,都是先打印菜单,在进行选择。所以此处选择do-while循环

#include<stdio.h>
void menu()
{printf("***********************\n");printf("***  1.play  0.exit ***\n");printf("***********************\n");
}
int main()
{do{menu();} while (1);return 0;
}

效果展示:
在这里插入图片描述

2.2构建基础框架

选择1:玩游戏;
选择0:退出;
选择其它:重新选择

int main()
{int input = 0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:printf("玩游戏\n");break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择:\n");}} while (input);return 0;
}

效果展示:
在这里插入图片描述

2.3玩游戏

既然我们要玩猜数字游戏,那么我们选择1后,不能就打印一个玩游戏吧,因此下面来真正实现猜数字游戏。

2.3.1生成随机数

怎么才能生成随机数呢?
C语言提供了一个函数用来生成随机数

2.3.1.1rand()

在这里插入图片描述

查看文档我们发现:

  • rand函数会返回⼀个伪随机数,这个随机数的范围是在0~RAND_MAX之间,这个RAND_MAX的大小是 依赖编译器上实现的,但是⼤部分编译器上是32767。
  • 在调用rand之前,使用srand函数为伪随机数生成器提供种子。
  • rand函数的使用需要包含⼀个头文件是:stdlib.h

什么意思呢?我们不妨写代码测试一下:
运行一下发现,确实产生了随机数。但是当我运行第二次发现,产生的随机数和第一次的一样,那怎么能行,这不是BUG吗?

在这里插入图片描述
在这里插入图片描述

如果再深⼊了解⼀下,我们就不难发现,其实rand函数⽣成的随机数是伪随机的,伪随机数不是真的随机数,是通过某种算法⽣成的随机数。真正的随机数的是⽆法预测下⼀个值是多少的。⽽rand函数是对⼀个叫“种⼦”的基准值进⾏运算⽣成的随机数。
之所以前⾯每次运⾏程序产⽣的随机数序列是⼀样的,那是因为rand函数⽣成随机数的默认种⼦是1。 如果要⽣成不同的随机数,就要让种⼦是变化的。

种子要变化,我们再让种子是一个随机值不就行了嘛
NO,大漏特漏
如果这样的话,就死循环了

2.3.1.2srand()

刚才在文档中提到的一个srand是什么呢?
在这里插入图片描述

程序中在调⽤ rand 函数之前先调⽤ srand 函数,通过 srand 函数的参数seed来设置rand函数⽣成随机数的时候的种⼦,只要种⼦在变化,每次生成的随机数序列也就变化起来了。
那也就是说给srand的种⼦如果是随机的,rand就能⽣成随机数;在⽣成随机数的时候⼜需要⼀个随机数,这就又矛盾了

那电脑上什么东西是一直变化的呢?——时间

2.3.1.3time()

在这里插入图片描述

  • time 函数会返回当前的⽇历时间,其实返回的是1970年1⽉1⽇0时0分0秒到现在程序运行时间之间的差值,单位是秒。 如果
  • time()的参数timer是NULL,就只返回这个时间的差值。time函数返回的这个时间差也被叫做:时间戳

如果是这样,我们就可以这样写代码:
在这里插入图片描述
在这里插入图片描述
这样我们发现数字就随机起来了,那我们的代码接下来可就好写咯。
我们需要的随机数是1-100之间的,所以我们可以这样写代码:
在这里插入图片描述

2.3.2game()

生成随机数

void game()
{srand((unsigned int)time(NULL));int random_number = rand() % 100 + 1;printf("%d\n", random_number);
}

效果如下:

在这里插入图片描述
但是如果你是老司机,手速比较快的话,生成的随机数会相同,如下:
在这里插入图片描述
这是为什么呢?
因为当我们运行一次game(),就会调用一次srand(),这样在较短时间内调用,就会产生相同的数字
因此,srand函数不需要频繁调用的,⼀次运⾏的程序中调用⼀次就够了。
所以,我们可以将其放在main()中

void game()
{int random_number = rand() % 100 + 1;int number = 0;while (1){printf("请猜数字:");scanf("%d", &number);if (number > random_number){printf("您猜大了\n");}else if (number < random_number){printf("您猜小了\n");}else{printf("恭喜你,猜对了!\n");break;}}
}

2.4自己设定猜的次数

用户自己输入次数,如果未在设置的次数中猜对,则提示失败
代码变动地方如下:

switch (input){case 1:printf("你感觉你几次就能猜对呢?\n");scanf("%d", &count);game(count);break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择:\n");}
void game(int count)
{int random_number = rand() % 100 + 1;int number = 0;while (count){printf("请猜数字:");scanf("%d", &number);if (number > random_number){printf("您猜大了\n");}else if (number < random_number){printf("您猜小了\n");}else{printf("恭喜你,猜对了!\n");break;}count--;}if (count == 0){printf("你未在规定的次数内猜对,有点高估自己了,还得练哦\n");}
}

效果如下:
在这里插入图片描述
在这里插入图片描述

3.完整代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{printf("***********************\n");printf("***  1.play  0.exit ***\n");printf("***********************\n");
}
void game(int count)
{int random_number = rand() % 100 + 1;int number = 0;while (count){printf("请猜数字:");scanf("%d", &number);if (number > random_number){printf("您猜大了\n");}else if (number < random_number){printf("您猜小了\n");}else{printf("恭喜你,猜对了!\n");break;}count--;}if (count == 0){printf("你未在规定的次数内猜对,有点高估自己了,还得练哦\n");}
}
int main()
{srand((unsigned int)time(NULL));int input = 0;int count = 0;do{menu();printf("请选择:");scanf("%d", &input);switch (input){case 1:printf("你感觉你几次就能猜对呢?\n");scanf("%d", &count);game(count);break;case 0:printf("退出游戏\n");break;default:printf("选择错误,请重新选择:\n");}} while (input);return 0;
}

本次分享就到这里啦,感谢您的观看
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/167424.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Javascript命令模式

Javascript命令模式 1 什么是命令模式2 命令模式的例子—菜单程序3 JavaScript 中的命令模式4 撤销命令5 宏命令 1 什么是命令模式 在一个餐厅中&#xff0c;当客人现场点餐或者打电话订餐时&#xff0c;老板会把客人的需求写在清单上&#xff0c;厨师会按照清单的顺序给客人炒…

驱动开发3 ioctl函数的使用+3个实例(不传递第三个参数、第三个参数为整型、第三个参数为地址)

开发板&#xff1a;stm32mp157aaa&#xff08;Cortex-A7*2 Cortex-M4*1&#xff09;开发环境&#xff1a;vscode、串口工具 1 引入ioctl函数的意义 linux操作系统中有意将数据的读写和读写功能的选择分别交给不同的函数去完成。就让read/write函数只进行数据的读写即可&#x…

多版本并发控制MVCC

什么是MVCC MVCC &#xff08;Multiversion Concurrency Control&#xff09;&#xff0c;多版本并发控制。顾名思义&#xff0c;MVCC 是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之&#xff0c;…

SolidWorks模型导入到Gazebo中

首先建立好solidworks模型&#xff0c;然后另存为stl格式&#xff0c; 导出为STL文件时&#xff0c;文件名最好不要是中文&#xff0c;并且要将后缀STL改为stl&#xff0c;否则Gazebo无法识别 这是我创建好的机器人充电桩模型&#xff1a; 尺寸是单位是mm&#xff1a; 135mm …

【图像误差测量】测量 2 张图像之间的差异,并测量图像质量(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

图论06-【无权无向】-图的遍历并查集Union Find-力扣695为例

文章目录 1. 代码仓库2. 思路2.1 UF变量设计2.2 UF合并两个集合2.3 查找当前顶点的父节点 find(element) 3. 完整代码 1. 代码仓库 https://github.com/Chufeng-Jiang/Graph-Theory 2. 思路 2.1 UF变量设计 parent数组保存着每个节点所指向的父节点的索引&#xff0c;初始值为…

面向对象(基础)特征一:封装性(encapsulation)

文章目录 一、介绍&#xff08;1&#xff09;封装性&#xff08;2&#xff09;权限修饰符 二、案例&#xff08;1&#xff09;案例1 三、练习&#xff08;1&#xff09;练习1&#xff08;2&#xff09;练习2&#xff08;3&#xff09;练习3&#xff08;4&#xff09;练习4 面向…

数据丢失恢复怎么操作好?五种方法帮您恢复数据

丢失文件可能会造成灾难性的后果&#xff0c;因此您绝对需要最好的 PC 恢复软件。数据恢复软件必须快速、可靠并涵盖大多数文件格式。我们列表中最好的工具是一个甚至可以检索隐藏文件的解决方案。我们选择的另一个解决方案能够恢复700 多种独特的文件格式。 这种噩梦可能发生…

【PyTorch实战演练】自调整学习率实例应用(附代码)

目录 0. 前言 1. 自调整学习率的常用方法 1.1 ExponentialLR 指数衰减方法 1.2 CosineAnnealingLR 余弦退火方法 1.3 ChainedScheduler 链式方法 2. 实例说明 3. 结果说明 3.1 余弦退火法训练过程 3.2 指数衰减法训练过程 3.3 恒定学习率训练过程 3.4 结果解读 4. …

华为OD机试 - 代表团坐车 - 动态规划(Java 2023 B卷 200分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

人工智能(5):深度学习简介

1 深度学习 —— 神经网络简介 深度学习&#xff08;Deep Learning&#xff09;&#xff08;也称为深度结构学习【Deep Structured Learning】、层次学习【Hierarchical Learning】或者是深度机器学习【Deep Machine Learning】&#xff09;是一类算法集合&#xff0c;是机器学…

Jenkins+Ant+Jmeter接口自动化集成测试

一、Jenkins安装配置 1、安装配置JDK1.6环境变量&#xff1b; 2、下载jenkins.war&#xff0c;放入C:\jenkins目录下&#xff0c;目录位置随意&#xff1b; Jenkins启动方法&#xff1a; cmd进入Jenkins目录下&#xff0c;执行java -jar jenkins.war 浏览器输入&#xff1a;l…

html5语义化标签

目录 前言 什么是语义化标签 常见的语义化标签 语义化的好处 前言 HTML5 的设计目的是为了在移动设备上支持多媒体。之前网页如果想嵌入视频音频&#xff0c;需要用到 flash &#xff0c;但是苹果设备是不支持 flash 的&#xff0c;所以为了改变这一现状&#xff0c;html5 …

解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题

本文 Element-ui 版本 2.x 问题 在 el-table-column 上需根据不同 v-if 条件来控制列显隐时&#xff0c;就会出现列数据展示错乱的情况&#xff08;要么 A 列的数据显示在 B 列上&#xff0c;或者后端返回有数据的但是显示的为空&#xff09;&#xff0c;如下所示。 <tem…

使用screen实现服务器代码一直运行

1.安装screen sudo apt install screen 2.创建一个screen&#xff08;创建一个名为chatglm的新的链接&#xff0c;用来一直运行 screen -S chatglm 3.查看进程列表 screen -ls 创建之后&#xff0c;就可以在当前窗口利用cd命令进入要执行的项目中&#xff0c;开始执行&#xf…

pow函数

pow函数 pow的翻译是指数表达式 第一个参数为底数&#xff0c;第二个参数为指数 返回值为&#xff1a; 头文件为include <math.h> #include <stdio.h> #include <math.h>int main() {int ret (int)pow(10, 2);printf("%d\n", ret);return 0; }…

分享一下我家网络机柜,家庭网络设备推荐

家里网络机柜搞了几天终于搞好了&#xff0c;非专业的&#xff0c;走线有点乱&#xff0c;勿喷。 从上到下的设备分别是&#xff1a; 无线路由器&#xff08;当ap用&#xff09;:TL-XDR6088 插排&#xff1a;德木pdu机柜插排 硬盘录像机&#xff1a;TL-NVR6108-L8P 第二排左边…

云计算认证有哪些?认证考了有什么用?

云计算作为一项快速发展的技术&#xff0c;对人才的需求持续增长。无论是男生还是女生&#xff0c;只要具备相关的技能和知识&#xff0c;都可以在云计算领域找到就业机会。 目前入行云计算最好最便捷的方式就是考证&#xff0c;拿到一个云计算相关的证书&#xff0c;就能开启…

2023最新UI酒桌喝酒游戏小程序源码 娱乐小程序源码 带流量主

2023最新UI酒桌喝酒游戏小程序源码 娱乐小程序源码 带流量主 修改增加了广告位&#xff0c;根据文档直接替换&#xff0c;原版本没有广告位 直接上传源码到开发者端即可 通过后改广告代码&#xff0c;然后关闭广告展示提交&#xff0c;通过后打开即可 无广告引流 流量主版…

No171.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…