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

C语言 ——— 在控制台实现扫雷游戏(一次展开一片,递归实现)

前言

两个数组,一个用来显示在控制台上,一个用来存放雷

两个数组的实际大小为11 * 11 ,而为了方便排查雷的个数,实际使用范围是9 * 9 


test.c 

#include"mine_sweeping.h"void game()
{// 存放雷char mine[ROWS][COLS];// 展示char show[ROWS][COLS];// 初始化棋盘InitBoard(mine, ROWS, COLS, '0');InitBoard(show, ROWS, COLS, '*');// 打印棋盘DisplayBoard(show, ROW, COL);// 布置雷SetMine(mine, ROW, COL);// 排查雷FindMine(mine, show, ROW, COL);
}int main()
{int input = 0;// 随机数生成器srand((unsigned int)time(NULL));do{menu();printf("请输入:");scanf("%d", &input);if (input == 1){game();}else if (input == 0){printf("退出游戏\n");}else{printf("输入错误,请重新输入\n");}} while (input);return 0;
}

game.h

#include<stdio.h>
#include<stdlib.h>
#include<time.h>#define ROW 9
#define COL 9
#define ROWS ROW + 2
#define COLS COL + 2
#define MINE ((ROW + COL) / 2)// 打印菜单
void menu();// 初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char str);// 打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col);// 布置雷
void SetMine(char board[ROWS][COLS], int row, int col);// 排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col);

game.c

#include"mine_sweeping.h"// 打印菜单
void menu()
{printf("*******************************************\n");printf("*****     1.play           0.next     *****\n");printf("*******************************************\n");
}// 初始化棋盘
void InitBoard(char board[ROWS][COLS], int rows, int cols, char set)
{for (int i = 0; i < rows; i++){for (int j = 0; j < cols; j++){board[i][j] = set;}}
}// 打印棋盘
void DisplayBoard(char board[ROWS][COLS], int row, int col)
{printf("\n");//printf("--------------mine game--------------\n");// 打印横坐标for (int i = 1; i <= row; i++){printf(" %d ", i);printf(" ");}printf("\n");for (int i = 1; i <= row; i++){for (int j = 1; j <= col; j++){// 打印每一行printf(" %c ", board[i][j]);if (j < row){printf("|");}}// 打印纵坐标printf(" %d\n", i);// 打印分割线if (i < col){for (int k = 0; k < row; k++){printf("---");if (k < row - 1){printf("|");}}printf("\n");}}printf("\n");
}// 布置雷
void SetMine(char board[ROWS][COLS], int row, int col)
{// 雷的个数int mine = MINE;while (mine){int x = rand() % row + 1;int y = rand() % col + 1;if (board[x][y] == '0'){board[x][y] = '1';mine--;}}
}// 统计雷的个数
int GetMineCount(char mine[ROWS][COLS], int x, int y)
{
//	return (mine[x - 1][y] + mine[x - 1][y - 1] + mine[x][y - 1] + mine[x + 1][y - 1] + 
//		mine[x + 1][y] + mine[x + 1][y + 1] + mine[x][y + 1] + mine[x - 1][y + 1] - 8 * '0');int count = 0;if (mine[x - 1][y] == '1')count++;if (mine[x - 1][y - 1] == '1')count++;if (mine[x][y - 1] == '1')count++;if (mine[x + 1][y - 1] == '1')count++;if (mine[x + 1][y] == '1')count++;if (mine[x + 1][y + 1] == '1')count++;if (mine[x][y + 1] == '1')count++;if (mine[x - 1][y + 1] == '1')count++;return count;
}// 一次展开一片
void UnfoldSlice(char mine[ROWS][COLS], char show[ROWS][COLS], int x, int y)
{if (x >= 1 && x <= ROW && y >= 1 && y <= COL){int count = GetMineCount(mine, x, y);if (count == 0 && mine[x][y] != '*'){show[x][y] = count + '0';mine[x][y] = '*';UnfoldSlice(mine, show, x - 1, y);UnfoldSlice(mine, show, x - 1, y - 1);UnfoldSlice(mine, show, x, y - 1);UnfoldSlice(mine, show, x + 1, y - 1);UnfoldSlice(mine, show, x + 1, y);UnfoldSlice(mine, show, x + 1, y + 1);UnfoldSlice(mine, show, x, y + 1);UnfoldSlice(mine, show, x - 1, y + 1);}if (count != 0){show[x][y] = count + '0';return;}}else{return;}}int IsWin(char show[ROWS][COLS], int row, int col)
{int count = 0;for (int i = 1; i <= row; i++){for (int j = 1; j <= col; j++){if (show[i][j] == '*')count++;}}return count;}// 排查雷
void FindMine(char mine[ROWS][COLS], char show[ROWS][COLS], int row, int col)
{int x = 0;int y = 0;int MineCount = MINE;while (IsWin(show, row, col) > MineCount){printf("请输入要排查雷的坐标(用空格隔开):");scanf("%d %d", &x, &y);if (x >= 1 && x <= row && y >= 1 && y <= col){if (mine[x][y] == '1'){printf("很遗憾,你被炸死了,游戏结束\n");DisplayBoard(mine, ROW, COL);break;}else{// 一次展开一片UnfoldSlice(mine, show, x, y);DisplayBoard(show, ROW, COL);}}else{printf("坐标非法,请重新输入\n");}}if (IsWin(show, row, col) == MINE){printf("恭喜你,排雷成功\n");DisplayBoard(mine, ROW, COL);}
}

相关文章:

C语言 ——— 在控制台实现扫雷游戏(一次展开一片,递归实现)

前言 两个数组&#xff0c;一个用来显示在控制台上&#xff0c;一个用来存放雷 两个数组的实际大小为11 * 11 &#xff0c;而为了方便排查雷的个数&#xff0c;实际使用范围是9 * 9 test.c #include"mine_sweeping.h"void game() {// 存放雷char mine[ROWS][COL…...

el7升级Apache模块编译

1.背景 接续https://blog.csdn.net/nanhai_happy/article/details/140566070&#xff0c;由于升级升级Apache过程中&#xff0c;发现需要使用的mod_wsgi、mod_systemd和mod_cgi模块缺失&#xff0c;故接着解决继续编译生成。 2. 编译mod_cgi、mod_system 2.1 安装依赖 yum …...

Linux系统下的日志管理与ELK Stack实践

关于“Linux系统下的日志管理与ELK Stack实践”&#xff0c;这个主题涵盖了如何在Linux环境中高效地收集、解析、存储及分析日志&#xff0c;以及如何利用ELK Stack&#xff08;Elasticsearch、Logstash、Kibana&#xff09;这套工具来实现日志的集中管理和可视化。下面我会简要…...

C++入门基础知识

在之前我们学习了C语言和初阶数据结构的相关知识&#xff0c;现在已经有了一定的代码能力和对数据结构也有了基础的认识&#xff0c;接下来我们将进入到新的专题当中&#xff0c;这个专题就是C。在C中我们需要花费更大的精力和更长的时间去学习这门建立在C语言基础之上的计算机…...

Python爬虫技术 第28节 数据可视化

Python 爬虫设计结合数据可视化是一个非常强大的组合&#xff0c;可以用来分析和展示从网络获取的数据。以下是如何设计一个 Python 爬虫并结合数据可视化的详细步骤&#xff1a; 步骤 1: 确定数据源和目标 首先&#xff0c;确定你想要爬取的数据源和目标。例如&#xff0c;你…...

react中的装饰器

一、初见react装饰器 初初接触react&#xff0c;发现一些神秘符号和语法&#xff0c;觉得很神奇。类似这样&#xff1a; import React, { PureComponent, Fragment } from react; import {Form} from antd;Form.create() class UpdateForm extends PureComponent {。。。 }哇…...

Elasticsearch:用例、架构和 6 个最佳实践

1. 什么是 Elasticsearch&#xff1f; Elasticsearch 是一个开源分布式搜索和分析引擎&#xff0c;专为处理大量数据而设计。它建立在 Apache Lucene 之上&#xff0c;并由Elastic 支持。Elasticsearch 用于近乎实时地存储、搜索和分析结构化和非结构化数据。 Elasticsearch 的…...

tcp常用网络接口 linux环境

TCP&#xff08;传输控制协议&#xff09;网络通信是常见的网络应用形式&#xff0c;它提供了面向连接的、可靠的数据传输服务。TCP通信常用的接口主要包括以下几个方面&#xff1a; 常用接口 1. socket() int socket(int domain, int type, int protocol); 功能&#xff1…...

第10节课:JavaScript基础——网页交互的魔法

目录 JavaScript的作用JavaScript的基本语法基本语法规则变量、数据类型和运算符变量数据类型运算符 实践&#xff1a;使用JavaScript增强网页功能结语 JavaScript是一种高级的、解释型的编程语言&#xff0c;它使得网页能够从静态文档转变为具有动态交互性的应用程序。本节课将…...

springboot+vue+mybatis汽车租赁管理+PPT+论文+讲解+售后

汽车租赁系统是针对目前汽车租赁管理的实际需求&#xff0c;从实际工作出发&#xff0c;对过去的汽车租赁管理系统存在的问题进行分析&#xff0c;完善客户的使用体会。采用计算机系统来管理信息&#xff0c;取代人工管理模式&#xff0c;查询便利&#xff0c;信息准确率高&…...

.NET C# 将文件夹压缩至 zip

.NET C# 将文件夹压缩至 zip 文章目录 .NET C# 将文件夹压缩至 zip1 使用 System.IO.Compression1.1 环境1.2 压缩文件夹1.2.1 简单压缩1.2.2 复杂压缩 1.3 解压缩1.3.1 简单解压缩1.3.2 复杂解压缩 2 使用 SharpZipLib2.1 环境2.2 压缩文件夹2.3 解压缩 3 压缩效果简单测试 1 …...

软考基本介绍

一,基本了解 计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软件考试&#xff09;为国家级考试。 考试设置了27个专业资格&#xff0c;涵盖5个专业领域&#xff0c; 3个级别层次&#xff08;初级、中级、高级&#xff09;。 中国计算机技术职业…...

【Vue】vue3 中使用 ResizeObserver 监听元素的尺寸宽度变化

要监听 div 宽度的变化&#xff0c;可以使用 ResizeObserver 接口。ResizeObserver 允许你观察一个或多个元素的尺寸变化&#xff0c;并在发生变化时执行回调函数。这种方法比使用 MutationObserver 更专注于尺寸变化&#xff0c;且不受元素属性变化的影响。 使用 ResizeObserv…...

信息安全专业好吗?

22 届的 211 信安毕业生&#xff0c;目前在读研&#xff08;虽然已经和安全没关系&#xff09;&#xff0c;整体来看大部分高校的信安都是作为计算机的附属专业存在的&#xff0c;除了极具特色的几个高校&#xff0c;例如山大的密码学&#xff0c;广州大学某院士加持的网络安全…...

梧桐数据库(WuTongDB):数据库中元数据表的常见信息

元数据表是数据库系统中用于存储和管理元数据的表。这些表提供关于数据库对象&#xff08;如表、列、索引、视图、存储过程等&#xff09;的详细信息。以下是元数据表的一些常见类型及其详细解释&#xff1a; 常见元数据表类型 表信息表 表名&#xff1a;TABLES描述&#xff1…...

在 Linux 9 上安装 Oracle 19c:克服兼容性问题 (INS-08101)

Oracle 数据库 19c 的基础版本 (19.3) 发布的时候还没有 Linux 9 &#xff0c;因此在Linux 9上面安装Oracle 19c会遇到很多兼容性问题。本文将探讨如何解决这些问题。 安装步骤 设置环境变量以绕过操作系统检查&#xff1a; Oracle 19.3 安装程序无法识别 Linux 9。 [WARNIN…...

【踩坑】pytorch中的索引与copy_结合不会复制数据及其解决方案

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 背景知识 实验验证 结论分析 错误案例 处理方法 注意事项 附加说明 基本索引返回视图 高级索引返回副本 赋值操作都是原地操作 以下内容…...

十六、【Python】基础教程 - 【Flask】网络编程开发

目录 前言 Flask 基础概念 安装 Flask 示例&#xff1a;创建一个 Flask Web 应用 运行 Flask 应用 更复杂的例子 测试新功能 前言 Flask 是一个用 Python 编写的微型 Web 框架&#xff0c;它以简单性和灵活性著称&#xff0c;非常适合快速开发小型到中型的 Web 应用。F…...

C#初级——List 容器

容器 在C#中&#xff0c;容器通常指的是用于存储和组织数据的集合类。 本文介绍的容器是动态数组&#xff1a;List<T> 内部使用数组来存储元素&#xff0c;当添加元素超出当前数组容量时&#xff0c;会自动调整大小&#xff08;扩容&#xff09;。 list容器 List<&g…...

serial靶机教程

靶机下载地址 https://download.vulnhub.com/serial/serial.zip 主机发现 arp-scan -l 端口扫描 nmap 192.168.229.131 -A 根据对⽐可知serial的⼀个ip地址为192.168.47.143 该靶机开启了22端⼝和80端⼝ 对⽹站进⾏⼀个访问&#xff0c;⼤概意思为这是对新的cookie处理程序…...

Pixel Aurora Engine入门指南:理解‘进化像素’设计哲学与生成逻辑

Pixel Aurora Engine入门指南&#xff1a;理解进化像素设计哲学与生成逻辑 1. 认识Pixel Aurora引擎 Pixel Aurora是一款专为像素艺术创作设计的AI绘图工作站。它采用复古游戏机风格界面&#xff0c;将现代AI技术与经典像素美学完美融合。这个工具最特别的地方在于&#xff0…...

Qwen3-32B .NET应用开发:智能文档处理系统

Qwen3-32B .NET应用开发&#xff1a;智能文档处理系统 1. 开篇&#xff1a;为什么需要智能文档处理 每天我们都要面对各种各样的文档&#xff1a;合同、报告、发票、表格...手动处理这些文档不仅耗时耗力&#xff0c;还容易出错。想象一下&#xff0c;如果能有一个系统自动读…...

【教学类-160-02】20260409 AI视频培训-练习2“豆包AI视频《小班-抢玩具》+豆包图片风格:手办”

背景需求&#xff1a; 【教学类-160-01】20260408 AI视频培训-练习1“豆包AI视频”https://mp.csdn.net/mp_blog/creation/editor/159965108 不是前面孩子的衣服了&#xff0c;从两女变成一男一女了 详细的人物特征描述&#xff08;衣服颜色等&#xff09;控制人物尽量相似。 …...

【Unity游戏模板】超休闲爆款背后:沙子流动游戏的核心技术揭秘

一、插件简介 Sand Flow Puzzle 3D 本质上是一套完整的&#xff1a;像素物理模拟系统 关卡生产工具链 数据驱动玩法框架结合官方文档可以看出&#xff0c;它的设计目标非常明确&#xff1a; 快速产出大量关卡&#xff08;Image Auto Generator&#xff09;支持运行时编辑&am…...

Android NFC开发实战:从基础到应用场景解析

1. Android NFC技术入门指南 第一次接触NFC开发时&#xff0c;我被这个看似简单却功能强大的技术深深吸引。NFC&#xff08;近场通信&#xff09;就像给你的手机装上了"电子触角"&#xff0c;只需要轻轻一碰就能完成数据传输。与蓝牙、WiFi相比&#xff0c;NFC的最大…...

Ollama安装-运行模型-常用运维命令

方法1&#xff1a;官方命令行安装 安装&#xff1a; curl -fsSL https://ollama.com/install.sh | sh 注&#xff1a;需要网络支持&#xff0c;可以安装的话就不需要执行手动安装的配置&#xff0c;官方脚本会把所有东西都配置好&#xff0c;如果要修改镜像源可查看后面修改镜像…...

WarcraftHelper终极指南:如何让经典魔兽争霸III在现代电脑上完美运行

WarcraftHelper终极指南&#xff1a;如何让经典魔兽争霸III在现代电脑上完美运行 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在…...

Arduino Ethernet库深度解析与W5500硬件协同开发指南

1. Arduino Ethernet库深度解析&#xff1a;嵌入式以太网通信的工程实践指南1.1 库定位与硬件基础Arduino Ethernet库是Arduino官方为以太网通信设计的核心驱动库&#xff0c;专为Arduino Ethernet Shield&#xff08;基于W5100/W5200/W5500以太网控制器&#xff09;及兼容硬件…...

higress 这个中登才是AI时代的心头好峭

核心摘要&#xff1a;这篇文章能帮你 ?? 1. 彻底搞懂条件分支与循环的适用场景&#xff0c;告别选择困难。 ?? 2. 掌握遍历DOM集合修改属性的标准姿势与性能窍门。 ?? 3. 识别流程控制中的常见“坑”&#xff0c;并学会如何优雅地绕过去。 ?? 主要内容脉络 ?? 一、痛…...

鸿蒙方舟编译器的AOT优化陷阱:Native代码与JS混合调用的性能拐点分析

一、引言 在鸿蒙应用开发中&#xff0c;方舟编译器的AOT&#xff08;Ahead Of Time&#xff09;编译技术为应用性能带来了显著提升。然而&#xff0c;在Native代码与JS混合调用的场景中&#xff0c;AOT优化可能会陷入一些陷阱&#xff0c;导致性能下降甚至出现JIT抖动问题。本文…...