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

用Deepseek写扫雷uniapp小游戏

扫雷作为Windows系统自带的经典小游戏,承载了许多人的童年回忆。本文将详细介绍如何使用Uniapp框架从零开始实现一个完整的扫雷游戏,包含核心算法、交互设计和状态管理。无论你是Uniapp初学者还是有一定经验的开发者,都能从本文中获得启发。

一、游戏设计思路

1.1 游戏规则回顾

扫雷游戏的基本规则非常简单:

  • 游戏区域由方格组成,部分方格下藏有地雷

  • 玩家点击方格可以揭开它

  • 如果揭开的是地雷,游戏结束

  • 如果揭开的是空白格子,会显示周围8格中的地雷数量

  • 玩家可以通过标记来标识可能的地雷位置

  • 当所有非地雷方格都被揭开时,玩家获胜

1.2 技术实现要点

基于上述规则,我们需要实现以下核心功能:

  1. 游戏棋盘的数据结构

  2. 随机布置地雷的算法

  3. 计算每个格子周围地雷数量的方法

  4. 点击和长按的交互处理

  5. 游戏状态管理(进行中、胜利、失败)

  6. 计时和剩余地雷数的显示

二、Uniapp实现详解

2.1 项目结构

我们创建一个单独的页面minesweeper/minesweeper.vue来实现游戏,主要包含三个部分:

  • 模板部分:游戏界面布局

  • 脚本部分:游戏逻辑实现

  • 样式部分:游戏视觉效果

2.2 核心代码解析

2.2.1 游戏数据初始化
data() {return {rows: 10,       // 行数cols: 10,       // 列数mines: 15,      // 地雷数board: [],      // 游戏棋盘数据remainingMines: 0, // 剩余地雷数time: 0,        // 游戏时间timer: null,    // 计时器gameOver: false, // 游戏是否结束gameOverMessage: '', // 结束消息firstClick: true // 是否是第一次点击}
}
2.2.2 游戏初始化方法
startGame(rows, cols, mines) {this.rows = rows;this.cols = cols;this.mines = mines;this.remainingMines = mines;this.time = 0;this.gameOver = false;this.firstClick = true;// 初始化棋盘数据结构this.board = Array(rows).fill().map(() => Array(cols).fill().map(() => ({mine: false,          // 是否是地雷revealed: false,      // 是否已揭开flagged: false,       // 是否已标记neighborMines: 0,     // 周围地雷数exploded: false       // 是否爆炸(踩中地雷)})));
}
2.2.3 地雷布置算法
placeMines(firstRow, firstCol) {let minesPlaced = 0;// 随机布置地雷,但避开第一次点击位置及周围while (minesPlaced < this.mines) {const row = Math.floor(Math.random() * this.rows);const col = Math.floor(Math.random() * this.cols);if (!this.board[row][col].mine && Math.abs(row - firstRow) > 1 && Math.abs(col - firstCol) > 1) {this.board[row][col].mine = true;minesPlaced++;}}// 计算每个格子周围的地雷数for (let row = 0; row < this.rows; row++) {for (let col = 0; col < this.cols; col++) {if (!this.board[row][col].mine) {let count = 0;// 检查周围8个格子for (let r = Math.max(0, row - 1); r <= Math.min(this.rows - 1, row + 1); r++) {for (let c = Math.max(0, col - 1); c <= Math.min(this.cols - 1, col + 1); c++) {if (this.board[r][c].mine) count++;}}this.board[row][col].neighborMines = count;}}}
}

 2.2.4 格子揭示逻辑

revealCell(row, col) {// 第一次点击时布置地雷if (this.firstClick) {this.placeMines(row, col);this.startTimer();this.firstClick = false;}// 点击到地雷if (this.board[row][col].mine) {this.board[row][col].exploded = true;this.gameOver = true;this.gameOverMessage = '游戏结束!你踩到地雷了!';this.revealAllMines();return;}// 递归揭示空白区域this.revealEmptyCells(row, col);// 检查是否获胜if (this.checkWin()) {this.gameOver = true;this.gameOverMessage = '恭喜你赢了!';}
}
2.2.5 递归揭示空白区域
revealEmptyCells(row, col) {// 边界检查if (row < 0 || row >= this.rows || col < 0 || col >= this.cols || this.board[row][col].revealed || this.board[row][col].flagged) {return;}this.board[row][col].revealed = true;// 如果是空白格子,递归揭示周围的格子if (this.board[row][col].neighborMines === 0) {for (let r = Math.max(0, row - 1); r <= Math.min(this.rows - 1, row + 1); r++) {for (let c = Math.max(0, col - 1); c <= Math.min(this.cols - 1, col + 1); c++) {if (r !== row || c !== col) {this.revealEmptyCells(r, c);}}}}
}

2.3 界面实现

游戏界面主要分为三个部分:

  1. 游戏信息区:显示标题、剩余地雷数和用时

  2. 游戏棋盘:由方格组成的扫雷区域

  3. 控制区:难度选择按钮和游戏结束提示

<view class="game-board"><view v-for="(row, rowIndex) in board" :key="rowIndex" class="row"><view v-for="(cell, colIndex) in row" :key="colIndex" class="cell":class="{'revealed': cell.revealed,'flagged': cell.flagged,'mine': cell.revealed && cell.mine,'exploded': cell.exploded}"@click="revealCell(rowIndex, colIndex)"@longpress="toggleFlag(rowIndex, colIndex)"><!-- 显示格子内容 --><text v-if="cell.revealed && !cell.mine && cell.neighborMines > 0">{{ cell.neighborMines }}</text><text v-else-if="cell.flagged">🚩</text><text v-else-if="cell.revealed && cell.mine">💣</text></view></view>
</view>

三、关键技术与优化点

3.1 性能优化

  1. 延迟布置地雷:只在第一次点击后才布置地雷,确保第一次点击不会踩雷,提升用户体验

  2. 递归算法优化:在揭示空白区域时使用递归算法,但要注意边界条件,避免无限递归

3.2 交互设计

  1. 长按标记:使用@longpress事件实现标记功能,符合移动端操作习惯

  2. 视觉反馈:为不同类型的格子(普通、已揭示、标记、地雷、爆炸)设置不同的样式

3.3 状态管理

  1. 游戏状态:使用gameOvergameOverMessage管理游戏结束状态

  2. 计时器:使用setInterval实现游戏计时功能,注意在组件销毁时清除计时器

四、扩展思路

这个基础实现还可以进一步扩展:

  1. 本地存储:使用uni.setStorage保存最佳成绩

  2. 音效增强:添加点击、标记、爆炸等音效

  3. 动画效果:为格子添加翻转动画,增强视觉效果

  4. 自定义难度:允许玩家自定义棋盘大小和地雷数量

  5. 多平台适配:优化在不同平台(H5、小程序、App)上的显示效果

五、总结

通过本文的介绍,我们完整实现了一个基于Uniapp的扫雷游戏,涵盖了从数据结构设计、核心算法实现到用户交互处理的全部流程。这个项目不仅可以帮助理解Uniapp的开发模式,也是学习游戏逻辑开发的好例子。读者可以根据自己的需求进一步扩展和完善这个游戏。

完整代码

<template><view class="minesweeper-container"><view class="game-header"><text class="title">扫雷游戏</text><view class="game-info"><text>剩余: {{ remainingMines }}</text><text>时间: {{ time }}</text></view></view><view class="game-board"><view v-for="(row, rowIndex) in board" :key="rowIndex" class="row"><view v-for="(cell, colIndex) in row" :key="colIndex" class="cell":class="{'revealed': cell.revealed,'flagged': cell.flagged,'mine': cell.revealed && cell.mine,'exploded': cell.exploded}"@click="revealCell(rowIndex, colIndex)"@longpress="toggleFlag(rowIndex, colIndex)"><text v-if="cell.revealed && !cell.mine && cell.neighborMines > 0">{{ cell.neighborMines }}</text><text v-else-if="cell.flagged">🚩</text><text v-else-if="cell.revealed && cell.mine">💣</text></view></view></view><view class="game-controls"><button @click="startGame(10, 10, 15)">初级 (10×10, 15雷)</button><button @click="startGame(15, 15, 40)">中级 (15×15, 40雷)</button><button @click="startGame(20, 20, 99)">高级 (20×20, 99雷)</button></view><view v-if="gameOver" class="game-over"><text>{{ gameOverMessage }}</text><button @click="startGame(rows, cols, mines)">再玩一次</button></view></view>
</template><script>
export default {data() {return {rows: 10,cols: 10,mines: 15,board: [],remainingMines: 0,time: 0,timer: null,gameOver: false,gameOverMessage: '',firstClick: true}},created() {this.startGame(10, 10, 15);},methods: {startGame(rows, cols, mines) {this.rows = rows;this.cols = cols;this.mines = mines;this.remainingMines = mines;this.time = 0;this.gameOver = false;this.firstClick = true;clearInterval(this.timer);// 初始化棋盘this.board = Array(rows).fill().map(() => Array(cols).fill().map(() => ({mine: false,revealed: false,flagged: false,neighborMines: 0,exploded: false})));},placeMines(firstRow, firstCol) {let minesPlaced = 0;while (minesPlaced < this.mines) {const row = Math.floor(Math.random() * this.rows);const col = Math.floor(Math.random() * this.cols);// 确保第一次点击的位置和周围没有地雷if (!this.board[row][col].mine && Math.abs(row - firstRow) > 1 && Math.abs(col - firstCol) > 1) {this.board[row][col].mine = true;minesPlaced++;}}// 计算每个格子周围的地雷数for (let row = 0; row < this.rows; row++) {for (let col = 0; col < this.cols; col++) {if (!this.board[row][col].mine) {let count = 0;for (let r = Math.max(0, row - 1); r <= Math.min(this.rows - 1, row + 1); r++) {for (let c = Math.max(0, col - 1); c <= Math.min(this.cols - 1, col + 1); c++) {if (this.board[r][c].mine) count++;}}this.board[row][col].neighborMines = count;}}}},revealCell(row, col) {if (this.gameOver || this.board[row][col].revealed || this.board[row][col].flagged) {return;}// 第一次点击时放置地雷并开始计时if (this.firstClick) {this.placeMines(row, col);this.startTimer();this.firstClick = false;}// 点击到地雷if (this.board[row][col].mine) {this.board[row][col].exploded = true;this.gameOver = true;this.gameOverMessage = '游戏结束!你踩到地雷了!';this.revealAllMines();clearInterval(this.timer);return;}// 递归揭示空白区域this.revealEmptyCells(row, col);// 检查是否获胜if (this.checkWin()) {this.gameOver = true;this.gameOverMessage = '恭喜你赢了!';clearInterval(this.timer);}},revealEmptyCells(row, col) {if (row < 0 || row >= this.rows || col < 0 || col >= this.cols || this.board[row][col].revealed || this.board[row][col].flagged) {return;}this.board[row][col].revealed = true;if (this.board[row][col].neighborMines === 0) {// 如果是空白格子,递归揭示周围的格子for (let r = Math.max(0, row - 1); r <= Math.min(this.rows - 1, row + 1); r++) {for (let c = Math.max(0, col - 1); c <= Math.min(this.cols - 1, col + 1); c++) {if (r !== row || c !== col) {this.revealEmptyCells(r, c);}}}}},toggleFlag(row, col) {if (this.gameOver || this.board[row][col].revealed) {return;}if (this.board[row][col].flagged) {this.board[row][col].flagged = false;this.remainingMines++;} else if (this.remainingMines > 0) {this.board[row][col].flagged = true;this.remainingMines--;}},startTimer() {clearInterval(this.timer);this.timer = setInterval(() => {this.time++;}, 1000);},revealAllMines() {for (let row = 0; row < this.rows; row++) {for (let col = 0; col < this.cols; col++) {if (this.board[row][col].mine) {this.board[row][col].revealed = true;}}}},checkWin() {for (let row = 0; row < this.rows; row++) {for (let col = 0; col < this.cols; col++) {if (!this.board[row][col].mine && !this.board[row][col].revealed) {return false;}}}return true;}},beforeDestroy() {clearInterval(this.timer);}
}
</script><style>
.minesweeper-container {padding: 20px;display: flex;flex-direction: column;align-items: center;
}.game-header {margin-bottom: 20px;text-align: center;
}.game-header .title {font-size: 24px;font-weight: bold;margin-bottom: 10px;
}.game-info {display: flex;justify-content: space-around;width: 100%;
}.game-board {border: 2px solid #333;margin-bottom: 20px;
}.row {display: flex;
}.cell {width: 30px;height: 30px;border: 1px solid #ccc;display: flex;justify-content: center;align-items: center;background-color: #ddd;font-weight: bold;
}.cell.revealed {background-color: #fff;
}.cell.flagged {background-color: #ffeb3b;
}.cell.mine {background-color: #f44336;
}.cell.exploded {background-color: #d32f2f;
}.game-controls {display: flex;flex-direction: column;gap: 10px;width: 100%;max-width: 300px;
}.game-over {margin-top: 20px;text-align: center;font-size: 18px;font-weight: bold;
}button {margin-top: 10px;padding: 10px;background-color: #4CAF50;color: white;border: none;border-radius: 5px;cursor: pointer;
}button:active {background-color: #3e8e41;
}
</style>

 

相关文章:

用Deepseek写扫雷uniapp小游戏

扫雷作为Windows系统自带的经典小游戏&#xff0c;承载了许多人的童年回忆。本文将详细介绍如何使用Uniapp框架从零开始实现一个完整的扫雷游戏&#xff0c;包含核心算法、交互设计和状态管理。无论你是Uniapp初学者还是有一定经验的开发者&#xff0c;都能从本文中获得启发。 …...

C++中的异常和智能指针

一、C中的异常 1.1C语言中关于错误的处理&#xff08;回顾&#xff09; 1.1.1处理一&#xff1a;文件中的错误码&#xff0c;错误信息 C语言中&#xff0c;文件打开成功则返回地址&#xff0c;不成功返回0 FILE* foutfopen("Test.txt","r"); cout<&…...

Selenium 简单入门操作示例

最简单的 Selenium 示例&#xff08;Python版&#xff09; 下面是一个完整的、最简单的 Selenium 操作示例&#xff0c;带你快速上手&#xff1a; from selenium import webdriver from selenium.webdriver.common.by import By import time# 1. 启动浏览器&#xff08;这里使…...

6.1 模拟专题:LeetCode 1576. 替换所有的问号

1. 题目链接 LeetCode 1576. 替换所有的问号 2. 题目描述 给定一个仅包含小写字母和问号 ? 的字符串 s&#xff0c;要求将所有 ? 替换为任意小写字母&#xff0c;使得替换后的字符串中 没有相邻的两个字符相同。 示例&#xff1a; 输入&#xff1a;s "?zs" →…...

前端知识点---用正则表达式判断邮箱(javascript)

// 全面的正则&#xff08;兼容大多数情况&#xff09; const emailRegex /^[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,}$/;// 或直接使用浏览器内置验证 <input type"email" required>/&#xff1a;正则表达式的起始和结束标志。 ^&#xff1a;匹配字符串的…...

深度剖析 Spring 源码 性能优化:核心原理与最佳实践

深度剖析 Spring 源码 & 性能优化&#xff1a;核心原理与最佳实践 &#x1f680; Spring 框架 作为 Java 生态的核心技术&#xff0c;广泛应用于企业级开发。但很多开发者只会“用”Spring&#xff0c;而不深入其内部原理&#xff0c;导致无法高效排查问题 & 进行性能优…...

Axure RP9教程 :轮播图(动态面板) | 头部锁定

文章目录 引言I 轮播图操作步骤在画布中添加一个动态面板设置面板状态II 头部锁定将头部区域选中,右键组合或用Ctrl+G快捷键;将组合的头部区域,右键创建动态面板;引言 动态面板的功能十分强大,比如:拥有独立的内部坐标系,有多个状态; Banner的案例中会用到动态面板多个…...

rabbitmq承接MES客户端服务器

文章目录 背景整体架构概述方案详细步骤1. 数据库选型与搭建2. 设备端数据上传至数据库3. 搭建 RabbitMQ 服务器4. 数据同步模块&#xff08;数据库到 RabbitMQ&#xff09;5. MES 服务器从 RabbitMQ 接收数据6. 指令接收模块&#xff08;RabbitMQ 到设备端&#xff09; 7. MES…...

重学vue3(三):vue3基本语法及使用

组合式 API是vue3 的核心特性&#xff0c;替代 Vue2 的选项式 API&#xff0c;强调逻辑复用和代码组织。基本语法如下&#xff1a; <script setup> import { ref, reactive, computed, onMounted } from vue;// 1. 响应式数据 const count ref(0); // 基本类…...

算法 | 麻雀搜索算法原理,公式,改进算法综述,应用场景及matlab完整代码

一、麻雀搜索算法(SSA)原理 1. 算法基础 麻雀搜索算法(Sparrow Search Algorithm, SSA)是2020年提出的一种群体智能优化算法,灵感来源于麻雀群体的觅食与反捕食行为。算法将麻雀分为三类角色:发现者(Producer):适应度最高,负责探索全局最优区域;加入者(Follower)…...

0322-数据库与前后端的连接、数据库表的增删改查

前端 <!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>Insert title here</title> <script srcjs/jquery-3.7.1.min.js></script> <script> //jquaryajax发起请求 //传参形式不同 post用data{}…...

详细介绍Qt中用于断言的宏 Q_ASSERT

Q_ASSERT 是 Qt 框架中用于调试的核心宏之一&#xff0c;其作用类似于标准 C/C 的 assert&#xff0c;但针对 Qt 的特性进行了优化。它用于在开发阶段验证程序的逻辑正确性&#xff0c;帮助开发者快速定位潜在的错误。 1.基本用法 Q_ASSERT(condition);功能&#xff1a;在调试…...

基于Python的自然语言处理系列(60):使用 LangChain 构建 Multi-Vector Retriever 进行文档检索

在 NLP 和 AI 领域&#xff0c;基于嵌入&#xff08;Embeddings&#xff09;进行文档检索已成为一种高效的解决方案。本文介绍如何使用 LangChain 构建 Multi-Vector Retriever&#xff0c;实现对长文档的分块索引和高效检索。 1. 环境准备 首先&#xff0c;我们需要安装相关…...

Dify 部署指南-离线版

Docker 部署 1、 访问 Docker 官网 (https://www.docker.com/) 获取安装包。 2、 上传 Docker 安装包 3、 进入解压目录&#xff0c;执行解压命令 tar xzvf docker-28、0.2、tgz4、 将解压文件中的 Docker 相关文件移动到 /usr/bin/ 目录 sudo cp docker/* /usr/bin/5、 创建…...

解决 Element UI 嵌套弹窗的状态管理问题!!!

解决 Element UI 嵌套弹窗的状态管理问题 &#x1f527; 问题描述 ❓ 在使用 Element UI 开发一个多层嵌套弹窗功能时&#xff0c;遇到了以下问题&#xff1a; 弹窗只能打开一次&#xff0c;第二次点击无法打开 &#x1f6ab;收到 Vue 警告&#xff1a;避免直接修改 prop 值…...

基于STM32单片机的智能手环/音乐播放/语音识别

基于STM32单片机的智能手环/音乐播放/语音识别 持续更新&#xff0c;欢迎关注!!! ** 基于STM32单片机的智能手环/音乐播放/语音识别 ** 21世纪&#xff0c;社会高速发展&#xff0c;生活物质越来越丰富&#xff0c;随着科技的进步&#xff0c;智能化成为了人们关注的焦点&am…...

NFC 智能门锁全栈解决方案:移动端、服务器、Web 管理平台

目录 一、系统整体架构 二、移动端 APP 开发 2.1 开发环境与基础准备 2.2 主要功能模块 2.3 示例代码&#xff08;Android/Kotlin 简化示例&#xff09; 三、后台服务开发 3.1 环境准备 3.2 主要功能 3.3 示例代码&#xff08;Node.js Express 简化示例&#xff09; …...

使用 Python 开发 MCP Server 及 Inspector 工具详解

使用 Python 开发 MCP Server 及 Inspector 工具详解 前言 模型上下文协议 (Model Context Protocol, MCP) 是一种新兴的协议&#xff0c;旨在让大型语言模型 (LLM) 更容易地与外部工具和服务集成。本文将介绍如何使用 Python 开发一个 MCP Server&#xff0c;并详细讲解如何使…...

论坛系统测试报告

一、项目背景 为论坛系统项目设计并进行自动化测试。论坛系统由六个页面构成&#xff1a;用户登录页、用户注册页、个人中心页面、我的帖子页面、帖子编辑页、帖子列表页以及帖子详情页。 通过使用selenium工具来定位到web中的元素&#xff0c;对获取到的元素进行自动化测试等操…...

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含5个系统自动创建的线程,具体如下: Main线程(主线程/UI线程) 负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应…...

DML 数据操纵语言学习笔记

一、DML 核心概念体系 1.1 语言定位与边界 DML&#xff08;Data Manipulation Language&#xff09;作为 SQL 三大核心语言之一&#xff0c;专注于数据行级操作&#xff0c;区别于 DDL&#xff08;结构定义&#xff09;和 DCL&#xff08;权限控制&#xff09;。其核心指令包…...

7-Zip 功能介绍

7-Zip 是一款开源、高效的文件压缩与解压缩工具&#xff0c;支持多种格式&#xff0c;以高压缩率和灵活性著称。以下是其核心功能&#xff1a; 多格式支持 压缩 / 解压&#xff1a;支持 7z&#xff08;默认格式&#xff0c;压缩率极高&#xff09;、ZIP、RAR、GZIP、BZIP2、TAR…...

《基于python游戏设计与实现》开题报告

个人主页:@大数据蟒行探索者 一、研究背景、目的及意义 (一)研究背景 游戏的普及与成功:随着智能手机的普及和网络技术的发展,手机游戏产业逐渐成熟,成为娱乐文化产业的重要组成部分。《开心消消乐》作为一款休闲类游戏,自上线以来凭借其简单易上手的玩法和丰富的…...

鸿蒙学习笔记(3)-像素单位、this指向问题、RelativeContainer布局、@Style装饰器和@Extend装饰器

一、像素单位 物理像素&#xff1a;用px表示。 逻辑像素&#xff1a;在布局的时候&#xff0c;底层针对物理像素和屏幕尺寸关系进行转化的中间层。 分辨率&#xff1a;代表在屏幕上到底布局了多少了像素点&#xff08;发光点) 官方同时也提供了相关单位&#xff0c;在开发中…...

Selenium之简介

Selenium简介 首先&#xff0c;让我们看看官网是怎么定义的 Selenium是一个支持web浏览器自动化的一系列工具和库的综合项目&#xff0c;提供了扩展来模拟用户和浏览器的交互&#xff0c;用于扩展浏览器分配的分发服务器&#xff1b;用于W3C WebDriver规范的基础架构 其实&a…...

使用Ollama(自定义安装位置)与RagFlow构建本地知识库

目录 1. 为什么不直接使用网页版DeepSeek?2. 如何实现网页版DeepSeek不能实现的需求?3. 目标效果预览4. 为什么要使用RAG技术?RAG和模型微调的区别?5. 什么是Embedding?为什么需要“Embedding模型”?6. 本地部署全流程6.1 下载ollama&#xff0c;通过olama将DeepSeek模型…...

基于ssm的医院预约挂号系统

一、系统架构 前端&#xff1a;jsp | bootstrap | jquery | css | ajax 后端&#xff1a;spring | springmvc | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | tomcat 二、代码及数据 三、功能介绍 01. 注册 02. 登录 03. 首页 04. 医院挂号 05. …...

如何通过less在vue2中达到切换皮肤的目的

先装less npm install less less-loader --save-dev 然后将该 loader 添加到 webpack 的配置中去&#xff0c;例如&#xff1a; webpack.config.js module.exports {module: {rules: [{test: /\.less$/i,use: [// compiles Less to CSSstyle-loader,css-loader,less-loade…...

DeepSeek概述

一、DeepSeek概述 1.1 DeepSeek是什么 DeepSeek是一家专注 通用人工智能&#xff08;AGI&#xff0c;Artificial General Intelligence&#xff09;的中国科技公司&#xff0c;主攻大数据研发与应用。DeepSeek-R1是其开源的推理模型&#xff0c;擅长处理复杂任务且可免费商用…...

生成模型速通(Diffusion,VAE,GAN)

基本概念 参考视频https://www.bilibili.com/video/BV1re4y1m7gb/?spm_id_from333.337.search-card.all.click&vd_sourcef04f16dd6fd058b8328c67a3e064abd5 生成模型其实是主要是依赖概率分布&#xff0c;对输入特征的概率密度函数建模 隐空间&#xff08;latent space)…...

linux/android 如何获取当前系统启动时长

uptime 指令获取 trinket:/ # uptime12:03:31 up 3 min, 0 users, load average: 1.02, 0.68, 0.29...

Elasticsearch客户端工具初探--kibana

1 Kibana简介 Kibana是Elastic Stack&#xff08;ELK&#xff09;中的可视化工具&#xff0c;用于对Elasticsearch中存储的数据进行搜索、分析和可视化展示。它提供了直观的Web界面&#xff0c;支持日志分析、业务监控、数据探索等功能&#xff0c;广泛应用于运维监控、安全分析…...

深克隆和浅克隆(建造者模式,内含简版)

让我们来看一个例子&#xff1a; 设计一个客户类Customer&#xff0c;其中客户地址存储在地址类Address中&#xff0c;用浅克隆和深克隆分别实现Customer对象的复制并比较这两种克隆方式的异同。 代码实现 Customer类和Address类都是实现的Java 内置的 java.lang.Cloneable …...

吴恩达机器学习笔记复盘(十二)逻辑回归的梯度下降和拟合问题

梯度下降算法推导过程 一、逻辑回归模型基础 逻辑回归用于二分类问题&#xff0c;其假设函数为sigmoid函数&#xff1a; 其中&#xff0c;是模型参数向量&#xff0c;是特征向量。输出表示样本属于正类的概率。 二、损失函数 逻辑回归的损失函数采用 对数损失&#xff08;交…...

OSPF五种报文分析(仅部分比较重要的)

OSPF五种报文分别是&#xff1a; hello报文&#xff0c;DBD数据库描述报文&#xff0c;LSR链路状态请求报文&#xff0c;LSU链路状态更新报文&#xff0c;LSACK链路状态确认包 以下是这五种报文的详细解读&#xff1a; 1. Hello报文 作用&#xff1a; 用于邻居的发现、建立和…...

Ubuntu 22.04 二进制安装单节点 MySQL

Ubuntu 22.04 二进制安装 MySQL LTS&#xff08;长期支持版&#xff09;完整教程 MySQL LTS 版本选择&#xff1a; 目前 MySQL 8.4.4 是长期支持&#xff08;LTS&#xff09;版本&#xff0c;持续更新并保持稳定。 下载版本&#xff1a; 你也可以在 MySQL 官方网站确认最新稳…...

python处理音频相关的库

1 音频信号采集与播放 pyaudio import sys import pyaudio import wave import timeCHUNK 1024 FORMAT pyaudio.paInt16 CHANNELS 1#仅支持单声道 RATE 16000 RECORD_SECONDS 3#更改录音时长#录音函数&#xff0c;生成wav文件 def record(file_name):try:os.close(file_…...

python+ffmpeg给音频添加背景音乐

说明&#xff1a; 我希望用python&#xff0c;将name.mp3这段录音文件&#xff0c;添加背景音乐&#xff0c;bg.mp3&#xff0c;然后生成新的文件 step1: 添加依赖 pip install pydubstep2:下载ffmpeg 1.打开windows powershell &#xff0c;管理员运行 2.winget install ff…...

《TypeScript 面试八股:高频考点与核心知识点详解》

“你好啊&#xff01;能把那天没唱的歌再唱给我听吗&#xff1f; ” 前言 因为主包还是主要学习js&#xff0c;ts浅浅的学习了一下&#xff0c;在简历中我也只会写了解&#xff0c;所以我写一些比较基础的八股&#xff0c;如果是想要更深入的八股的话还是建议找别人的。 Ts基…...

鸡生蛋还是蛋生鸡? 基于python的CCM因果关系计算

文章目录 前言一、安装二、代码1.全部代码2.结果展示总结前言 因果推断在科学研究中起着重要的作用,尤其是在复杂系统中,例如生态学、气候学、经济学等领域。在这些领域中,了解变量之间的因果关系可以帮助我们更好地理解系统的动态行为和相互作用。传统的相关性分析并不足以…...

PyBluez2 的详细介绍、安装指南、使用方法及配置说明

PyBluez2&#xff1a;Python 蓝牙开发的核心库 一、PyBluez2 简介 PyBluez2 是 Python 的开源蓝牙编程库&#xff0c;支持蓝牙 2.0、BLE&#xff08;低功耗蓝牙&#xff09;和传统蓝牙协议栈的开发。它提供了对蓝牙硬件适配器的底层控制&#xff0c;适用于设备发现、配对、数…...

鸿蒙HarmonyOS NEXT之无感监听

鸿蒙中存在一些无感监听&#xff0c;这些监听经过系统API封装使用很简单&#xff0c;但是对实际业务开发中有很重要&#xff0c;例如埋点业务、数据统计、行为上报、切面拦截等。 Navigation的页面切换 在鸿蒙中Navigation被用来作为路由栈进行页面跳转&#xff0c;如果你想知…...

质检LIMS系统在食品生产加工企业的应用 如何保证食品生产企业的安全

在食品生产加工领域&#xff0c;质量安全是贯穿全产业链的生命线。随着《食品安全法》对全过程追溯要求的深化&#xff0c;传统实验室管理模式已难以满足高效、精准的质量管控需求。质检实验室信息管理系统&#xff08;LIMS&#xff09;作为数字化升级的核心工具&#xff0c;正…...

linux中如何获取其他进程的退出状态

进程的退出状态至关重要&#xff0c;用wait系列函数&#xff0c;父进程可以捕捉到子进程的退出状态&#xff0c;若给定任意进程&#xff0c;其父进程已经确定&#xff0c;无法改变&#xff0c;自己如何获取到其退出状态呢。 可以用ptrace系统api attach到相应的进程&#xff0c…...

【android】补充

3.3 常用布局 本节介绍常见的几种布局用法&#xff0c;包括在某个方向上顺序排列的线性布局&#xff0c;参照其他视图的位置相对排列的相对布局&#xff0c;像表格那样分行分列显示的网格布局&#xff0c;以及支持通过滑动操作拉出更多内容的滚动视图。 3.3.1 线性布局Linea…...

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战

Unix Domain Socket、IPC、RPC与gRPC的深度解析与实战 引言 在分布式系统和本地服务通信中&#xff0c;进程间通信&#xff08;IPC&#xff09;与远程过程调用&#xff08;RPC&#xff09;是核心能力。本文将深入剖析 Unix Domain Socket&#xff08;UDS&#xff09;、IPC、RP…...

从 MySQL 到时序数据库 TDengine:Zendure 如何实现高效储能数据管理?

小T导读&#xff1a;TDengine 助力广州疆海科技有限公司高效完成储能业务的数据分析任务&#xff0c;轻松应对海量功率、电能及输入输出数据的实时统计与分析&#xff0c;并以接近 1 : 20 的数据文件压缩率大幅降低存储成本。此外&#xff0c;taosX 强大的 transform 功能帮助用…...

华为OD机试A卷 - 积木最远距离(C++ Java JavaScript Python )

最新华为OD机试 真题目录:点击查看目录 华为OD面试真题精选:点击立即查看 题目描述 小华和小薇一起通过玩积木游戏学习数学。 他们有很多积木,每个积木块上都有一个数字,积木块上的数字可能相同。 小华随机拿一些积木挨着排成一排,请小薇找到这排积木中数字相同且所处…...

Zerotier虚拟局域网在树莓派的应用和Syncthing配合Zerotier实现端到端文件同步

一、Zerotier的部署 1、官网注册账号 https://my.zerotier.com/i 2、选择linux系统&#xff0c;执行安装Zerotier curl -s https://install.zerotier.com | sudo bash3、将树莓派网络加入Zerotier zerotier-cli join DB62228FEDF6CE55DB62228FEDF6CE55 为你的Zerotier IP 需…...

C++设计模式-桥梁模式:从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析

一、桥梁模式基本介绍 桥梁模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;又叫桥接模式&#xff0c;其核心思想是将抽象部分与实现部分分离&#xff0c;使它们可以独立变化。这种模式通过组合代替继承&#xff0c;有效解决了多层继承导致的类爆…...