C语言-----扫雷游戏
扫雷游戏的功能说明 :
• 使⽤控制台实现经典的扫雷游戏
• 游戏可以通过菜单实现继续玩或者退出游戏
• 扫雷的棋盘是9*9的格⼦
• 默认随机布置10个雷
• 可以排查雷:
◦ 如果位置不是雷,就显⽰周围有⼏个雷
◦ 如果位置是雷,就炸死游戏结束
◦ 把除10个雷之外的所有⾮雷都找出来,排雷成功,游戏结束
test.c //⽂件中写游戏的测试逻辑
game.c //⽂件中写游戏中函数的实现等
game.h //⽂件中写游戏需要的数据类型和函数声明等
逻辑开始:
一、菜单
- 输入1进入游戏,输入0退出游戏,输入其他数字显示输入错误,并且重新输入
test.c
#include "game.h"int main()
{menu();{regain:printf("请输入你的选择:");int input1;scanf("%d", &input1);switch (input1){case 1:{printf("进入游戏\n");game();break;}case 0:{printf("退出游戏\n");break;}default:{printf("输入错误,请重新输入:");goto regain;}}}return 0;
}
game.c
#include "game.h"void menu()
{printf("****************\n");printf("**** 1.Play ****\n");printf("**** 0.Quit ****\n");printf("****************\n");}
game.h
#pragma once
#include <stdio.h>
#include "game.h"//菜单
void menu();
二、生成 9X9 的游戏界面
- 使用二维数组实现
- 运用两个棋盘,一个用于展示,一个用于设置雷,写出初始化棋盘的函数
- 将展示的棋盘
char show
全部初始化为'*'
,将布置雷的棋盘char mine
全部初始化为0
- 为方便后边测试,可以先把打印棋盘的函数写出
test.c文件增加了以下代码
test.c
#include "game.h"void game()
{//用于布置雷的二维数组char mine[ROWS][COLS] = { 0 };//用于游戏界面的的二维数组char show[ROWS][COLS] = { 0 };//用于游戏界面的的二维数组全部初始为 '*'set_keyboard(show, ROWS, COLS, '*');//用于布置雷的二维数组全部初始化为 '0'set_keyboard(mine, ROWS, COLS, '0');//打印函数printf_keyboard(show, ROW, COL);printf_keyboard(mine, ROW, COL);
}
game.c文件增加了以下代码
game.c
#include "game.h"//初始化棋盘
void set_keyboard(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 printf_keyboard(char board[ROWS][COLS], int row, int col)
{printf("-------扫雷--------\n");for (int r = 0; r <= row; r++){printf("%d ", r);}printf("\n");for (int i = 1; i <= row; i++){printf("%d ", i);for (int j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}
game.c文件增加了以下代码
#pragma once
#include <stdio.h>
#include "game.h"#define ROW 9
#define COL 9
#define ROWS ROW+3
#define COLS COL+2//菜单
void menu();//初始化棋盘
void set_keyboard(char board[ROWS][COLS], int rows, int cols, char set);//展示棋盘
void printf_keyboard(char board[ROWS][COLS], int row, int col);
三、随机布置雷
- 使用
srand((unsigned int) time(NULL))
和rand()
- 将雷设置为
1
,雷只能布置在char mine[x][y] == '0'
的地方
game.h文件增加了
#include <time.h>
#include "stdlib.h"
#define MINE 10
void set_mine(char board[ROWS][COLS], int row, int col, int mine);
game.h#pragma once
#include <stdio.h>
#include "game.h"
#include <time.h>
#include "stdlib.h"#define ROW 9
#define COL 9
#define ROWS ROW+3
#define COLS COL+2
#define MINE 10//菜单
void menu();//初始化棋盘
void set_keyboard(char board[ROWS][COLS], int rows, int cols, char set);//展示棋盘
void printf_keyboard(char board[ROWS][COLS], int row, int col);//随机布置雷
void set_mine(char board[ROWS][COLS], int row, int col, int mine);
game.c文件增加以下代码
game.c//随机布置雷
void set_mine(char board[ROWS][COLS], int row, int col, int mine)
{srand((unsigned int) time(NULL));while (mine){int x = (rand() % row) + 1;int y = (rand() % col) + 1;if (board[x][y] == '0');{board[x][y] = '1';mine--;}}}
test.c文件增加以下代码
test.c//随机布置雷
set_mine(mine, ROW, COL, MINE);
四、排雷
- 注意输入的坐标,横纵坐标都只能是
0~9
,出现其他数字报错,并重新输入
- 所排的坐标要显示周围雷的个数,如果为
0
,展开周围的棋盘(运用到递归) - 如果所排的坐标是雷,显示
游戏结束
- 如果输入的坐标是已经输入过的坐标,显示
该坐标已经排除
- 判断游戏胜利,
排除的坐标个数与减掉雷后的格子数相等
test.c文件布局改为以下情况
test.c
void game()
{//用于布置雷的二维数组char mine[ROWS][COLS] = { 0 };//用于游戏界面的的二维数组char show[ROWS][COLS] = { 0 };//用于游戏界面的的二维数组全部初始为 '*'set_keyboard(show, ROWS, COLS, '*');//用于布置雷的二维数组全部初始化为 '0'set_keyboard(mine, ROWS, COLS, '0');//随机布置雷set_mine(mine, ROW, COL, MINE);//打印函数printf_keyboard(show, ROW, COL);//printf_keyboard(mine, ROW, COL);//排雷move_mine(show, mine, ROW, COL);
}
game.c文件增加了以下代码
game.c
//计算周围雷的个数
int Count_mine(char mine[ROWS][COLS], int x, int y)
{return mine[x][y] - '0';
}//展开棋盘----递归
void Open_keyboard(char show[ROWS][COLS], char mine[ROWS][COLS], int x, int y)
{//写递归首先写结束条件//越界时,返回if ((x > (ROWS - 2)) || (x < 1) || (y > (COLS - 2)) || (y < 1)){return;}//遇到以及排过雷的坐标返回if (show[x][y] != '*'){return;}//计算雷的个数int count = 0;for (int i = -1; i <= 1; i++){for (int j = -1; j <= 1; j++){count += Count_mine(mine, x + i, y + j);}}show[x][y] = count + '0';//按照游戏规则,如果坐标显示雷的数目不为零,则返回if (show[x][y] != '0'){return;}//展开雷for (int i = -1; i <= 1; i++){for (int j = -1; j <= 1; j++){Open_keyboard(show, mine, x + i, y + j);}}}//排雷
void move_mine(char show[ROWS][COLS], char mine[ROWS][COLS], int row, int col)
{int x, y;while (1){printf("请输入要排查的坐标:");regain2:scanf("%d %d", &x, &y);if ((x >= 1 && x <= 9) && (y >= 1 && y <= 9)){if (show[x][y] == '*'){if (mine[x][y] == '0'){Open_keyboard(show,mine,x,y);printf_keyboard(show, ROW, COL);}else{printf("很遗憾,踩到雷了,游戏结束\n以下是雷的位置:");printf_keyboard(mine, ROW, COL);break;}}else{printf("该坐标已经排查过了,请输入别的坐标:");goto regain2;}}else{printf("输入错误,重新输入:");goto regain2;}//判断赢int Remove_mine_count = 0;for (int i = 1; i <= row; i++){for (int j = 1; j <= col; j++){if (show[i][j] != '*'){Remove_mine_count++;}}}if (Remove_mine_count == ((ROW * COL) - MINE)){printf("恭喜你,排除所有的雷,游戏胜利\n");printf_keyboard(mine, ROW, COL);break;}}
}
game.h文件的代码不变
game.h
#pragma once
#include <stdio.h>
#include "game.h"
#include <time.h>
#include "stdlib.h"#define ROW 9
#define COL 9
#define ROWS ROW+3
#define COLS COL+2
#define MINE 10//菜单
void menu();//初始化棋盘
void set_keyboard(char board[ROWS][COLS], int rows, int cols, char set);//展示棋盘
void printf_keyboard(char board[ROWS][COLS], int row, int col);//随机布置雷
void set_mine(char board[ROWS][COLS], int row, int col, int mine);//排雷
void move_mine(char show[ROWS][COLS], char mine[ROWS][COLS], int row, int col);
五、扫雷游戏完整代码
test.c
#include "game.h"void game()
{//用于布置雷的二维数组char mine[ROWS][COLS] = { 0 };//用于游戏界面的的二维数组char show[ROWS][COLS] = { 0 };//用于游戏界面的的二维数组全部初始为 '*'set_keyboard(show, ROWS, COLS, '*');//用于布置雷的二维数组全部初始化为 '0'set_keyboard(mine, ROWS, COLS, '0');//随机布置雷set_mine(mine, ROW, COL, MINE);//打印函数printf_keyboard(show, ROW, COL);//printf_keyboard(mine, ROW, COL);//排雷move_mine(show, mine, ROW, COL);
}int main()
{menu();{regain1:printf("请输入你的选择:");int input1;scanf("%d", &input1);switch (input1){case 1:{printf("进入游戏\n");game();break;}case 0:{printf("退出游戏\n");break;}default:{printf("输入错误,请重新输入:");goto regain1;}}}return 0;
}
game.c
#include "game.h"//界面
void menu()
{printf("****************\n");printf("**** 1.Play ****\n");printf("**** 0.Quit ****\n");printf("****************\n");}//初始化棋盘
void set_keyboard(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 printf_keyboard(char board[ROWS][COLS], int row, int col)
{printf("-------扫雷--------\n");for (int r = 0; r <= row; r++){printf("%d ", r);}printf("\n");for (int i = 1; i <= row; i++){printf("%d ", i);for (int j = 1; j <= col; j++){printf("%c ", board[i][j]);}printf("\n");}
}//随机布置雷
void set_mine(char board[ROWS][COLS], int row, int col, int mine)
{srand((unsigned int) time(NULL));while (mine){int x = (rand() % row) + 1;int y = (rand() % col) + 1;if (board[x][y] == '0');{board[x][y] = '1';mine--;}}
}//计算周围雷的个数
int Count_mine(char mine[ROWS][COLS], int x, int y)
{return mine[x][y] - '0';
}//展开棋盘----递归
void Open_keyboard(char show[ROWS][COLS], char mine[ROWS][COLS], int x, int y)
{//写递归首先写结束条件//越界时,返回if ((x > (ROWS - 2)) || (x < 1) || (y > (COLS - 2)) || (y < 1)){return;}//遇到以及排过雷的坐标返回if (show[x][y] != '*'){return;}//计算雷的个数int count = 0;for (int i = -1; i <= 1; i++){for (int j = -1; j <= 1; j++){count += Count_mine(mine, x + i, y + j);}}show[x][y] = count + '0';//按照游戏规则,如果坐标显示雷的数目不为零,则返回if (show[x][y] != '0'){return;}//展开雷for (int i = -1; i <= 1; i++){for (int j = -1; j <= 1; j++){Open_keyboard(show, mine, x + i, y + j);}}}//排雷
void move_mine(char show[ROWS][COLS], char mine[ROWS][COLS], int row, int col)
{int x, y;while (1){printf("请输入要排查的坐标:");regain2:scanf("%d %d", &x, &y);if ((x >= 1 && x <= 9) && (y >= 1 && y <= 9)){if (show[x][y] == '*'){if (mine[x][y] == '0'){Open_keyboard(show,mine,x,y);printf_keyboard(show, ROW, COL);}else{printf("很遗憾,踩到雷了,游戏结束\n以下是雷的位置:");printf_keyboard(mine, ROW, COL);break;}}else{printf("该坐标已经排查过了,请输入别的坐标:");goto regain2;}}else{printf("输入错误,重新输入:");goto regain2;}//判断赢int Remove_mine_count = 0;for (int i = 1; i <= row; i++){for (int j = 1; j <= col; j++){if (show[i][j] != '*'){Remove_mine_count++;}}}if (Remove_mine_count == ((ROW * COL) - MINE)){printf("恭喜你,排除所有的雷,游戏胜利\n");printf_keyboard(mine, ROW, COL);break;}}
}
game.h
#pragma once
#include <stdio.h>
#include "game.h"
#include <time.h>
#include "stdlib.h"#define ROW 9
#define COL 9
#define ROWS ROW+3
#define COLS COL+2
#define MINE 10//菜单
void menu();//初始化棋盘
void set_keyboard(char board[ROWS][COLS], int rows, int cols, char set);//展示棋盘
void printf_keyboard(char board[ROWS][COLS], int row, int col);//随机布置雷
void set_mine(char board[ROWS][COLS], int row, int col, int mine);//排雷
void move_mine(char show[ROWS][COLS], char mine[ROWS][COLS], int row, int col);
相关文章:
C语言-----扫雷游戏
扫雷游戏的功能说明 : • 使⽤控制台实现经典的扫雷游戏 • 游戏可以通过菜单实现继续玩或者退出游戏 • 扫雷的棋盘是9*9的格⼦ • 默认随机布置10个雷 • 可以排查雷: ◦ 如果位置不是雷,就显⽰周围有⼏个雷 ◦ 如果位置是雷,就…...
监控与调试:性能优化的利器 — ShardingSphere
在分布式数据库系统中,监控和调试是确保系统高效运行的关键。ShardingSphere 提供了多种监控和调试工具,帮助开发者实时跟踪和优化性能,识别瓶颈,进行故障排查,从而提升系统的稳定性和响应速度。本文将介绍如何使用 Sh…...
Kubernetes相关知识入门详解
一、Pod的滚动升级 1.服务升级的一般思路:停止与该服务相关的所有服务pod,重新拉去更新后的镜像并启动。这种方法存在一个比较现实的问题是逐步升级导致较长时间的服务不可用。 2.Kubernetes滚动升级的思路:通过滚动升级的命令创建新的rc&…...
多层 RNN原理以及实现
数学原理 多层 RNN 的核心思想是堆叠多个 RNN 层,每一层的输出作为下一层的输入,从而逐层提取更高层次的抽象特征。 1. 单层 RNN 的数学表示 首先,单层 RNN 的计算过程如下。对于一个时间步 t t t,单层 RNN 的隐藏状态 h t h_t…...
Unity阿里云OpenAPI 获取 Token的C#【记录】
获取Token using UnityEngine; using System; using System.Text; using System.Linq; using Newtonsoft.Json.Linq; using System.Security.Cryptography; using UnityEngine.Networking; using System.Collections.Generic; using System.Globalization; using Cysharp.Thr…...
java+vue项目部署记录
目录 前言 一、java和vue 二、部署记录 1.获取代码 2.运行前端 3.运行后端 三、其他 1.nvm 总结 前言 近期工作需要部署一套javavue前后分离的项目,之前都略有接触,但属于不及皮毛的程度,好在对其他开发语言、html js这些还算熟&am…...
PID 控制算法(二):C 语言实现与应用
在本文中,我们将用 C 语言实现一个简单的 PID 控制器,并通过一个示例来演示如何使用 PID 控制算法来调整系统的状态(如温度、速度等)。同时,我们也会解释每个控制参数如何影响系统的表现。 什么是 PID 控制器…...
深入MapReduce——计算模型设计
引入 通过引入篇,我们可以总结,MapReduce针对海量数据计算核心痛点的解法如下: 统一编程模型,降低用户使用门槛分而治之,利用了并行处理提高计算效率移动计算,减少硬件瓶颈的限制 优秀的设计,…...
在Spring Boot中使用SeeEmitter类实现EventStream流式编程将实时事件推送至客户端
😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…...
Qt实践:一个简单的丝滑侧滑栏实现
Qt实践:一个简单的丝滑侧滑栏实现 笔者前段时间突然看到了侧滑栏,觉得这个抽屉式的侧滑栏非常的有趣,打算这里首先尝试实现一个简单的丝滑侧滑栏。 首先是上效果图 (C,GIF帧率砍到毛都不剩了) QProperty…...
基于ESP32-IDF驱动GPIO输出控制LED
基于ESP32-IDF驱动GPIO输出控制LED 文章目录 基于ESP32-IDF驱动GPIO输出控制LED一、点亮LED3.1 LED电路3.2 配置GPIO函数gpio_config()原型和头文件3.3 设置GPIO引脚电平状态函数gpio_set_level()原型和头文件3.4 代码实现并编译烧录 一、点亮LED 3.1 LED电路 可以看到&#x…...
OpenCV文字绘制支持中文显示
OpenCV版本:4.4 IDE:VS2019 功能描述 OpenCV绘制文本的函数putText()不支持中文的显示,网上很多方法推荐的都是使用FreeType来支持,FreeType是什么呢?FreeType的官网上有介绍 FreeType官网 https://www.freetype.or…...
jenkins-k8s pod方式动态生成slave节点
一. 简述: 使用 Jenkins 和 Kubernetes (k8s) 动态生成 Slave 节点是一种高效且灵活的方式来管理 CI/CD 流水线。通过这种方式,Jenkins 可以根据需要在 Kubernetes 集群中创建和销毁 Pod 来执行任务,从而充分利用集群资源并实现更好的隔离性…...
消息队列篇--基础篇(消息队列特点,应用场景、点对点和发布订阅工作模式,RabbmitMQ和Kafka代码示例等)
1、消息队列的介绍 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可以更复杂,可能包含嵌入对象。 消息队列(Message Queue,简称MQ)…...
Jetpack架构组件学习——使用Glance实现桌面小组件
基本使用 1.添加依赖 添加Glance依赖: // For AppWidgets supportimplementation "androidx.glance:glance-appwidget:1.1.0"// For interop APIs with Material 3implementation "androidx.glance:glance-material3:1.1.0"// For interop APIs with Mater…...
go读取excel游戏配置
1.背景 游戏服务器,配置数据一般采用csv/excel来作为载体,这种方式,策划同学配置方便,服务器解析也方便。在jforgame框架里,我们使用以下的excel配置格式。 然后可以非常方便的进行数据检索,例如ÿ…...
Linux系统下速通stm32的clion开发环境配置
陆陆续续搞这个已经很久了。 因为自己新电脑是linux系统无法使用keil,一开始想使用vscode里的eide但感觉不太好用;后面想直接使用cudeide但又不想妥协,想趁着这个机会把linux上的其他单片机开发配置也搞明白;而且非常想搞懂cmake…...
快慢指针及原理证明(swift实现)
目录 链表快慢指针一、快慢指针基本介绍二、快慢指针之找特殊节点1.删除链表的倒数第k个结点题目描述解题思路 2.链表的中间节点题目描述解题思路 三、快慢指针之环形问题1.判断环形链表题目描述解题思路 2.判断环形链表并返回入环节点题目描述解题思路 3.变种——判断快乐数题…...
web前端3--css
注意(本文一切代码一律是在vscode中书写) 1、书写位置 1、行内样式 //<标签名 style"样式声明"> <p style"color: red;">666</p> 2、内嵌样式 1、style标签 里面写css代码 css与html之间分离 2、css属性:值…...
一文大白话讲清楚webpack基本使用——5——babel的配置和使用
文章目录 一文大白话讲清楚webpack基本使用——5——babel的配置和使用1. 建议按文章顺序从头看,一看到底,豁然开朗2. babel-loader的配置和使用2.1 针对ES6的babel-loader2.2 针对typescript的babel-loader2.3 babel配置文件 一文大白话讲清楚webpack基…...
Python自动化运维:一键掌控服务器的高效之道
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 在互联网和云计算高速发展的今天,服务器数量的指数增长使得手动运维和管理变得异常繁琐。Python凭借其强大的可读性和丰富的生态系统,成为…...
基于quartz,刷新定时器的cron表达式
文章目录 前言基于quartz,刷新定时器的cron表达式1. 先看一下测试效果2. 实现代码 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。 而且听说点赞的人每天的运气都不会太差&…...
HTML常用属性
HTML标签的常见属性包括许多不同的功能,可以为元素提供附加信息或控制元素的行为。以下是一些常见的属性及其解释: 1. src 描述:src(source)属性指定一个资源的路径,通常用于图像、音频、视频等标签。常见…...
在 Babylon.js 中使用 Gizmo:交互式 3D 操作工具
在 3D 应用程序中,交互式操作对象(如平移、旋转、缩放)是一个常见的需求。Babylon.js 提供了一个强大的工具——Gizmo,用于在 3D 场景中实现这些功能。本文将介绍如何在 Babylon.js 中使用 Gizmo,并展示如何通过代码实…...
蓝桥杯练习日常|递归-进制转换
蓝桥云课760数的计算 一、递归 题目: 我的解题代码: #include <iostream> using namespace std; int sum0; int main() {// 请在此输入您的代码int n;cin>>n;int fun(int n);fun(n); cout<<sum<<\n;return 0; } // void fu…...
LabVIEW滤波器选择与参数设置
在信号处理应用中,滤波器是去除噪声、提取目标信号的重要工具。LabVIEW 提供多种类型的滤波器(如低通、高通、带通、带阻),用户需要根据采样频率、信号特性和应用需求合理选择滤波器类型及参数设置。本文以 采样率 100kHz…...
【c语言日寄】Vs调试——新手向
【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还是…...
C#中的Timers.Timer使用用法及常见报错
System.Timers.Timer 是一个基于服务器的计时器,它可以在应用程序中定期触发事件。这个计时器特别适合用于多线程环境,并且不应该与用户界面(UI)直接交互。在 ASP.NET 中,通常使用 System.Timers.Timer 来处理周期性的任务。 主要使用步骤&am…...
chrome小插件:长图片等分切割
前置条件: 安装有chrome谷歌浏览器的电脑 使用步骤: 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.选择图片进行切割,切割完成后会自动保存 代码…...
mysql数据被误删的恢复方案
文章目录 一、使用备份恢复二、使用二进制日志(Binary Log)三、使用InnoDB表空间恢复四、使用第三方工具预防措施 数据误删是一个严重的数据库管理问题,但通过合理的备份策略和使用适当的恢复工具,可以有效地减少数据丢失的风险…...
K8S-Pod资源清单的编写,资源的增删改查,镜像的下载策略
1. Pod资源清单的编写 1.1 Pod运行单个容器的资源清单 ##创建工作目录 mkdir -p /root/manifests/pods && cd /root/manifests/pods vim 01-nginx.yaml ##指定api版本 apiVersion: v1 ##指定资源类型 kind: Pod ##指定元数据 metadata:##指定名称name: myweb ##用户…...
Unity Line Renderer Component入门
Overview Line Renderer 组件是 Unity 中用于绘制连续线段的工具。它通过在三维空间中的两个或两个以上的点的数组,并在每个点之间绘制一条直线。可以绘制从简单的直线到复杂的螺旋线等各种图形。 1. 连续性和独立线条 连续性:Line Renderer 绘制的线条…...
计算机工程:解锁未来科技之门!
计算机工程与应用是一个充满无限可能性的领域。随着科技的迅猛发展,计算机技术已经深深渗透到我们生活的方方面面,从医疗、金融到教育,无一不在彰显着计算机工程的巨大魅力和潜力。 在医疗行业,计算机技术的应用尤为突出。比如&a…...
翻译:How do I reset my FPGA?
文章目录 背景翻译:How do I reset my FPGA?1、Understanding the flip-flop reset behavior2、Reset methodology3、Use appropriate resets to maximize utilization4、Many options5、About the author 背景 在写博客《复位信号的同步与释放(同步复…...
在Unity中使用大模型进行离线语音识别
文章目录 1、Vosk下载下载vosk-untiy-asr下载模型在项目中使用语音转文字音频转文字2、whisper下载下载unity项目下载模型在unity中使用1、Vosk 下载 下载vosk-untiy-asr Github链接:https://github.com/alphacep/vosk-unity-asr 进不去Github的可以用网盘 夸克网盘链接:h…...
SpringBoot+Vue使用Echarts
前言 在vue项目中使用echarts,本次演示是使用vue2 1 前端准备 echarts官网: https://echarts.apache.org/zh/index.html 官网提供了基本的使用说明和大量的图表 1.1 下载echarts 执行命令 npm install echarts 直接这样执行很可能会失败,…...
【QT】-explicit关键字
explicit explicit 是一个 C 关键字,用于修饰构造函数。它的作用是防止构造函数进行隐式转换。 为什么需要 explicit? 在没有 explicit 的情况下,构造函数可以用于隐式类型转换。这意味着,如果你有一个接受某种类型的参数的构造…...
docker: Device or resource busy
(base) [rootbddx-vr-gpu-bcc2 /]#rm -rf /ssd1/docker/overlay2/8d96a51e3fb78e434fcf2b085e952adcc82bfe37485d427e1e017361a277326d/ rm: cannot remove ‘/ssd1/docker/overlay2/8d96a51e3fb78e434fcf2b085e952adcc82bfe37485d427e1e017361a277326d/merged’: Device or re…...
Vue - toRefs() 和 toRef() 的使用
一、toRefs() 在 Vue 3 中,toRefs()可以将响应式对象的属性转换为可响应的 refs。主要用于在解构响应式对象时,保持属性的响应性。 1. 导入 toRefs 函数 import { toRefs } from vue;2. 将响应式对象的属性转换为 ref const state reactive({count: 0,message:…...
(2024,MLLM,Healthcare,综述)多模态学习是否已在医疗保健领域实现通用智能?
Has Multimodal Learning Delivered Universal Intelligence in Healthcare? A Comprehensive Survey 目录 0. 摘要 1. 简介 5. MLLM 5.1 模态编码器与跨模态适配器 5.1.1 图像编码器 (Image Encoder) 5.1.2 语言模型 (Language Model) 5.1.3 跨模态适配器 (Cross-moda…...
css命名规范——BEM
目录 引言 BEM是什么? 块Block 元素Element 修饰语Modifier BEM解决了哪些问题? 在流行框架的组件中使用 BEM 格式 实战 认识设计图 如何使用当前的css规范正确命名? 引言 css样式类命名难、太难了,难于上青天,这个和js变量命名还不一样。看看项目中五花八门的样…...
使用PHP函数 “is_object“ 检查变量是否为对象类型
在PHP中,变量可以保存不同类型的值,包括整数、字符串、数组、布尔值等等。其中,对象是一种特殊的数据类型,用于封装数据和方法。在处理PHP代码中,我们经常需要检查一个变量是否为对象类型,以便进行相应的处…...
Golang:使用DuckDB查询Parquet文件数据
本文介绍DuckDB查询Parquet文件的典型应用场景,掌握DuckDB会让你的产品分析能力更强,相反系统运营成本相对较低。为了示例完整,我也提供了如何使用Python导出MongoDB数据。 Apache Parquet文件格式在存储和传输大型数据集方面变得非常流行。最…...
Moretl FileSync增量文件采集工具
永久免费: <下载> <使用说明> 我们希望Moretl FileSync是一款通用性很好的文件日志采集工具,解决工厂环境下,通过共享目录采集文件,SMB协议存在的安全性,兼容性的问题. 同时,我们发现工厂设备日志一般为增量,为方便MES,QMS等后端系统直接使用数据,我们推出了增量采…...
消息队列篇--原理篇--Pulsar(Namespace,BookKeeper,类似Kafka甚至更好的消息队列)
Apache Pulusar是一个分布式、多租户、高性能的发布/订阅(Pub/Sub)消息系统,最初由Yahoo开发并开源。它结合了Kafka和传统消息队列的优点,提供高吞吐量、低延迟、强一致性和可扩展的消息传递能力,适用于大规模分布式系…...
linux 扩容
tmpfs tmpfs 82M 0 82M 0% /run/user/1002 tmpfs tmpfs 82M 0 82M 0% /run/user/0 [输入命令]# fdisk -lu Disk /dev/vda: 40 GiB, 42949672960 bytes, 83886080 sectors Units: sectors of 1 * 512 512 bytes Sector size (logi…...
数据表中的数据查询
文章目录 一、概述二、简单查询1.列出表中所有字段2.“*”符号表示所有字段3.查询指定字段数据4.DISTINCT查询 三、IN查询四、BETWEEN ADN查询1.符合范围的数据记录查询2.不符合范围的数据记录查询 五、LIKE模糊查询六、对查询结果排序七、简单分组查询1.统计数量2.统计计算平均…...
深入了解 Java split() 方法:分割字符串的利器
Java 提供的 split() 方法是 String 类中一个常用的工具,它可以将一个字符串根据指定的分隔符切割成多个子字符串,并以字符串数组的形式返回。这个方法常用于字符串的处理、数据解析等场景。本文将详细介绍 Java 中 split() 方法的使用方式,并…...
Ubuntu 安装 docker 配置环境及其常用命令
Docker 安装与配置指南 本文介绍如何在 Ubuntu 系统上安装 Docker,解决权限问题,配置 Docker Compose,代理端口转发,容器内部代理问题等并进行相关的优化设置。参考官方文档:Docker 官方安装指南 一、安装 Docker 1…...
Android Studio安装配置
一、注意事项 想做安卓app和开发板通信,踩了大坑,Android 开发不是下载了就能直接开发的,对于新手需要注意的如下: 1、Android Studio版本,根据自己的Android Studio版本对应决定了你所兼容的AGP(Android…...