只需百行C语言代码,轻松实现经典扫雷小游戏!

C语言文章更新目录

C语言学习资源汇总,史上最全面总结,没有之一
C/C++学习资源(百度云盘链接)
计算机二级资料(过级专用)
C语言学习路线(从入门到实战)
编写C语言程序的7个步骤和编程机制
C语言基础-第一个C程序
C语言基础-简单程序分析
VS2019编写简单的C程序示例
简单示例,VS2019调试C语言程序
C语言基础-基本算法
C语言基础-数据类型
C语言中的输入输出函数
C语言流程控制语句
C语言数组——一维数组
C语言数组——二维数组
C语言数组——字符数组
C语言中常用的6个字符串处理函数
精心收集了60个C语言项目源码,分享给大家
C语言核心技术——函数
C代码是怎样跑起来的?
C语言实现字符串的加密和解密
C语言——文件的基本操作
使用C语言链表创建学生信息并且将信息打印输出
图解C语言冒泡排序算法,含代码分析
实例分析C语言中strlen和sizeof的区别
开发C语言的3款神器,VS2019、VScode和IntelliJ Clion
动图图解C语言选择排序算法,含代码分析
动图图解C语言插入排序算法,含代码分析
C语言指针数组和数组指针详解
5分钟搞懂C语言中的传值和传址
C语言——动态数组的创建和使用
C语言中#include<…>和#include“…“的区别
2024年C语言最新经典面试题汇总(1-10)
2024年C语言最新经典面试题汇总(11-20)
C语言中如何动态分配内存并进行操作
如何在C语言中使用命令行参数
【揭秘C语言】零基础也能懂!一篇文章带你掌握C语言指针核心知识点

C语言实例专栏(持续更新中…)

正文

废话不多说,直接上代码

环境

  • Windows11
  • VS2022

源码

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define ROW 10 //雷区行数
#define COL 10 //雷区列数
#define MINES 10 //地雷数量
#define BOARD_SIZE ROW * COL //棋盘格子数char board[ROW][COL]; //棋盘
char vis[ROW][COL]; //标记是否访问过
char mines[ROW][COL]; //地雷位置
int remain; //剩余未揭开的格子数//插入地雷
void insert_mines()
{int r, c, i = 0;while (i < MINES) {r = rand() % ROW;c = rand() % COL;if (mines[r][c] == 0) { //如果该格没有地雷mines[r][c] = 1; //插入地雷i++;}}
}//计算周围地雷数
int count_mines(int r, int c)
{int i, j, count = 0;for (i = r - 1; i <= r + 1; i++) {if (i < 0 || i >= ROW) //边界判断continue;for (j = c - 1; j <= c + 1; j++) {if (j < 0 || j >= COL) //边界判断continue;if (mines[i][j])count++;}}return count;
}//递归揭开一片区域
void dfs(int r, int c)
{int i, j;vis[r][c] = 1; //标记已访问remain--; //未揭开格子数减少if (board[r][c] == '*') //如果揭开的是地雷,游戏结束return;//计算周围地雷数int count = count_mines(r, c);board[r][c] = count + '0'; //显示周围地雷数if (count == 0) { //如果周围没有地雷,继续递归揭开for (i = r - 1; i <= r + 1; i++) {if (i < 0 || i >= ROW) //边界判断continue;for (j = c - 1; j <= c + 1; j++) {if (j < 0 || j >= COL) //边界判断continue;if (!vis[i][j])dfs(i, j);}}}
}int main()
{int i, j;srand(time(NULL)); //初始化随机种子insert_mines(); //插入地雷remain = BOARD_SIZE - MINES; //初始化未揭开格子数while (remain > 0) { //如果有未揭开的格子//显示棋盘printf(" ");for (j = 0; j < COL; j++)printf("%2d ", j + 1);printf("\n");printf(" ");for (j = 0; j < COL; j++)printf("---");printf("\n");for (i = 0; i < ROW; i++) {printf("%2d|", i + 1);for (j = 0; j < COL; j++) {if (!vis[i][j])printf(" * ");elseprintf(" %c ", board[i][j]);}printf("|\n");}printf(" ");for (j = 0; j < COL; j++)printf("---");printf("\n");//输入坐标并递归揭开一片区域int r, c;printf("请输入要揭开的格子坐标(行 列):");scanf("%d%d", &r, &c);r--; //坐标从1开始,转化为数组下标c--;if (mines[r][c]) { //如果揭开的是地雷,游戏结束printf("游戏结束,你输了!\n");return 0;}dfs(r, c); //递归揭开一片区域}//如果没有未揭开的格子,游戏胜利printf("游戏结束,你赢了!\n");return 0;
}

运行结果

在这里插入图片描述
以下是一轮游戏的完整结果

  1  2  3  4  5  6  7  8  9 10------------------------------1| *  *  *  *  *  *  *  *  *  * |2| *  *  *  *  *  *  *  *  *  * |3| *  *  *  *  *  *  *  *  *  * |4| *  *  *  *  *  *  *  *  *  * |5| *  *  *  *  *  *  *  *  *  * |6| *  *  *  *  *  *  *  *  *  * |7| *  *  *  *  *  *  *  *  *  * |8| *  *  *  *  *  *  *  *  *  * |9| *  *  *  *  *  *  *  *  *  * |
10| *  *  *  *  *  *  *  *  *  * |------------------------------
请输入要揭开的格子坐标(行 列):3 31  2  3  4  5  6  7  8  9 10------------------------------1| *  *  *  *  *  *  *  *  *  * |2| *  *  *  *  *  *  *  *  *  * |3| *  *  1  *  *  *  *  *  *  * |4| *  *  *  *  *  *  *  *  *  * |5| *  *  *  *  *  *  *  *  *  * |6| *  *  *  *  *  *  *  *  *  * |7| *  *  *  *  *  *  *  *  *  * |8| *  *  *  *  *  *  *  *  *  * |9| *  *  *  *  *  *  *  *  *  * |
10| *  *  *  *  *  *  *  *  *  * |------------------------------
请输入要揭开的格子坐标(行 列):5 41  2  3  4  5  6  7  8  9 10------------------------------1| 0  0  0  0  1  *  *  *  *  * |2| 0  0  0  0  1  1  *  *  *  * |3| 1  1  1  0  0  1  *  *  *  * |4| *  *  1  0  0  1  *  *  *  * |5| 1  1  1  0  0  1  1  2  2  2 |6| 0  0  0  0  0  0  0  0  0  0 |7| 0  0  0  1  1  1  0  0  0  0 |8| 0  0  0  1  *  1  0  0  0  0 |9| 1  1  1  1  1  1  0  1  1  1 |
10| *  *  1  0  0  0  0  1  *  * |------------------------------
请输入要揭开的格子坐标(行 列):3 81  2  3  4  5  6  7  8  9 10------------------------------1| 0  0  0  0  1  *  *  *  *  * |2| 0  0  0  0  1  1  *  *  *  * |3| 1  1  1  0  0  1  *  4  *  * |4| *  *  1  0  0  1  *  *  *  * |5| 1  1  1  0  0  1  1  2  2  2 |6| 0  0  0  0  0  0  0  0  0  0 |7| 0  0  0  1  1  1  0  0  0  0 |8| 0  0  0  1  *  1  0  0  0  0 |9| 1  1  1  1  1  1  0  1  1  1 |
10| *  *  1  0  0  0  0  1  *  * |------------------------------
请输入要揭开的格子坐标(行 列):1 91  2  3  4  5  6  7  8  9 10------------------------------1| 0  0  0  0  1  *  *  *  1  * |2| 0  0  0  0  1  1  *  *  *  * |3| 1  1  1  0  0  1  *  4  *  * |4| *  *  1  0  0  1  *  *  *  * |5| 1  1  1  0  0  1  1  2  2  2 |6| 0  0  0  0  0  0  0  0  0  0 |7| 0  0  0  1  1  1  0  0  0  0 |8| 0  0  0  1  *  1  0  0  0  0 |9| 1  1  1  1  1  1  0  1  1  1 |
10| *  *  1  0  0  0  0  1  *  * |------------------------------
请输入要揭开的格子坐标(行 列):2 71  2  3  4  5  6  7  8  9 10------------------------------1| 0  0  0  0  1  *  *  *  1  * |2| 0  0  0  0  1  1  2  *  *  * |3| 1  1  1  0  0  1  *  4  *  * |4| *  *  1  0  0  1  *  *  *  * |5| 1  1  1  0  0  1  1  2  2  2 |6| 0  0  0  0  0  0  0  0  0  0 |7| 0  0  0  1  1  1  0  0  0  0 |8| 0  0  0  1  *  1  0  0  0  0 |9| 1  1  1  1  1  1  0  1  1  1 |
10| *  *  1  0  0  0  0  1  *  * |------------------------------
请输入要揭开的格子坐标(行 列):4 7
游戏结束,你输了!

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

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

相关文章

基本电路理论-电流和电压的参考方向

&#x1f308;个人主页&#xff1a;会编程的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 电流及参考方向 电流&#xff1a;带电粒子有规则的定向移动 电流强度&#xff1a;单位时间内通过导体横截面的电荷量&#xff0c;即&#xff1a;idq/dt 单位&#xff1a…

《数据结构学习笔记---第六篇》---栈和队列的实现

目录 1.栈 1.1栈的概念及结构 1.2栈的实现 2.队列 2.1队列的概念及结构 ​2.2队列的实现 3.顺序栈的具体实现 3.1建头文Stack.h” 3.2创建具体接口实现文件Stack.c 3.2.1初始化 3.2.2入栈出栈 3.2.4判空 3.2.5栈的大小 3.2.6销毁栈 3.3主函数的实现 4.链队的具体实现…

【C++第二阶段】案例-职工管理系统

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 案例>职工管理系统0.退出功能1.增加职工功能2.显示职工信息3.删除职工信息4.修改职工信息5.查找职工信息6.排序职工7.清空所有文档 案例>职工管理系统 首先写一个workmanager…

RISC-V GNU Toolchain 工具链安装问题解决(含 stdio.h 问题解决)

我的安装过程主要参照 riscv-collab/riscv-gnu-toolchain 的官方 Readme 和这位佬的博客&#xff1a;RSIC-V工具链介绍及其安装教程 - 风正豪 &#xff08;大佬的博客写的非常详细&#xff0c;唯一不足就是 sudo make linux -jxx 是全部小写。&#xff09; 工具链前前后后我装了…

NPW(监控片的)的要点精讲

半导体的生产过程已经历经数十年的发展&#xff0c;其中主要有两个大的发展趋势&#xff0c;第一&#xff0c;晶圆尺寸越做越大&#xff0c;到目前已有超过70%的产能是12寸晶圆&#xff0c;不过18寸晶圆产业链推进缓慢&#xff1b;第二&#xff0c;电子器件的关键尺寸越做越小&…

常用运动模型

运动模型 常用运动模型: CV、CA、CTRV、CTRV、CTRA、CSAV和CCA/CSAA模型微分多项式模型辛格模型半马尔科夫模型机动目标"当前模型"二维转弯运动模型三维模型比列导引模型 恒定速度模型&#xff08;Constant Velocity, CV&#xff09; 恒定加速度模型&#xff08;C…

微信小程序开发学习笔记——4.7 api中navigate路由接口与组件的关系

>>跟着b站up主“咸虾米_”学习微信小程序开发中&#xff0c;把学习记录存到这方便后续查找。 一、跳转 1、方法一&#xff1a;组件 组件-导航-navigator <navigator url"/pages/demo/demo?id123" open-type"reLaunch">go demo page <…

保持ssh断开后,程序不会停止执行

保持ssh断开后&#xff0c;程序不会停止执行 一、前言 笔者做远程部署搞了一阵子&#xff0c;快结项时发现一旦我关闭了ssh连接窗口&#xff0c;远程服务器会自动杀掉我在ssh连接状态下运行的程序。 这怎么行&#xff0c;岂不是想要它一直运行还得要一台电脑一直打开ssh连接咯…

一起来从Solidworks中导出URDF模型

这个博客是用来记录关于【从Solidworks中导出URDF模型】的学习历程&#xff1a; 相关课程链接见&#xff1a;如何从Solidworks导出URDF模型 • 古月 (guyuehome.com) 下面让我们一起开始吧&#xff01;&#xff01;&#xff01; 1. sw_urdf_exporter插件介绍 插件下载链接&…

HR岗位管理:岗位职级管理体系是什么?概念、知识及方法工具梳理

岗位是组织中最具体、最小的一个基本单位。组织一般都是因事设岗&#xff0c;因而岗位是组织要求个体完成一项或多项责任而赋予个体的权力的总和。岗位是与人相对应的&#xff0c;通常一个岗位只能由一个人担任。正是因为人与岗位相匹配&#xff0c;所以企业人力资源成本管控的…

前端学习<三>CSS进阶——0102-CSS布局样式

前言 css 进阶的主要内容如下。 1、css 非布局样式 html 元素的分类和特性 css 选择器 css 常见属性&#xff08;非布局样式&#xff09; 2、css 布局相关 css 布局属性和组合解析 常见布局方案 三栏布局案例 3、动画和效果 属于 css 中最出彩的内容。 多背景多投影特…

文献速递:基于SAM的医学图像分割---UN-SAM: 通用无需提示的广义细胞核图像分割

Title 题目 UN-SAM: Universal Prompt-Free Segmentation for Generalized Nuclei Images UN-SAM: 通用无需提示的广义细胞核图像分割 01 文献速递介绍 在数字病理学领域&#xff0c;对病理组织图像进行细胞核图像分割的任务是形态量化和肿瘤分级评估的基石。尽管这项任务…