html+js+css做的扫雷

做了个扫雷💣 8×8大小 源代码在文章最后

界面

先点击蓝色开局按钮

然后就可以再扫雷的棋盘上玩

0代表该位置没有雷

其他数字代表周围雷的数量

源代码

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<title>扫雷游戏</title>

<style>

/* CSS代码开始 */

body {

background-color: #f0f0f0;

display: flex;

justify-content: center;

align-items: center;

height: 100vh;

margin: 0;

}

.container {

background-color: white;

padding: 20px;

border-radius: 5px;

box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);

}

.title {

text-align: center;

font-size: 2em;

margin-bottom: 20px;

}

.start-game-btn {

display: block;

margin: 0 auto 20px;

padding: 10px 20px;

background-color: #007bff;

color: white;

border: none;

border-radius: 5px;

cursor: pointer;

box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);

transition: all 0.3s ease;

}

.start-game-btn:hover {

background-color: #0056b3;

}

td {

width: 30px;

height: 30px;

text-align: center;

vertical-align: middle;

border: 1px solid #ddd;

cursor: pointer;

}

/* CSS代码结束 */

</style>

</head>

<body>

<div class="container">

<h1 class="title">扫雷</h1>

<button id="startGameBtn" class="start-game-btn">开局</button>

<table id="mineField"></table>

</div>

<script>

/* JavaScript代码开始 */

document.getElementById('startGameBtn').addEventListener('click', startGame);

function startGame() {

const mineField = document.getElementById('mineField');

mineField.innerHTML = '';

const rows = 8, cols = 8;

const mines = 10;

for (let i = 0; i < rows; i++) {

let row = document.createElement('tr');

for (let j = 0; j < cols; j++) {

let cell = document.createElement('td');

cell.addEventListener('click', () => revealCell(i, j));

row.appendChild(cell);

}

mineField.appendChild(row);

}

let mineLocations = \[\];

while (mineLocations.length < mines) {

let x = Math.floor(Math.random() * rows);

let y = Math.floor(Math.random() * cols);

if (!mineLocations.includes(x + ',' + y)) {

mineLocations.push(x + ',' + y);

document.getElementById('mineField').rowsx.cellsy.setAttribute('data-mine', 'true');

}

}

function revealCell(row, col) {

let cell = document.getElementById('mineField').rowsrow.cellscol;

if (cell.getAttribute('data-revealed') === 'true') return;

cell.setAttribute('data-revealed', 'true');

if (cell.getAttribute('data-mine') === 'true') {

alert('失败!');

resetGame();

} else {

cell.textContent = getAdjacentMinesCount(row, col);

if (cell.textContent === '0') {

revealAdjacentCells(row, col);

}

checkWin();

}

}

function getAdjacentMinesCount(row, col) {

let count = 0;

for (let i = -1; i <= 1; i++) {

for (let j = -1; j <= 1; j++) {

if (i === 0 && j === 0) continue;

let r = row + i, c = col + j;

if (r >= 0 && r < rows && c >= 0 && c < cols) {

if (document.getElementById('mineField').rowsr.cellsc.getAttribute('data-mine') === 'true') {

count++;

}

}

}

}

return count;

}

function revealAdjacentCells(row, col) {

for (let i = -1; i <= 1; i++) {

for (let j = -1; j <= 1; j++) {

if (i === 0 && j === 0) continue;

let r = row + i, c = col + j;

if (r >= 0 && r < rows && c >= 0 && c < cols) {

revealCell(r, c);

}

}

}

}

function checkWin() {

let revealedCells = 0;

for (let i = 0; i < rows; i++) {

for (let j = 0; j < cols; j++) {

if (document.getElementById('mineField').rowsi.cellsj.getAttribute('data-revealed') === 'true') {

revealedCells++;

}

}

}

if (revealedCells === rows * cols - mines) {

alert('成功!');

resetGame();

}

}

function resetGame() {

window.location.reload();

}

}

/* JavaScript代码结束 */

</script>

</body>

</html>

相关推荐
JieE21218 小时前
LeetCode 56. 合并区间|超清晰 JS 图解思路,面试高频区间题
javascript·算法·面试
candyTong21 小时前
RTK 技术原理:一次典型会话里,80% 上下文是怎么省下来的
javascript·后端·架构
_柳青杨1 天前
深入理解 JavaScript 事件循环
前端·javascript
大家的林语冰1 天前
ES5 凉凉,Babel 8 正式发布,默认不再编译为 ES5 和 CJS......
前端·javascript·前端工程化
weedsfly1 天前
异步编程全景与事件循环——彻底搞懂 JS 执行机制
前端·javascript
用户059540174461 天前
AI Agent记忆测试踩坑实录:Mock骗了我一周,Mem0+pytest一招破局
前端·css
用户1733598075371 天前
纯前端 PDF 数字签名实战:Vue 3 + pdf-lib 在浏览器里完成签名嵌入
前端·javascript
JieE2122 天前
LeetCode 226. 翻转二叉树|JS 递归超详细拆解,二叉树入门经典题
javascript·算法
JieE2122 天前
LeetCode 104. 二叉树的最大深度|递归思路超详细拆解
javascript·算法
kyriewen2 天前
我用 AI 一周写完了整个项目,上线第一天就崩了——这是我踩过最贵的 5 个坑
前端·javascript·ai编程