c语言实战-极简扫雷

C语言/c++写的C语言实战项目扫雷

结构比较清晰,仅供参考:

核心是扫雷的递归算法实现

上代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>#define SIZE 10
#define MINES 15char board[SIZE][SIZE]; // 游戏棋盘// 初始化棋盘,'-'表示未揭示的区域
void initBoard() {for (int i = 0; i < SIZE; ++i) {for (int j = 0; j < SIZE; ++j) {board[i][j] = '-';}}
}// 在棋盘上显示当前状态
void displayBoard() {printf("   ");for (int i = 0; i < SIZE; ++i) {printf("%d ", i);}printf("\n");for (int i = 0; i < SIZE; ++i) {printf("%d  ", i);for (int j = 0; j < SIZE; ++j) {printf("%c ", board[i][j]);}printf("\n");}
}// 随机布置地雷
void placeMines() {srand(time(NULL));int count = 0;while (count < MINES) {int x = rand() % SIZE;int y = rand() % SIZE;if (board[x][y] != '*') {board[x][y] = '*';count++;}}
}// 检查坐标是否有效
int isValid(int x, int y) {return (x >= 0 && x < SIZE && y >= 0 && y < SIZE);
}// 计算周围的地雷数量
int countAdjacentMines(int x, int y) {int count = 0;for (int i = x - 1; i <= x + 1; ++i) {for (int j = y - 1; j <= y + 1; ++j) {if (isValid(i, j) && board[i][j] == '*') {count++;}}}return count;
}// 揭示某个位置的内容
void reveal(int x, int y) {if (!isValid(x, y)) {return;}if (board[x][y] != '-') {return;}int mines = countAdjacentMines(x, y);if (mines > 0) {board[x][y] = mines + '0';} else {board[x][y] = ' ';for (int i = x - 1; i <= x + 1; ++i) {for (int j = y - 1; j <= y + 1; ++j) {reveal(i, j);}}}
}int main() {int x, y;char action;initBoard();placeMines();do {displayBoard();printf("Enter action (r for reveal, q to quit): ");scanf(" %c", &action);if (action == 'r') {printf("Enter coordinates (x y): ");scanf("%d %d", &x, &y);if (isValid(x, y)) {reveal(x, y);} else {printf("Invalid coordinates!\n");}} else if (action == 'q') {printf("Quitting game.\n");break;} else {printf("Invalid action!\n");}} while (1);return 0;
}

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

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

相关文章

Oracle的主要特点是什么?应用场景有哪些?

主要特点&#xff1a; 高可靠性&#xff1a;Oracle数据库具有高度的可靠性&#xff0c;能够确保数据的安全和稳定性。 高性能&#xff1a;提供高性能的数据处理和查询能力&#xff0c;可以处理大规模的数据量。 良好的扩展性&#xff1a;支持水平和垂直的扩展&#xff0c;可以轻…

CloudWatch Logs Insights 详解

CloudWatch Logs Insights 是 AWS 提供的强大日志分析工具,允许您快速、交互式地搜索和分析日志数据。本文将详细介绍使用 CloudWatch Logs Insights 所需的权限、常用查询方法,以及一些实用的查询示例。 1. 所需权限 要使用 CloudWatch Logs Insights,用户需要具备以下 I…

代码随想录-Day55

42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高…

CentOS7二进制安装和YUM安装mongodb,服务器无法安装5.0以上的 mongodb 数据库报错 Illegal instruction

文章目录 MongoDB 安装二进制安装YUM 安装 Tips:1、MongoDB安装问题2、MongoDB登录3、MongoDB排序时内存大小限制和创建索引4、创建用户5、Java yaml使用密码连接mongodb6、MongoDB增删改查 MongoDB 安装 二进制安装 [rootmysql5-7 mongodb-6.0.4]# cat start.sh #!/bin/bash…

js使用proxy代理监听控制事件

本文为proxy代理的实例应用&#xff0c;有关代理的内容可以参考&#xff1a; js语法---理解反射Reflect对象和代理Proxy对象 监听事件 要监听dom元素的事件&#xff0c;我们会采用回调触发的方式来执行操作&#xff0c; 而触发事件的过程很明显是一个异步操作&#xff0c;异…

Docker 使用基础(1)—镜像仓库

&#x1f3ac;慕斯主页&#xff1a;修仙—别有洞天 ♈️今日夜电波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━️&#x1f49f;──────── 4:20 &#x1f504; ◀️ ⏸ …

Pinia在vue项目中的使用

Pinia是Vue 3官方推荐的状态管理模式&#xff0c;由尤雨溪创建并集成到了 Vue.js 中&#xff0c;它是一个轻量级、纯粹基于函数的思想实现的应用状态管理库。Pinia的设计理念类似于Redux&#xff0c;但它更简单易用&#xff0c;更适合于小型到中型的单文件组件应用。 在Vue 3项…

android13 固定U盘链接 SD卡链接 TF卡链接 硬盘链接

1.前言 有些客户使用的应用并不带有自动监听U盘 sd卡广播的代码,使用的代码是固定的地址,这样的话,就需要我们将系统的挂载目录固定了。 原始路径 /storage/3123-19FA 增加链接 /storage/upan_000 -> /storage/3123-19FA 2. 首先如果是应用本身监听的话,使用的是 /…

【Linux线程篇】探索Linux多线程:并行编程的入门指南

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; Linux线程概念 什么是线程 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行&am…

【国产开源可视化引擎Meta2d.js】数据

数据 Meta2d.js是由数据驱动显示的。图纸和图元支持任意数据。 内置属性 基于“约定优于配置”原则&#xff0c;Meta2d.js引擎会有一些内置属性名&#xff0c;例如id表示唯一标识、name表示图元名称、text表示文本、color表示颜色等。 内置属性有固定含义&#xff0c;影响显…

揭秘:离心风机风量背后的科学原理

在工业生产和建筑环境中&#xff0c;离心风机如同一位不倦的呼吸管家&#xff0c;默默地维持着空气流动与品质。 你是否好奇过&#xff0c;究竟是什么因素在背后操纵着这位“呼吸管家”的风量表现呢&#xff1f;今天&#xff0c;就让我们一探究竟。 举个例子&#xff1a;你在吹…

『大模型笔记』GraphRAG:利用复杂信息进行发现的新方法!

GraphRAG:利用复杂信息进行发现的新方法! 文章目录 一. GraphRAG:利用复杂信息进行发现的新方法!1. 将RAG应用于私人数据集2. 整个数据集的推理3. 创建LLM生成的知识图谱4. 结果指标5. 下一步二. 参考文献微软官方推文:https://www.microsoft.com/en-us/research/blog/gra…

LeetCode题练习与总结:反转字符串中的单词--151

一、题目描述 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能会存在…

速盾:好的cdn服务器

CDN&#xff08;Content Delivery Network&#xff09;是指内容分发网络&#xff0c;是一种将网站的静态内容&#xff08;如图片、音频、视频&#xff09;缓存在分布式的服务器节点上&#xff0c;通过就近访问用户的请求&#xff0c;提供快速可靠的内容传输服务的技术。 好的C…

HTML5文本标签、图像标签、超链接

一、文本样式标签 字体样式标签&#xff1a; 加粗&#xff1a;<strong>…</strong> 斜体&#xff1a; < em >…</ em> eg&#xff1a; <h3>徐志摩人物简介</h3> <p> <strong>1910</strong>年入杭州学堂<br/> &l…

微信小程序 - 本地存储 增加有效期

小程序的本地存储API提供了wx.setStorageSync和wx.setStorage来存储数据&#xff0c;注意的是&#xff0c;小程序的本地存储并没有明确的有效期设置&#xff0c;存储的数据在不超过限制的情况下&#xff0c;会一直保留。 一、小程序本地存储API 小程序的本地存储API提供了设置…

WEB06JavaScriptAjax

基础语法 引入方式 引入方式 内部脚本&#xff1a;将JS代码定义在HTML页面中 JavaScript代码必须位于<script></script>标签之间 在HTML文档中&#xff0c;可以在任意地方&#xff0c;放置任意数量的<script> 一般会把脚本置于<body>元素的底部&a…

常见的气体流量计有哪些?

1.气体涡轮流量计 适用场合&#xff1a;流量变化小&#xff0c;脉动流频率小&#xff0c;中低压洁净天然气优点 1.精度高&#xff0c;重复性好 2.测量范围广&#xff0c;压损小&#xff0c;安装维修方便 3.具有较高的抗电磁干扰和抗震动能力缺点&#xff1a;分辨率低&#xff…

活动:不要卷模型,要卷应用

如何理解李彦宏说的“不要卷模型&#xff0c;要卷应用” 1. 现状 现如今&#xff0c;是否具备独立的 AI 技术似乎已经成为衡量一个互联网企业是否成功的标志。各家都在竭尽全力卷模型、卷数据、卷训练效果&#xff0c;市面上仅是语言类 AI 就多达十几种&#xff0c;但从一名消…

浏览器中js外挂脚本的执行方式

1、开发工具控制台交互执行 网页中按F12打开开发者工具&#xff0c;选择“控制台”&#xff0c;键入js脚本命令回车执行&#xff0c;适用于临时使用脚本逻辑简单的场景&#xff0c;实例如下&#xff1a; // 获取网页元素的文本脚本 var elem document.getElementById("…