[C语言]猜数字游戏

文章目录

  • 一、游戏思路揭秘
  • 二、随机数生成大法
    • 1、初探随机数:rand函数的魔力
    • 2、随机数种子:时间的魔法
    • 3、抓住时间的精髓:time函数
  • 三、完善程序
  • 四、游戏成果
    • 1、游戏效果
    • 2、源代码

一、游戏思路揭秘

猜数字游戏,这个听起来就让人心跳加速的小游戏,它的核心奥秘在于随机数。游戏的过程就像是一场寻宝探险:生成宝藏(随机数),玩家根据提示一步步接近宝藏,直到最终发现它。如果猜对了,那就是一场胜利的欢呼;如果猜错了,游戏会像个耐心的导师,告诉你 “猜大了” 或 “猜小了” ,然后鼓励你继续尝试,直到你找到那个神秘的数字。


二、随机数生成大法

1、初探随机数:rand函数的魔力

在C语言的神秘宝库中,有一个叫rand的函数。它的魔力就是:每次你呼唤它,它都会变出一个新的随机数来。不信?那我们就来试试看:

#include <stdio.h>
#include <stdlib.h>int main()
{for(int i = 0; i < 10; i++)//重复试几次{int random = rand();//这里生成随机数printf("%d ",random);//先打印出来看看}return 0;
}

接下来运行几次测试一下,会得到重复的运行结果:

41 18467 6334 26500 19169 15724 11478 29358 26962 24464

哎呀,怎么每次运行结果都一样啊?还好我们测试了一下,这是一个好习惯,可以避免无法预料的结果。
那怎么解决呢?当然是查文档啦:文档地址。

请添加图片描述

由以上文档可知:rand函数的随机值是由一个算法生成的,该算法在每次调用它时都会返回一个明显不相关的数字序列。该算法使用种子来生成序列,该序列应使用srand方法初始化为某个唯一值。

2、随机数种子:时间的魔法

那我们再看看srand方法:文档地址。

请添加图片描述

要得到真正的随机数,我们需要给rand函数一个种子,这个种子每次都要不一样。那用什么来做种子呢?时间!时间就像流水,永远在变,用它来做种子,随机数就会像魔法一样变化无穷。

3、抓住时间的精髓:time函数

在C语言中,有一个time函数,它能获取当前的时间戳。时间戳就像是一个时间的指纹,每个时刻都有它独特的印记。

好,那我们就用时间来给rand函数设置种子,看看真正的随机数是怎么诞生的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main()
{srand(time(NULL));//用时间设置种子for(int i = 0; i < 10; i++){int a = rand();printf("%d ",a);}return 0;
}

运行几次程序,得到以下输出:

22820 1628 32269 9569 7902 21478 16516 18171 16466 6404

哈哈,看,这次随机数真的变魔术一样变出来了!每次运行结果都不一样,太棒了!


三、完善程序

现在,我们已经掌握了随机数的奥秘,那就来打造一个完美的猜数字游戏吧!这个游戏将是一个if、switch、while、for、do…while、goto语句的完美结合:

#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 random_num = rand() % 100 + 1;//生成1到100之间的随机数int input = 0;//用户输入的猜测数字int num = 0;//记录用户猜测的次数while (1)//无限循环{printf("请输入猜的数字(1-100):");scanf("%d", &input);//读取用户输入//清空输入缓存,防止输入错误导致的问题for (int i = getchar(); i != '\n'; i = getchar());num++;//猜测次数加1if (input > random_num){if (num >= 10)//如果猜测次数超过10次goto byby;//跳转到游戏结束标签system("cls");printf("猜大了!\n");}else if (input < random_num){if (num >= 10)goto byby;system("cls");printf("猜小了!\n");}else{system("cls");printf("恭喜你,猜了%d次就猜对了!\n", num);getchar();//等待用户按下回车键system("cls");return;//返回主函数}}
byby:system("cls");printf("很遗憾,你没有在规定次数内猜到%d,游戏结束!\n", random_num);//游戏结束提示getchar();system("cls");
}int main()
{int input = 5;//用户输入的选择srand((unsigned)time(NULL));//初始化随机数种子do{menu();//显示菜单printf("请选择(1/0):");scanf("%d", &input);//清空输入缓存,防止输入错误导致的问题while (getchar() != '\n')input = 2;switch (input)//根据用户选择执行不同操作{case 1://选择1system("cls");printf("开始游戏!\n");getchar();//等待用户按下回车键system("cls");game();break;case 0://选择0system("cls");printf("退出游戏!\n");break;default:system("cls");printf("选择错误!\n");//输入错误,提示用户重新输入getchar();system("cls");break;}} while (input);//当用户选择0时退出循环return 0;//程序正常结束
}

这个游戏就像是一个小小的编程世界,里面充满了分支和循环的魔法。如果你还不太熟悉这些控制语句,那就快去查查资料,学学它们的魔法吧!学会了这些,你就能更好地掌握这个游戏,甚至还能打造出更多属于你的编程小宇宙呢!


四、游戏成果

1、游戏效果

经过一系列的开发与调试,游戏的最终效果已经呈现。现在,你可以尽情享受猜数字的乐趣了:

请添加图片描述

2、源代码

为了方便大家学习和交流,游戏的源代码已经在Gitee上开源。你可以通过以下链接访问并下载源代码:传送门。


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

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

相关文章

LeetCode392_判断子序列

LeetCode392_判断子序列 标签&#xff1a;#双指针 #字符串 #动态规划Ⅰ. 题目Ⅱ. 示例 0. 个人方法官方题解一&#xff1a;双指针官方题解二&#xff1a;动态规划 标签&#xff1a;#双指针 #字符串 #动态规划 Ⅰ. 题目 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序…

Python匿名函数与内置函数较难与较冷门知识点考前速记

5 lambda匿名函数与Python内置函数 lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用,例如在 map()、filter()、sorted()、list.sort() 等函数与方法中。 lambda语法格式: lambda arguments: expression lambda是 Python 的关键字,用…

DeepSeek谈《凤凰项目 一个IT运维的传奇故事》

《凤凰项目&#xff1a;一个IT运维的传奇故事》&#xff08;The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win&#xff09;是Gene Kim、Kevin Behr和George Spafford合著的一部小说&#xff0c;通过虚构的故事生动展现了IT运维中的核心挑战和Dev…

【上海大学数据库原理实验报告】MySQL基础操作

实验目的 熟悉MySQL基础操作。 实验内容 创建四张工程项目的关系表。 图 1 四张工程项目关系表的结构 检索供应零件编号为J1的工程的供应商编号SNO。检索供应零件给工程J1&#xff0c;且零件编号为P1的供应商编号SNO。查询没有正余额的工程编号、名称及城市&#xff0c;结果…

winget使用

Get-Command winget winget search qq winget install Tencent.QQ.NT

逻辑回归在信用卡欺诈检测中的实战应用

在大数据和机器学习蓬勃发展的时代&#xff0c;信用卡欺诈检测成为了保障金融安全的重要环节。逻辑回归作为一种经典的机器学习算法&#xff0c;在这一领域发挥着关键作用。本文将通过一段完整的Python代码&#xff0c;详细解析逻辑回归在信用卡欺诈检测中的具体应用过程&#…

矫平机:金属板材精密加工的“整形专家”

一、矫平机的定义与核心功能 矫平机&#xff08;Leveling Machine&#xff09;是金属加工领域的关键设备&#xff0c;主要用于消除金属板材或带材在轧制、运输过程中产生的内应力&#xff0c;矫正其弯曲、扭曲、波浪边等形变缺陷&#xff0c;使材料达到毫米级甚至微米级的平整…

百度「心响」:通用超级智能体,重新定义AI任务执行新范式

在AI技术从“对话交互”迈向“任务执行”的转折点&#xff0c;百度于2025年4月正式推出移动端超级智能体应用——心响。这款以“AI任务完成引擎”为核心的创新产品&#xff0c;被誉为“AI指挥官”&#xff0c;通过自然语言交互实现复杂任务的全流程托管&#xff0c;覆盖知识解析…

游戏性能测试

1. 分阶段&#xff0c;看目的&#xff0c;确定高中低三档测试机&#xff0c;最低档机的确定需要和客户端主程和制作人等共同确定 确定三档机的方式&#xff1a; 1. 要上线地区的top100&#xff0c;根据用户占比&#xff0c;划分出三档 2. 根据用研部门提供的数据&#xff0c;确…

react-10样式模块化(./index.module.css, <div className={welcome.title}>Welcome</div>)

1.react样式模块化 避免各个组件类名相同 相关样式冲突所以需要样式模块化。比如在组件Hello中的样式引入&#xff0c;将样式文件名更改为index.module.css如下图。 2. 文件中引入模块以及使用 文件中import引入模块样式 import welcome from "./index.module.css"…

4月30日星期三今日早报简报微语报早读

4月30日星期三&#xff0c;农历四月初三&#xff0c;早报#微语早读。 1、神舟十九号载人飞船因东风着陆场气象原因推迟返回&#xff1b; 2、林毅夫&#xff1a;到2049年中国经济体量有望达到美国的两倍&#xff1b; 3、市场监管总局&#xff1a;2024年查办商标、专利等领域违…

小刚说C语言刷题—1462小明的游泳时间

1.题目描述 伦敦奥运会要到了&#xff0c;小明在拼命练习游泳准备参加游泳比赛。 这一天&#xff0c;小明给自己的游泳时间做了精确的计时&#xff08;本题中的计时都按 24 小时制计算&#xff09;&#xff0c;它发现自己从 a 时 b 分一直游泳到当天的 c 时 d 分。 请你帮小…

SpringBoot+EasyExcel+Mybatis+H2实现导入

文章目录 SpringBootEasyExcelMybatisH2实现导入1.准备工作1.1 依赖管理1.2 配置信息properties1.3 H2数据库1.4 Spring Boot 基础概念1.5 Mybatis核心概念 1.6 EasyExcel核心概念 2.生成Excel数据工具类-随机字符串编写生成Excel的java文件 3.导入功能并且存入数据库3.1 返回结…

嵌入式开发高频面试题全解析:从基础编程到内存操作核心知识点实战

一、数组操作&#xff1a;3x3 数组的对角和、偶数和、奇数和 题目 求 3x3 数组的对角元素和、偶数元素和、奇数元素和。 知识点 数组遍历&#xff1a;通过双重循环访问数组的每个元素&#xff0c;外层循环控制行&#xff0c;内层循环控制列。对角元素判断&#xff1a; 主对…

分布式优化与一致性算法python实现

目录 摘要一、分布式优化问题描述二、一致性算法基础2.1 平均一致性(Average Consensus)2.2 Gossip 协议三、分布式梯度下降(DGD)四、分布式 ADMM 与共识优化五、收敛性与参数选择六、典型案例6.1 传感器网络参数估计6.1.1 问题描述6.1.2 算法设计6.1.3 实验结果6.2 分布式…

突破SQL注入字符转义的实战指南:绕过技巧与防御策略

在渗透测试中&#xff0c;SQL注入始终是Web安全的重点攻击手段。然而&#xff0c;当开发者对用户输入的特殊字符&#xff08;如单引号、反斜杠&#xff09;进行转义时&#xff0c;传统的注入方式往往会失效。本文将深入探讨如何绕过字符转义限制&#xff0c;并给出防御建议。 目…

算法导论第6章思考题

6.3-2 func(A) 1 A.heap-sizeA.len 2 \quad for i ⌊ A . l e n 2 ⌋ \lfloor {A.len\over2}\rfloor ⌊2A.len​⌋ downto 1 3 \qquad MAX-HEAPIFY(A,i) 对于第2行的循环控制变量i来说&#xff0c;为啥要求它是从 ⌊ A . l e n 2 ⌋ \lfloor {A.len\over2}\rfloor ⌊2A.len​⌋…

可商用,可离线运行,可API接口调用的开源AI数字人项目Heygem,喂饭级安装教程

前言 Heygem 是一款开源项目&#xff0c;致力于发挥你电脑硬件的全部潜力&#xff0c;让你无需依赖云端&#xff0c;也能在本地高效运行各类开源AI数字人模型。无论是 AI 语音对话、虚拟主播&#xff0c;还是数字人驱动引擎&#xff0c;Heygem 通过底层性能调度与资源管理优化&…

三个概念:DataBinding,Dependency Property 与DataTemplate

WPF 核心概念详解&#xff1a;DataBinding、Dependency Property 和 DataTemplate 1. DataBinding (数据绑定) 基本概念 DataBinding 是 WPF 的核心机制&#xff0c;用于在 UI 元素和数据源之间建立自动同步关系。 关键特性 双向绑定&#xff1a;数据变化自动反映到 UI&…

C语言教程(二十六):C 语言内存管理详解

一、C 语言内存区域划分 在 C 语言程序运行时,内存主要分为以下几个区域: 1.1 栈区(Stack) 特点:由编译器自动分配和释放,主要存储函数的局部变量、函数参数、返回地址等。栈区的内存分配和释放是按照后进先出(LIFO)的原则进行的,速度快。示例: #include <stdio.…