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

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语言——扫雷游戏

扫雷游戏通常是一个由方格组成的区域内进行的&#xff0c;其中随机分布着一定数量的地雷 。玩家的目标是通过点击方格来标记出所有地雷的位置&#xff0c;同时避免自己点到地雷而导致游戏失败。游戏开始时&#xff0c;玩家通常只能看到一部分方格&#xff0c;而其余的方格则需要…...

【LLM】-16-评估LLM-与标准答案的差距

目录 1、评估回答是否正确 1.1、util_zh 1.2、eval_zh 1.3、评估 2、评估生成答案与标准答案的差距 2.1、eval_zh2 2.2、评估 即使没有提供的理想答案&#xff0c;只要能制定一个评估标准&#xff0c;就可以使用一个 LLM 来评估另一个 LLM 的输出。 如果可以提供理想答…...

WeNet 2.0:更高效的端到端语音识别工具包

WeNet 2.0:更高效的端到端语音识别工具包 原文链接&#xff1a;[2203.15455] WeNet 2.0: More Productive End-to-End Speech Recognition Toolkit (arxiv.org) 1.摘要 WeNet是一个开源的端到端语音识别工具包&#xff0c;WeNet 2.0在此基础上进行了四项主要更新&#xff0c…...

阿里大模型调用 = 》通义千问大语言模型

背景&#xff1a;简单的通过API或者SDK在线调用阿里云大模型&#xff08;基于百炼平台&#xff09;&#xff0c;基于在线知识库 参考地址&#xff1a;安装阿里云百炼SDK_大模型服务平台百炼(Model Studio)-阿里云帮助中心 (aliyun.com) 1、获取API-KEY 当您通过API/SDK调用大模…...

idea使用free流程,2024idea免费使用

1.先到官网下载&#xff0c;这里选择win系统的&#xff0c;点击下图的.exe https://www.jetbrains.com/idea/download/?sectionwindows 2.下载好后基本上就是一直点击“下一步”到直到安装好&#xff0c;安装好后先打开软件后关闭退出 3.下载配配套资料 链接: https://pan.ba…...

算法_链表专题---持续更新

文章目录 前言两数相加题目要求题目解析代码如下 两两交换链表中的结点题目要求题目解析代码如下 重排链表题目要求题目解析代码如下 合并K个升序链表题目要求题目解析 K个一组翻转链表题目要求题目解析代码如下 前言 本文将记录leetcode链表算法题解&#xff0c;包含题目有&a…...

在Windows MFC\C++编程中,如何使用OnCopyData函数

在C中&#xff0c;OnCopyData 函数通常不是标准C库的一部分&#xff0c;而是与特定的图形用户界面&#xff08;GUI&#xff09;框架相关联&#xff0c;如Microsoft Foundation Classes (MFC) 或 Windows API 编程。在MFC应用程序中&#xff0c;OnCopyData 是用于处理来自其他应…...

【Qt】项目代码

main.cpp文件 argc&#xff1a;命令行参数个数。*argv[ ]&#xff1a;每一个命令行参数的内容。main的形参就是命令行参数。QApplication a(argc, argv) 编写一个Qt的图形化界面程序&#xff0c;一定需要QApplication对象。 widget w; 在创建项目的时候&#xff0c;勾选widg…...

MySQL中常用工具

MySQL自带的系统数据库 常用工具 MySQL mysqladmin mysqlbinlog mysqldump mysqlimport/source mysqlimport只能导入文本文件&#xff0c;不能导入sql文件...

关于儿童编程语言

青少年通常会通过Scratch或Python开始学习编程。在这两种语言中&#xff0c;代码的编写&#xff08;或者在Scratch中是构建&#xff09;方式类似于英语&#xff0c;这使得初学者更容易学习。Scratch的一个重要卖点是对视觉和运动感知学习者非常友好。这些代码块按颜色编码&…...

[io]进程间通信 -信号函数 —信号处理过程

sighandler_t signal(int signum, sighandler_t handler); 功能&#xff1a; 信号处理函数 参数&#xff1a; signum&#xff1a;要处理的信号 handler&#xff1a;信号处理方式 SIG_IGN&#xff1a;忽略信号 SIG_DFL&#xff1a;执行默认操作 handler&#xff1a;捕捉信 …...

RoboDK的插件

目录 collision-free-planner&#xff1a; opc-ua&#xff1a; collision-free-planner&#xff1a; RoboDK 的无碰撞规划器插件使用概率路线图 (PRM) 自动在机器人工作空间内创建无碰撞路径。 有关无碰撞规划器的更多信息&#xff0c;请访问我们的 文档。 生成参数无碰撞…...

List<HashMap<String, Object>>排序

如果列表中的元素类型是List<HashMap<String, Object>>&#xff0c;排序时需要考虑到value可能是任意类型的对象。在这种情况下&#xff0c;你可以针对具体的类型进行比较&#xff0c;或者使用Comparable接口来确保对象可以被正确比较。 示例代码 假设我们想要根据…...

【大数据】探索大数据基础知识:定义、特征与生态系统

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 工&#x1f497;重&#x1f497;hao&#x1f497;&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题.…...

营销材料翻译质量对销售渠道的影响

在当今的全球市场中&#xff0c;与不同受众进行有效沟通的能力对于企业的成功至关重要。营销材料的高质量翻译在通过销售渠道塑造客户旅程方面发挥着重要作用&#xff0c;影响着知名度、参与度、转化率和保留率。方法如下&#xff1a; 提高品牌知名度 在销售渠道的顶端&#x…...

centos7.9安装k8s 1.3

centos7.9安装k8s 1.3 k8s环境规划&#xff1a;初始化修改网卡配置两台服务器都执行 配置阿里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编程--变量

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 变量&#xff1a; bash作为程序设计语言和其它高级语言一样也提供使用和定义变量的功能 预定义变量、环境变量、自定义变量、位置变量 一、自定义变…...

软文写作必须掌握的技巧有哪些?

现代互联网飞速发展的时代&#xff0c;硬广逐渐变的效果越来越差&#xff0c;而软文推广已经成为网络营销的重要组成部分了&#xff0c;一篇好的软文往往能为你的产品、网站带来意想不到的效果。 用于做营销的软文&#xff0c;我们不能像写普通文章那样随意。一篇优质的软文会让…...

探索灵办AI:智能办公的好帮手

引言 随着AI工具的增多&#xff0c;选择合适的AI助手变得尤为重要。ChatGPT的订阅费用高且功能单一&#xff0c;很多小伙伴开始寻找更具性价比和多功能的替代品。灵办AI以其便捷、高效、多功能的特点&#xff0c;成为许多朋友的新宠。 灵办AI助手是一款多功能的全能AI助手&am…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业&#xff0c;其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进&#xff0c;需提前预防假检、错检、漏检&#xff0c;推动智慧生产运维系统数据的流动和现场赋能应用。同时&#xff0c;…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

华为OD机试-最短木板长度-二分法(A卷,100分)

此题是一个最大化最小值的典型例题&#xff0c; 因为搜索范围是有界的&#xff0c;上界最大木板长度补充的全部木料长度&#xff0c;下界最小木板长度&#xff1b; 即left0,right10^6; 我们可以设置一个候选值x(mid)&#xff0c;将木板的长度全部都补充到x&#xff0c;如果成功…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...