当前位置: 首页 > news >正文

[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.xdnf.cn/news/223003.html

相关文章:

  • 软件系统容量管理:反模式剖析与模式应用
  • 什么是环境变量,main函数的命令行参数的概念和作用,以及进程地址空间详解
  • antd中的表格穿梭框(Transfer)如何使用
  • 类和对象 (拷贝构造函数和运算符重载)上
  • MySQL学习总结
  • 华锐视点历经十八年沉淀所形成的产品特性
  • 【AI平台】n8n入门4:n8n云创建工作流(无须搭建,快速试用14天)
  • TypeScript 全局类型声明文件规范性分析与归纳
  • 赛事季突围!备战2025全国信息素养大赛 python挑战赛~
  • JavaScript 相关知识点整理
  • 【LLM】Qwen3模型训练和推理
  • Proser:重新介绍
  • Linux(权限管理)
  • FastAPI的发展历史
  • 在VMware上创建Ubuntu虚拟机,与Xshell和Xftp的连接和使用
  • 文心一言开发指南08——千帆大模型平台推理服务API
  • 9.idea中创建springboot项目_jdk1.8
  • 无需下载,免费在线AI音乐生成器:爱狐AI详解与使用
  • C# 继承详解
  • LangChain4j +DeepSeek大模型应用开发——5 持久化聊天记忆 Persistence
  • 问题整理篇---(1)keil
  • Linux查看程序端口占用情况
  • Kubernetes in action-Kubernetes的pod
  • 使用Python将YOLO数据集拆分成固定文件数量的小数据集
  • Mixture-of-Experts(MoE)原理与在DeepSeek中的应用
  • HOOPS 2025全面适配Linux ARM64:性能突破、能耗优化与工业3D可视化部署场景全解析!
  • Samba-系统集成
  • 混淆矩阵(Confusion Matrix);归一化混淆矩阵(Confusion Matrix Normalized)
  • Mac配置Maven环境变量避坑
  • 无人机航拍牛羊检测数据集VOC+YOLO格式1021张3类别小目标