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

html5:从零构建经典游戏-扫雷游戏

扫雷是Windows系统自带的经典游戏,陪伴了许多人的童年。

本文将详细解析一个用HTML、CSS和JavaScript实现的扫雷游戏代码,带你了解其背后的实现原理。

游戏概述

这个扫雷游戏实现包含以下核心功能:

  • 10×10的游戏棋盘

  • 15个随机分布的地雷

  • 左键点击揭开格子

  • 右键点击标记地雷

  • 自动展开空白区域

  • 胜利/失败判定

HTML结构

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>扫雷游戏</title><!-- CSS样式 -->
</head>
<body><h1>扫雷游戏</h1><div id="game-board"></div><!-- JavaScript代码 -->
</body>
</html>

结构非常简单,只有一个标题和游戏板容器。所有游戏逻辑都通过JavaScript动态生成。

CSS样式设计

CSS部分定义了游戏的外观:

.cell {width: 30px;height: 30px;border: 1px solid #ccc;/* 其他样式 */
}
.cell.revealed {background-color: #fff;
}
.cell.mine {background-color: #ff4444;
}
.cell.flagged {background-color: #ffcc00;
}
  • 基本格子样式:灰色背景,浅灰色边框

  • 已揭开格子:白色背景

  • 地雷格子:红色背景

  • 标记格子:黄色背景

JavaScript游戏逻辑

1. 游戏初始化

javascript

const BOARD_SIZE = 10;
const MINE_COUNT = 15;
let board = [];
let gameOver = false;

定义了游戏常量:棋盘大小和地雷数量,以及游戏状态变量。

2. 创建游戏板

createBoard()函数负责初始化游戏:

  1. 设置CSS Grid布局

  2. 创建格子DOM元素并添加到游戏板

  3. 初始化游戏数据结构

  4. 放置地雷并计算数字

javascript

function createBoard() {// 设置Grid布局gameBoard.style.gridTemplateColumns = `repeat(${BOARD_SIZE}, 30px)`;// 创建格子for (let row = 0; row < BOARD_SIZE; row++) {board[row] = [];for (let col = 0; col < BOARD_SIZE; col++) {// 创建DOM元素const cell = document.createElement('div');// 添加事件监听cell.addEventListener('click', handleCellClick);cell.addEventListener('contextmenu', handleRightClick);// 初始化游戏数据board[row][col] = { mine: false, revealed: false, flagged: false, count: 0 };}}placeMines();calculateNumbers();
}

3. 随机放置地雷

placeMines()函数随机放置指定数量的地雷:

javascript

function placeMines() {let minesPlaced = 0;while (minesPlaced < MINE_COUNT) {const row = Math.floor(Math.random() * BOARD_SIZE);const col = Math.floor(Math.random() * BOARD_SIZE);if (!board[row][col].mine) {board[row][col].mine = true;minesPlaced++;}}
}

使用while循环确保放置足够数量的地雷,避免重复放置。

4. 计算周围地雷数

calculateNumbers()为每个非地雷格子计算周围地雷数量:

javascript

function calculateNumbers() {for (let row = 0; row < BOARD_SIZE; row++) {for (let col = 0; col < BOARD_SIZE; col++) {if (board[row][col].mine) continue;let count = 0;// 检查周围8个格子for (let i = -1; i <= 1; i++) {for (let j = -1; j <= 1; j++) {const newRow = row + i;const newCol = col + j;// 边界检查if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol].mine) {count++;}}}board[row][col].count = count;}}
}

5. 处理玩家点击

左键点击处理函数handleCellClick

javascript

function handleCellClick(event) {if (gameOver) return;const cell = event.target;const row = parseInt(cell.dataset.row);const col = parseInt(cell.dataset.col);revealCell(row, col);
}

右键点击处理函数handleRightClick用于标记地雷:

javascript

function handleRightClick(event) {event.preventDefault(); // 阻止上下文菜单if (gameOver) return;const cell = event.target;const row = parseInt(cell.dataset.row);const col = parseInt(cell.dataset.col);if (!board[row][col].revealed) {board[row][col].flagged = !board[row][col].flagged;cell.classList.toggle('flagged', board[row][col].flagged);}
}

6. 揭开格子逻辑

revealCell()是游戏核心函数,处理格子揭开逻辑:

javascript

function revealCell(row, col) {// 已揭开或已标记则返回if (board[row][col].revealed || board[row][col].flagged) return;const cell = document.querySelector(`.cell[data-row='${row}'][data-col='${col}']`);board[row][col].revealed = true;cell.classList.add('revealed');// 踩到地雷if (board[row][col].mine) {cell.classList.add('mine');gameOver = true;alert('游戏结束!你踩到了地雷!');return;}// 显示周围地雷数cell.textContent = board[row][col].count || '';// 如果是空白格子,自动展开周围if (board[row][col].count === 0) {for (let i = -1; i <= 1; i++) {for (let j = -1; j <= 1; j++) {const newRow = row + i;const newCol = col + j;// 边界检查if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE) {revealCell(newRow, newCol);}}}}checkWin();
}

7. 胜利判定

checkWin()检查玩家是否已揭开所有安全格子:

javascript

function checkWin() {let unrevealedSafeCells = 0;for (let row = 0; row < BOARD_SIZE; row++) {for (let col = 0; col < BOARD_SIZE; col++) {if (!board[row][col].mine && !board[row][col].revealed) {unrevealedSafeCells++;}}}if (unrevealedSafeCells === 0) {gameOver = true;alert('恭喜你,你赢了!');}
}

游戏特点

  1. 递归展开:当点击空白格子时,会自动展开相邻的所有空白格子

  2. 即时反馈:点击地雷立即结束游戏,显示失败

  3. 标记功能:右键点击可以标记疑似地雷的格子

  4. 响应式设计:使用CSS Grid布局,适应不同屏幕大小

总结

这个扫雷游戏实现展示了如何使用基本的Web技术创建经典游戏。

通过合理的数据结构和算法设计,实现了游戏的核心逻辑。代码结构清晰,适合初学者学习和扩展。

html代码

如下:

<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><title>扫雷游戏</title><style>body {font-family: Arial, sans-serif;text-align: center;}#game-board {display: grid;margin: 20px auto;border: 2px solid #333;}.cell {width: 30px;height: 30px;border: 1px solid #ccc;text-align: center;line-height: 30px;cursor: pointer;background-color: #eee;}.cell.revealed {background-color: #fff;cursor: default;}.cell.mine {background-color: #ff4444;}.cell.flagged {background-color: #ffcc00;}</style>
</head>
<body><h1>扫雷游戏</h1><div id="game-board"></div><script>const BOARD_SIZE = 10;const MINE_COUNT = 15;let board = [];let gameOver = false;function createBoard() {const gameBoard = document.getElementById('game-board');gameBoard.style.gridTemplateColumns = `repeat(${BOARD_SIZE}, 30px)`;for (let row = 0; row < BOARD_SIZE; row++) {board[row] = [];for (let col = 0; col < BOARD_SIZE; col++) {const cell = document.createElement('div');cell.classList.add('cell');cell.dataset.row = row;cell.dataset.col = col;cell.addEventListener('click', handleCellClick);cell.addEventListener('contextmenu', handleRightClick);gameBoard.appendChild(cell);board[row][col] = { mine: false, revealed: false, flagged: false, count: 0 };}}placeMines();calculateNumbers();}function placeMines() {let minesPlaced = 0;while (minesPlaced < MINE_COUNT) {const row = Math.floor(Math.random() * BOARD_SIZE);const col = Math.floor(Math.random() * BOARD_SIZE);if (!board[row][col].mine) {board[row][col].mine = true;minesPlaced++;}}}function calculateNumbers() {for (let row = 0; row < BOARD_SIZE; row++) {for (let col = 0; col < BOARD_SIZE; col++) {if (board[row][col].mine) continue;let count = 0;for (let i = -1; i <= 1; i++) {for (let j = -1; j <= 1; j++) {const newRow = row + i;const newCol = col + j;if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE && board[newRow][newCol].mine) {count++;}}}board[row][col].count = count;}}}function handleCellClick(event) {if (gameOver) return;const cell = event.target;const row = parseInt(cell.dataset.row);const col = parseInt(cell.dataset.col);revealCell(row, col);}function handleRightClick(event) {event.preventDefault();if (gameOver) return;const cell = event.target;const row = parseInt(cell.dataset.row);const col = parseInt(cell.dataset.col);if (!board[row][col].revealed) {board[row][col].flagged = !board[row][col].flagged;cell.classList.toggle('flagged', board[row][col].flagged);}}function revealCell(row, col) {if (board[row][col].revealed || board[row][col].flagged) return;const cell = document.querySelector(`.cell[data-row='${row}'][data-col='${col}']`);board[row][col].revealed = true;cell.classList.add('revealed');if (board[row][col].mine) {cell.classList.add('mine');gameOver = true;alert('游戏结束!你踩到了地雷!');return;}cell.textContent = board[row][col].count || '';if (board[row][col].count === 0) {for (let i = -1; i <= 1; i++) {for (let j = -1; j <= 1; j++) {const newRow = row + i;const newCol = col + j;if (newRow >= 0 && newRow < BOARD_SIZE && newCol >= 0 && newCol < BOARD_SIZE) {revealCell(newRow, newCol);}}}}checkWin();}function checkWin() {let unrevealedSafeCells = 0;for (let row = 0; row < BOARD_SIZE; row++) {for (let col = 0; col < BOARD_SIZE; col++) {if (!board[row][col].mine && !board[row][col].revealed) {unrevealedSafeCells++;}}}if (unrevealedSafeCells === 0) {gameOver = true;alert('恭喜你,你赢了!');}}createBoard();</script>
</body>
</html>

相关文章:

html5:从零构建经典游戏-扫雷游戏

扫雷是Windows系统自带的经典游戏&#xff0c;陪伴了许多人的童年。 本文将详细解析一个用HTML、CSS和JavaScript实现的扫雷游戏代码&#xff0c;带你了解其背后的实现原理。 游戏概述 这个扫雷游戏实现包含以下核心功能&#xff1a; 1010的游戏棋盘 15个随机分布的地雷 左…...

SVT-AV1源码分析-函数svt_aom_motion_estimation_kernel

一 svt_aom_motion_estimation_kernel函数作用 这段代码是EBSDK 中的一个运动估计 内核函数&#xff0c;用于处理视频编码中的运动估计任务。运动估计任务。运动估计是视频编码中的一个关键步骤&#xff0c;目的是在时间域上找到当前块在参考帧中的最佳匹配块&#xff0c;从而减…...

考研系列-计算机组成原理第六章、总线

一、总线概述 1.总线的基本概念 2.总线的分类 (1)按照传输格式 并行总线的传输速度并不一定比串行总线快,因为并行总线之间存在干扰,不能太快。 (2)按照总线功能 片内总线、系统总线、IO总线、通信总线...

HTML基础完全解析

一、HTML基本结构解析 1.1 文档骨架 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>文档标题</title> </head> <body>页面主体内容 </body> </html> &#x1f3…...

【读写视频】MATLAB详细代码

MATLAB将视频逐帧输出 在MATLAB中&#xff0c;可以使用VideoReader和imwrite函数将视频逐帧输出为图像文件。以下是具体步骤和示例代码&#xff1a; 读取视频并逐帧保存为图像 首先&#xff0c;使用VideoReader函数读取视频文件&#xff0c;然后使用read函数逐帧读取视频&am…...

NCCL 通信与调试

代码仓库 https://github.com/NVIDIA/nccl-tests 代码编译 编译 nccl-tests (MPI 版本): ” 编译支持 MPI 的 nccl-tests 是整合 nvcc, mpicc 和 NCCL 库的关键步骤 初始编译命令 (基于 README): cd /path/to/your/nccl-tests # 进入源码目录 make clean make MPI1 CUDA_HO…...

Linux 在个人家目录下添加环境变量 如FLINK_PROPERTIES=“jobmanager.rpc.address: jobmanager“

问题&#xff1a; Docker Flink Application Mode 命令行形式部署前&#xff0c;需要在Linux执行以下&#xff1a; $ FLINK_PROPERTIES"jobmanager.rpc.address: jobmanager" $ docker network create flink-network 临时变量只在当前session会话窗口生效&#xf…...

Linux中线程池的简单实现 -- 线程安全的日志模块,策略模式,线程池的封装设计,单例模式,饿汉式单例模式,懒汉式单例模式

目录 1. 对线程池的理解 1.1 基本概念 1.2 工作原理 1.3 线程池的优点 2. 日志与策略模式 2.1 日志认识 2.2 策略模式 2.2.1 策略模式的概念 2.2.2 工作原理 2.2 自定义日志系统的实现 3. 线程池设计 3.1 简单线程池的设计 3.2 线程安全的单例模式线程池的设计 3…...

【Web API系列】深入解析 Web Service Worker 中的 WindowClient 接口:原理、实践与进阶应用

前言 在现代 Web 开发领域中&#xff0c;Service Worker 技术已成为构建离线优先应用和实现高级缓存策略的核心支柱。作为 Service Worker API 体系中的重要组成部分&#xff0c;WindowClient 接口为开发者提供了对受控客户端窗口的精准控制能力。本文将从实际工程实践的角度出…...

哈希封装unordered_map和unordered_set的模拟实现

文章目录 &#xff08;一&#xff09;认识unordered_map和unordered_set&#xff08;二&#xff09;模拟实现unordered_map和unordered_set2.1 实现出复用哈希表的框架2.2 迭代器iterator的实现思路分析2.3 unordered_map支持[] &#xff08;三&#xff09;结束语 &#xff08;…...

智诚科技苏州SOLIDWORKS授权代理商的卓越之选

在当今数字化转型浪潮中&#xff0c;SOLIDWORKS软件以其强大的功能和广泛的行业应用&#xff0c;成为企业迈向智能制造的有力工具。它不仅提供直观的3D建模环境&#xff0c;帮助企业设计师快速创建精准的3D模型&#xff0c;还涵盖了从概念设计到详细设计、从样品制作到最终产品…...

【网络原理】从零开始深入理解TCP的各项特性和机制.(二)

本篇博客给大家带来的是TCP/IP原理的知识点,重点以TCP为主,接续上篇. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分享给谁,那就分享给薯条. 你们的支持是我不断创作的动力 . 王子,公主请阅&#x1f680; …...

51单片机所有寄存器介绍

51单片机所有寄存器介绍 作者将狼才鲸创建日期2025-04-27 参考资料&#xff1a;Intel官方《MCS-51 Programmer’s Guide and Instruction Set.pdf》CSDN阅读地址&#xff1a;51单片机所有寄存器介绍 一、前言 51单片机的寄存器和ARM不一样&#xff0c;有自己专有的名称&…...

4.27算法题

力扣649.Dota2 参议院 649. Dota2 参议院 Dota2 的世界里有两个阵营&#xff1a;Radiant&#xff08;天辉&#xff09;和 Dire&#xff08;夜魇&#xff09; Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程…...

衡石科技:HENGSHI SENSE 数据权限解决方案

编写目的​ 本方案主要讲述 HENGSHI SENSE 的数据权限方案&#xff0c;即在 HENGSHI SENSE 系统中&#xff0c;通过同步企业内部的人员属性和组织架构等信息&#xff0c;实现企业内部的每一个用户对于业务数据的读取权限。 本方案的的预期读者为&#xff1a;HENGSHI SENSE 的…...

矩阵系统源码搭建热门音乐功能板块开发,支持OEM

在数字音乐蓬勃发展的当下&#xff0c;矩阵系统中的热门音乐功能板块成为吸引用户的重要部分。它不仅能为用户推荐当下流行的音乐&#xff0c;还能提升用户在系统中的活跃度和留存率。本文将通过详细的源码搭建过程&#xff0c;带你了解如何在矩阵系统中实现一个功能完备的热门…...

深入理解Android Activity生命周期

引言 在Android开发中,理解Activity的生命周期对于创建高效、稳定的应用程序至关重要。无论你是初学者还是资深开发者,掌握Activity生命周期的概念都能帮助你更好地管理资源、优化性能以及处理各种用户交互场景。本文将详细介绍Activity生命周期中的各个事件,并通过示例代码…...

【WEB3】web3.0是什么

互联网在不断发展。 我们即将翻开新的篇章&#xff0c;迎来翻天覆地的变化。 — Web 1.0 只能阅读信息。 它主要是供我们访问和阅读信息&#xff0c;只有极少数人可以真正发布内容。 — Web 2.0&#xff0c;即互联网目前所处的阶段&#xff0c;我们能够在网络上发布内容、建立…...

2025上海车展 | 移远通信重磅发布AR脚踢毫米波雷达,重新定义“无接触交互”尾门

4月25日&#xff0c;在2025上海国际汽车工业展览会期间&#xff0c;全球领先的物联网和车联网整体解决方案供应商移远通信宣布&#xff0c;其全新AR脚踢毫米波雷达RD7702AC正式发布。 该产品专为汽车尾门“无接触交互”设计&#xff0c;基于先进的毫米波技术&#xff0c;融合AR…...

ubuntu安装git及使用(本地git)

ubuntu安装git及使用教程&#xff08;本地git&#xff09; 1.ubuntu安装git1.1 查看自己的Ubuntu是否已经装有git1.2 下面进行介绍如何Ubuntu终端安装git &#xff08;若已安装则可忽略&#xff09; 2. 配置Git基本信息2.1 若不清楚是否配置的可使用如下命令查看2.2 未配置用户…...

数智读书笔记系列031《HIS内核设计之道——医院信息系统规划设计系统思维》书籍简介与读书笔记

一、作者与出版信息 作者团队(核心贡献者) 任连仲 身份:中国工程院院士(2022年当选),解放军总医院信息科原主任技术贡献: 主导“军字一号”系统架构设计(1997-2005年),支撑全国300余家三甲医院信息化建设提出“医疗数据语义网格”理论,获国家科技进步二等奖(2018年…...

WinForm真入门(18)——DateTimePicker‌控件解析

一、基本概念‌ ‌DateTimePicker‌ 是 Windows 窗体中用于选择日期和时间的控件&#xff0c;支持以下交互方式&#xff1a; 通过下拉日历选择日期通过上下按钮调整时间直接输入日期或时间 适用于需要规范日期格式、限制日期范围或快速输入的场景&#xff08;如预约系统、数据…...

关于堆栈指针的那些事 | bootloader 如何跳转app

问题描述 堆栈指针的值通常存储在 App 的向量表&#xff08;Vector Table&#xff09;的第一个位置&#xff08;0x08002000&#xff09;&#xff0c;为什么&#xff1f; 在嵌入式系统中&#xff0c;堆栈指针&#xff08;SP&#xff09;的值存储在应用程序&#xff08;App&…...

如何在 iPhone 上恢复已删除的联系人:简短指南

从 iPhone 中删除联系人相当容易&#xff0c;但如果您不小心删除了错误的联系人或丢失了所有联系人怎么办&#xff1f;这可能是任何智能手机用户都可能发生的最糟糕的噩梦之一。 如何在 iPhone 上恢复已删除的联系人 我个人在我的列表上看到几个用户发布关于他们如何丢失所有联…...

使用Aspose.Words将Word转换为HTML时,字体样式丢失问题及解决方法

使用Aspose.Words将Word转换为HTML时&#xff0c;字体样式丢失问题及解决方法 引言 ✨一、问题描述 &#x1f4c9;二、问题分析 &#x1f50d;三、解决方案 &#x1f6e0;️四、总结 &#x1f3c1; 引言 ✨ 在实际开发中&#xff0c;使用Aspose.Words将Word文档转换为HTML格式…...

更快的图像局部修改与可控生成:Flex.2-preview

Flex.2-preview 文本生成图像扩散模型介绍 一、模型简介 Flex.2-preview 是一种 开源的 80 亿参数文本生成图像扩散模型&#xff0c;具备通用控制和修复支持功能&#xff0c;是 Flex.1alpha 的下一代版本。该模型由社区开发并为社区服务&#xff0c;采用 Apache 2.0 许可证&a…...

汽车制造行业如何在数字化转型中抓住机遇?

近年来&#xff0c;随着新一轮科技革命和产业变革的深入推进&#xff0c;汽车制造行业正迎来一场前所未有的数字化转型浪潮。无论是传统车企还是新势力品牌&#xff0c;都在积极探索如何通过数字化技术提升竞争力、开拓新市场。那么&#xff0c;在这场变革中&#xff0c;汽车制…...

数据可视化 —— 直方图

一、前言 直方图&#xff08;Histogram&#xff09;是一种用柱状图形表示数据分布的统计图表&#xff0c;它将数据划分为连续的区间&#xff08;称为“分箱”或“区间”&#xff09;&#xff0c;统计每个区间内的数据频数&#xff08;或频率&#xff09;&#xff0c;并用柱形的…...

1、Linux操作系统下,ubuntu22.04版本切换中英文界面

切换中英文界面的方法很多&#xff0c;我也是按照一个能用的方法弄过来并且记录&#xff0c; 1.如果刚开始使用Ubuntu环境&#xff0c;桌面的语言环境为英文&#xff0c;需要安装中文简体的字体包 打开桌面终端&#xff0c;输入 sudo apt install language-pack-zh-hans lan…...

《MySQL 技术内幕-innoDB 存储引擎》笔记

&#x1f4a1; 根据 遗忘曲线&#xff1a;如果没有记录和回顾&#xff0c;6天后便会忘记75%的内容 读书笔记正是帮助你记录和回顾的工具&#xff0c;不必拘泥于形式&#xff0c;其核心是&#xff1a;记录、翻看、思考::: 书名MySQL 技术内幕-innoDB 存储引擎作者姜承尧状态已读…...

C++ AVL树的实现

在上一篇博客我们学习了二叉搜索树的实现&#xff0c;现在我们开始手动实现AVL树。 二叉搜索树-CSDN博客 1.AVL树的概念 AVL树是最先发明的⾃平衡⼆叉查找树&#xff0c;AVL是⼀颗空树&#xff0c;或者具备下列性质的⼆叉搜索树&#xff1a;它的左右⼦树都是AVL树&#xff0c…...

多视觉编码器协同与高低分辨率特征融合技术综述

本文主要介绍&#xff08;论文发表时间&#xff1a;24.03-25.01&#xff09;在多模态中使用多个视觉编码器如何进行特征融合操作&#xff08;之所以用多视觉编码器&#xff0c;主要用途在于&#xff1a;有些视觉编码器可能只能提取到部分信息&#xff0c;就想通过另外一个编码器…...

力扣4-最长公共前缀

一.题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 ""。 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&…...

贪心算法-860.柠檬水找零-力扣(LeetCode)

一、题目解析 我们需要注意我们是没有初始零钱的&#xff0c;所以当第一个顾客支付10或20时&#xff0c;无法找零此时返回false。 二、算法解析 根据贪心算法的解决方式&#xff0c;我们需要先把解决该问题分解为若干步。 首先对于顾客支付的钱共有三种&#xff0c;5&#xf…...

Kubernetes学习笔记-配置Service对接第三方访问

在Kubernetes中配置Service对接第三方访问&#xff0c;可以选择以下方案实现&#xff1a; ExternalName Service&#xff08;基于DNS别名&#xff09;‌ 适用场景‌&#xff1a;外部服务必须有固定域名Service配置文件如下&#xff1a; apiVersion: v1 kind: Service metadata…...

pikachu靶场-敏感信息泄露

一、敏感信息泄露的危害 1. 个人隐私与数据安全 身份盗窃&#xff1a;泄露个人身份信息&#xff08;如姓名、身份证号、手机号&#xff09;可被用于诈骗、冒名开户等犯罪活动。账户劫持&#xff1a;暴露用户账号密码、邮箱等凭证&#xff0c;导致社交媒体、银行账户被非法登录。…...

ppt章节页怎么做好看?ppt章节页模板

ppt章节页怎么做好看&#xff1f;ppt章节页怎么排版&#xff1f;ppt章节页模板: PPT章节_模板素材_PPT模板_ppt素材_免抠图片_AiPPTer...

ubuntu扩展逻辑卷并调整文件系统大小步骤

安装好ubuntu如果没有调整磁盘空间,一般默认给你100G的空间,在用完时再调整也还来得及,下面是 ubuntu扩展逻辑卷并调整文件系统大小步骤&#xff1a; 1. 扩展逻辑卷 运行以下命令来扩展逻辑卷 /dev/ubuntu-vg/ubuntu-lv&#xff0c;使其使用卷组中所有未分配的空间&#xff…...

2.脚本文件初识

—>1.Makefile—自动化构建和管理项目的文件见这篇<— 1.编程语言 编程语言分为2类&#xff0c;一类是编译型语言&#xff0c;将源文件经过编译得到可执行文件&#xff0c;该执行文件可以在特定平台上运行&#xff0c;其他平台则不行&#xff0c;因此是不跨平台的编程语…...

FastAPI + Redis Pub/Sub + WebSocket 组合解决方案的详细介绍

以下是对 FastAPI Redis Pub/Sub WebSocket 组合解决方案的详细介绍&#xff0c;涵盖技术原理、实现步骤、协作流程和适用场景。 1. 技术概述 1.1 FastAPI 特性&#xff1a;基于 Python 的现代异步框架&#xff0c;支持 async/await&#xff0c;性能高效&#xff0c;适合高…...

泛型的诗意——深入C++模板的艺术与科学(模版进阶)

前言&#xff1a; 在之前&#xff0c;小编讲述了模版的初阶内容&#xff0c;当时小编讲述了模版的书写&#xff0c;方便之后容器的讲解以及模拟实现&#xff0c;现在小编已经带领各位学习了很多容器&#xff0c;模版初阶的知识已经用的很多了&#xff0c;今天小编讲述一下全新的…...

【极致版】华为云Astro轻应用抽取IoTDA影子设备参数生成表格页面全流程

做份极致详细Astro调取iotda影子设备数据的操作手册&#xff0c;每一步都分成&#xff1a; 要进入哪个界面 点哪个按钮 要填什么内容&#xff08;样例&#xff09; 如果出错怎么办 填写示例 完全对应你这个需求&#xff1a;Astro轻应用抽取IoTDA影子设备数据&#xff0c;…...

业务中台与数据中台:企业数字化转型的核心引擎

前言&#xff1a;在当今数字化浪潮下&#xff0c;企业为了提升运营效率、加速创新步伐并更好地适应市场变化&#xff0c;业务中台与数据中台应运而生&#xff0c;成为企业架构中的关键组成部分。本文将深入探讨业务中台和数据中台的简介、发展史、技术流环节以及在实际生产中的…...

前端分页与瀑布流最佳实践笔记 - React Antd 版

前端分页与瀑布流最佳实践笔记 - React Antd 版 1. 分页与瀑布流对比 分页&#xff08;Pagination&#xff09;瀑布流&#xff08;Infinite Scroll&#xff09;展示方式按页分批加载&#xff0c;有明确页码控件滚动到底部时自动加载更多内容&#xff0c;无明显分页用户控制用…...

【网络原理】从零开始深入理解TCP的各项特性和机制.(三)

上篇介绍了网络原理传输层TCP协议的知识,本篇博客给大家带来的是网络原理剩余的内容, 总体来说,这部分内容没有上两篇文章那么重要,本篇知识有一个印象即可. &#x1f40e;文章专栏: JavaEE初阶 &#x1f680;若有问题 评论区见 ❤ 欢迎大家点赞 评论 收藏 分享 如果你不知道分…...

MySQL:13.用户管理

13. 用户管理 如果我们只能使用root用户&#xff0c;这样存在安全隐患。这时&#xff0c;就需要使用MySQL的用户管理。 13.1 用户 13.1.1 用户信息 MySQL中的用户&#xff0c;都存储在系统数据库mysql的user表中 mysql> use mysql; Database changed mysql> select h…...

leetcode0103. 二叉树的锯齿形层序遍历-medium

1 题目&#xff1a;二叉树的锯齿形层序遍历 官方标定难度&#xff1a;中 给你二叉树的根节点 root &#xff0c;返回其节点值的 锯齿形层序遍历 。&#xff08;即先从左往右&#xff0c;再从右往左进行下一层遍历&#xff0c;以此类推&#xff0c;层与层之间交替进行&#xf…...

【Go语言】ORM(对象关系映射)库

github.com/jinzhu/gorm 是 Go 语言中一个非常流行的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;用于简化与关系型数据库的交互。以下是关于它的关键信息&#xff1a; 核心特点 全功能 ORM 支持主流数据库&#xff1a;MySQL、PostgreSQL、SQLite、SQL Server 等。…...

Java : GUI

AWT 初始化界面 直接封装起来&#xff1a; panel 的添加 布局 流式布局,控制按钮的位置 东西南北中布局 网格布局 frame.pack();java函数&#xff0c;会自动选择最优的布局 事件监听 给按钮添加 添加文本 画笔 鼠标监听 键盘监听 JDialog”弹窗 默认有关闭事件 标签&#…...

ipa包安装到apple手机上

获ipa包的方式 ipatool 下载appStore的ipa包-CSDN博客 方式一&#xff1a;巨魔商店 原理是利用apple的漏洞&#xff0c;但是有低版本的系统要求 TrollStore - Always Sideload Any IPAs For FreeTrollStore - The ultimate jailbreak app for iOS. Permanently install any …...