C语言——扫雷游戏
扫雷游戏通常是一个由方格组成的区域内进行的,其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置,同时避免自己点到地雷而导致游戏失败。游戏开始时,玩家通常只能看到一部分方格,而其余的方格则需要通过点击来逐渐揭示其内容(目前学的比较低级请见谅)。
下面这个图是网页版扫雷的界面:

现在开始讲解代码:
写一个完整代码首先都是从主函数开始(前面写的游戏可以发现主函数的流程几乎不变),do……while(一上来就先进行菜单选择),主函数包含菜单还有对菜单的输入与选择(这个没什么难度,略写),而且一般游戏都需要菜单,玩家才可以清楚了解和选择。
void menu()
{printf("**************************************\n");printf("*********** 1.play ************\n");printf("*********** 0.exit ************\n");printf("**************************************\n");
}int main()
{int input = 0;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;
}
进行选择:这里为了后续的写作当然是要选1的,接着跳到game函数。
void game()
{char mine[ROWS][COLS] = { 0 };char show[ROWS][COLS] = { 0 };InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');//PrintBoard(mine, ROW, COL);//这个不需要打印,不然就看着答案排雷了PrintBoard(show, ROW, COL);SetMine(mine, ROW, COL);PrintBoard(mine, ROW, COL);FindMine(show, mine, ROW, COL);
}
扫雷游戏内部需要两个数组一个是屏幕显现出来(show);另一个则是藏在我们背后(mine),这就是这个游戏的巧妙之处。而且这个数组显现出来的是9X9的数组,但是玩游戏需要计算坐标周围一圈,假设想要检验数组四条靠边的坐标,计算坐标一圈数组会越界这时需要数组都加二(即四条边都加一)
#define ROW 9
#define COL 9#define ROWS ROW+2
#define COLS COL+2
一开始要对这两个数组初始化,而且初始化时需要整个数组都初始化而不是只对显现出来的数组初始化,不然后面会影响。show数组初始化没什么要求,然而为了后面计算【至于为什么后面会提到】mine数组初始化为‘0’(即字符0)。这里有一个简便的操作,就是数组设置为board,这样不管是show还是mine只需要改变数组就可以调用初始化的这个函数。
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{int i = 0;int j = 0;for (i = 0; i < rows; i++){for (j = 0; j < cols; j++){board[i][j] = set;}}
}
接下来就是打印数组,单纯只打印数组的话数坐标有些困难,所以需要在数组前标数字方便数数,还需要分界线。
void PrintBoard(char board[ROWS][COLS], int row, int col)
{printf("--------扫雷-------\n");int i = 0;int j = 0;for (i = 0; i <= row; i++){if (i != 0) {printf(" %d", i);}else{printf(" ");}}printf("\n");for (i = 0; i <= row; i++){printf("--");}printf("\n");for (i = 1; i <= row; i++){printf("%d|", i);for (j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}for (i = 0; i <= row; i++){printf("--");}printf("\n\n");
}

下面就到布置地雷,游戏分初级,中级,高级。我们就先简单一点的设置10个地雷,然后就是随机挑选坐标(当然是没有地雷的坐标中挑选啦),选中一个那对应的地雷数要减少一个,这样才知道地雷是否符合标准。
#define EASY 10void SetMine(char mine[ROWS][COLS], int row, int col)
{srand((unsigned int)time(NULL));int count = EASY;while (count){int a = rand() % row + 1;int b = rand() % col + 1;if (mine[a][b] == '0'){mine[a][b] = '1';count--;}}
}
最后就是重难点排查地雷,先要输入你要排查的坐标,讨论输入的坐标是否符合数组范围,然后再看这个坐标是否有地雷,如若有雷游戏结束且需要打印mine数组的地雷位置供玩家参考;相反没有地雷的话需要打印周围一圈地雷的数量,这个就是mine数组初始化为字符0的原因,数字0和字符0之间相差一个字符0,所以计算地雷数量只需将坐标周围的字符分别都减一个字符0再相加起来就是坐标周围一圈的地雷数量,show数组中是字符,所以地雷数量还需加一个字符0,在打印show数组就会出现地雷数。
游戏的胜利是需要把所有的不是地雷的坐标找出来才算胜利,所以需要累计排查的坐标是否满足总的坐标减去地雷数,当然过程中不能有重复排查的坐标,不然满足但还有坐标没有排查,这就不符合游戏规则。
int get_round_mine(char mine[ROWS][COLS], int x, int y)
{int i = 0;int j = 0;int ch = 0;for (i = x - 1; i <= x + 1; i++){for (j = y - 1; j <= y + 1; j++){ch = ch + (mine[i][j] - '0');}}return ch;
}void FindMine(char show[ROWS][COLS], char mine[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int win = 0;while (win < ROW * COL - EASY){printf("请输入你要排查的坐标:");scanf("%d %d", &x, &y);if (x > 0 && x <= ROW && y > 0 && y <= COL){if (show[x][y] != '*'){printf("该坐标已被排查过\n");continue;}if (mine[x][y] == '1'){printf("踩到地雷,游戏结束!!!\n");PrintBoard(mine, ROW, COL);break;}else{int n = get_round_mine(mine, x, y);show[x][y] = n + '0';PrintBoard(show, ROW, COL);win++;}}else{printf("输入超过限制,无法检测是否有地雷!\n");}}if (win == ROW * COL - EASY){printf("扫雷成功,你太厉害了吧!\n");}
}
现在这个代码还不是很好,和网页版的还是有差距的。目前能力有限往后就不太会了,见谅。

相关文章:
C语言——扫雷游戏
扫雷游戏通常是一个由方格组成的区域内进行的,其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置,同时避免自己点到地雷而导致游戏失败。游戏开始时,玩家通常只能看到一部分方格,而其余的方格则需要…...
【LLM】-16-评估LLM-与标准答案的差距
目录 1、评估回答是否正确 1.1、util_zh 1.2、eval_zh 1.3、评估 2、评估生成答案与标准答案的差距 2.1、eval_zh2 2.2、评估 即使没有提供的理想答案,只要能制定一个评估标准,就可以使用一个 LLM 来评估另一个 LLM 的输出。 如果可以提供理想答…...
WeNet 2.0:更高效的端到端语音识别工具包
WeNet 2.0:更高效的端到端语音识别工具包 原文链接:[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包,WeNet 2.0在此基础上进行了四项主要更新,…...
阿里大模型调用 = 》通义千问大语言模型
背景:简单的通过API或者SDK在线调用阿里云大模型(基于百炼平台),基于在线知识库 参考地址:安装阿里云百炼SDK_大模型服务平台百炼(Model Studio)-阿里云帮助中心 (aliyun.com) 1、获取API-KEY 当您通过API/SDK调用大模…...
idea使用free流程,2024idea免费使用
1.先到官网下载,这里选择win系统的,点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好,安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...
算法_链表专题---持续更新
文章目录 前言两数相加题目要求题目解析代码如下 两两交换链表中的结点题目要求题目解析代码如下 重排链表题目要求题目解析代码如下 合并K个升序链表题目要求题目解析 K个一组翻转链表题目要求题目解析代码如下 前言 本文将记录leetcode链表算法题解,包含题目有&a…...
在Windows MFC\C++编程中,如何使用OnCopyData函数
在C中,OnCopyData 函数通常不是标准C库的一部分,而是与特定的图形用户界面(GUI)框架相关联,如Microsoft Foundation Classes (MFC) 或 Windows API 编程。在MFC应用程序中,OnCopyData 是用于处理来自其他应…...
【Qt】项目代码
main.cpp文件 argc:命令行参数个数。*argv[ ]:每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序,一定需要QApplication对象。 widget w; 在创建项目的时候,勾选widg…...
MySQL中常用工具
MySQL自带的系统数据库 常用工具 MySQL mysqladmin mysqlbinlog mysqldump mysqlimport/source mysqlimport只能导入文本文件,不能导入sql文件...
关于儿童编程语言
青少年通常会通过Scratch或Python开始学习编程。在这两种语言中,代码的编写(或者在Scratch中是构建)方式类似于英语,这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…...
[io]进程间通信 -信号函数 —信号处理过程
sighandler_t signal(int signum, sighandler_t handler); 功能: 信号处理函数 参数: signum:要处理的信号 handler:信号处理方式 SIG_IGN:忽略信号 SIG_DFL:执行默认操作 handler:捕捉信 …...
RoboDK的插件
目录 collision-free-planner: opc-ua: collision-free-planner: RoboDK 的无碰撞规划器插件使用概率路线图 (PRM) 自动在机器人工作空间内创建无碰撞路径。 有关无碰撞规划器的更多信息,请访问我们的 文档。 生成参数无碰撞…...
List<HashMap<String, Object>>排序
如果列表中的元素类型是List<HashMap<String, Object>>,排序时需要考虑到value可能是任意类型的对象。在这种情况下,你可以针对具体的类型进行比较,或者使用Comparable接口来确保对象可以被正确比较。 示例代码 假设我们想要根据…...
【大数据】探索大数据基础知识:定义、特征与生态系统
欢迎来到我的博客,很高兴能够在这里和您见面!欢迎订阅相关专栏: 工💗重💗hao💗:野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典:收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...
营销材料翻译质量对销售渠道的影响
在当今的全球市场中,与不同受众进行有效沟通的能力对于企业的成功至关重要。营销材料的高质量翻译在通过销售渠道塑造客户旅程方面发挥着重要作用,影响着知名度、参与度、转化率和保留率。方法如下: 提高品牌知名度 在销售渠道的顶端&#x…...
centos7.9安装k8s 1.3
centos7.9安装k8s 1.3 k8s环境规划:初始化修改网卡配置两台服务器都执行 配置阿里yum源 安装containerd服务安装初始化k8s需要的软件包kubeadm初始化k8s集群 扩容k8s集群-添加第一个工作节点安装kubernetes网络组件-Calico测试在k8s创建pod是否可以正常访问网络和co…...
【第七节】python多线程及网络编程
目录 一、python多线程 1.1 多线程的作用 1.2 python中的 threading 模块 1.3 线程锁 二、python网络编程 2.1 通过socket访问网络 2.2 python2.x中的编码问题 2.3 python3的编码问题 一、python多线程 1.1 多线程的作用 多线程技术在计算机编程中扮演着重要的角色&a…...
Linux Shell编程--变量
前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除 变量: bash作为程序设计语言和其它高级语言一样也提供使用和定义变量的功能 预定义变量、环境变量、自定义变量、位置变量 一、自定义变…...
软文写作必须掌握的技巧有哪些?
现代互联网飞速发展的时代,硬广逐渐变的效果越来越差,而软文推广已经成为网络营销的重要组成部分了,一篇好的软文往往能为你的产品、网站带来意想不到的效果。 用于做营销的软文,我们不能像写普通文章那样随意。一篇优质的软文会让…...
探索灵办AI:智能办公的好帮手
引言 随着AI工具的增多,选择合适的AI助手变得尤为重要。ChatGPT的订阅费用高且功能单一,很多小伙伴开始寻找更具性价比和多功能的替代品。灵办AI以其便捷、高效、多功能的特点,成为许多朋友的新宠。 灵办AI助手是一款多功能的全能AI助手&am…...
云南塑料管公司哪家好
在云南,塑料管行业面临着诸多挑战,这些问题严重影响了工程质量和使用体验。行业痛点凸显塑料管的地域适配性差、产品品质参差不齐、性价比失衡、服务不完善以及供应链不稳定是当前行业普遍面临的难题。云南山区多、昼夜温差大、雨季漫长且软土地基普遍&a…...
阿里云新用户专享:手把手教你用CentOS 7搭建《我的世界》PaperSpigot服务器(含端口配置与后台运行)
阿里云新用户专享:CentOS 7搭建《我的世界》高性能服务器全攻略 第一次在云服务器上搭建《我的世界》服务器时,我被各种专业术语和命令行操作搞得晕头转向。直到发现阿里云新用户的优惠活动,才意识到原来用不到一顿火锅的钱就能拥有专属游戏…...
Modbus调试工具《二》 Master仿真器实战技巧解析
1. ModbusMaster仿真器核心功能解析 第一次打开ModbusMaster仿真器时,很多新手会被界面上的各种按钮和选项搞得晕头转向。其实这个工具的设计逻辑非常清晰,主要分为四大功能模块:连接配置、数据采集、寄存器操作和辅助工具。我刚开始用的时候…...
推荐6款AI论文降重工具,智能改写提升原创度,减少重复率。
开头总结工具对比(技能4) �� 根据实际使用案例分析,从处理效率、降重能力和核心功能三个关键指标对六款主流AI论文辅助平台进行横向评测,结果显示各平台在文本处理速度、重复率降低幅度及特色功能方面存在显…...
3个技巧让旧iPhone重获新生:Legacy iOS Kit降级实战指南
3个技巧让旧iPhone重获新生:Legacy iOS Kit降级实战指南 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit …...
SEO排名推广软件有哪些技巧
SEO排名推广软件有哪些技巧 在当今互联网时代,搜索引擎优化(SEO)已经成为了各种企业和个人网站提升流量和业务的重要手段。其中,SEO排名推广软件能够帮助用户更加高效地实现网站的优化和推广。SEO排名推广软件有哪些技巧呢&#…...
盘姬工具箱实用工具推荐:从文件恢复到批量重命名
在盘姬工具箱的众多功能中,有一些工具特别值得推荐。 这些工具都能切实解决用户在日常使用电脑过程中遇到的各种问题。 而且这些工具的操作都非常简单直观,不需要用户具备专业的技术知识。 无论是电脑新手还是资深用户,都能通过这些工具获…...
HoRain云--OpenCode 配置
🎬 HoRain 云小助手:个人主页 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。 目录 ⛳️ 推荐 …...
如何使用 C# 创建、修改和删除 Excel 中的 VBA 宏(无需Microsoft Excel)
目录 为什么在 Excel 中使用 VBA 宏? 配置 C# 环境以操作 Excel VBA 宏 使用 C# 在 Excel 中创建 VBA 宏 使用 C# 读取 Excel 中的 VBA 宏 使用 C# 修改 Excel 中的 VBA 宏 使用 C# 删除 Excel 中的 VBA 宏 在 Excel 中创建和编辑 VBA 宏的实用建议 常见问题…...
2025年大模型年度复盘:RL、Agent与Omni的技术趋势解读
一、项目介绍准备 项目 1:基于 RAG 的大语言模型关系抽取 1、为什么不用传统语义相似度检索,改用关系原型检索? 传统相似度检索易召回伪近邻样本(语义相近、头尾实体不同→关系不同),干扰模型判断。 我先把…...
